aboutsummaryrefslogtreecommitdiffstats
path: root/dist/plyr.polyfilled.min.js.map
blob: 8fd140b2760371ff48488d25b7af47f159fe4d2d (plain)
1
{"version":3,"sources":["node_modules/core-js/modules/_global.js","node_modules/core-js/modules/_core.js","node_modules/core-js/modules/_is-object.js","node_modules/core-js/modules/_an-object.js","node_modules/core-js/modules/_fails.js","node_modules/core-js/modules/_descriptors.js","node_modules/core-js/modules/_dom-create.js","node_modules/core-js/modules/_ie8-dom-define.js","node_modules/core-js/modules/_to-primitive.js","node_modules/core-js/modules/_object-dp.js","node_modules/core-js/modules/_property-desc.js","node_modules/core-js/modules/_hide.js","node_modules/core-js/modules/_has.js","node_modules/core-js/modules/_uid.js","node_modules/core-js/modules/_redefine.js","node_modules/core-js/modules/_a-function.js","node_modules/core-js/modules/_ctx.js","node_modules/core-js/modules/_export.js","node_modules/core-js/modules/_typed.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_to-index.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_iobject.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_array-includes.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_shared-key.js","node_modules/core-js/modules/_object-keys-internal.js","node_modules/core-js/modules/_enum-bug-keys.js","node_modules/core-js/modules/_object-gopn.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_array-fill.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_typed-buffer.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_set-species.js","node_modules/core-js/modules/es6.typed.array-buffer.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_object-keys.js","node_modules/core-js/modules/_object-dps.js","node_modules/core-js/modules/_html.js","node_modules/core-js/modules/_object-create.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/_is-array.js","node_modules/core-js/modules/_array-species-constructor.js","node_modules/core-js/modules/_array-species-create.js","node_modules/core-js/modules/_array-methods.js","node_modules/core-js/modules/_add-to-unscopables.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/_array-copy-within.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_typed-array.js","node_modules/core-js/modules/es6.typed.int8-array.js","node_modules/core-js/modules/es6.typed.uint8-array.js","node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","node_modules/core-js/modules/es6.typed.int16-array.js","node_modules/core-js/modules/es6.typed.uint16-array.js","node_modules/core-js/modules/es6.typed.int32-array.js","node_modules/core-js/modules/es6.typed.uint32-array.js","node_modules/core-js/modules/es6.typed.float32-array.js","node_modules/core-js/modules/es6.typed.float64-array.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_collection-strong.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/es6.map.js","node_modules/core-js/modules/es6.set.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/es6.weak-set.js","node_modules/core-js/modules/es6.reflect.apply.js","node_modules/core-js/modules/_invoke.js","node_modules/core-js/modules/_bind.js","node_modules/core-js/modules/es6.reflect.construct.js","node_modules/core-js/modules/es6.reflect.define-property.js","node_modules/core-js/modules/es6.reflect.delete-property.js","node_modules/core-js/modules/es6.reflect.get.js","node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","node_modules/core-js/modules/es6.reflect.get-prototype-of.js","node_modules/core-js/modules/es6.reflect.has.js","node_modules/core-js/modules/es6.reflect.is-extensible.js","node_modules/core-js/modules/_own-keys.js","node_modules/core-js/modules/es6.reflect.own-keys.js","node_modules/core-js/modules/es6.reflect.prevent-extensions.js","node_modules/core-js/modules/es6.reflect.set.js","node_modules/core-js/modules/es6.reflect.set-prototype-of.js","node_modules/core-js/modules/_task.js","node_modules/core-js/modules/_microtask.js","node_modules/core-js/modules/_new-promise-capability.js","node_modules/core-js/modules/es6.promise.js","node_modules/core-js/modules/_perform.js","node_modules/core-js/modules/_user-agent.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/_wks-ext.js","node_modules/core-js/modules/_wks-define.js","node_modules/core-js/modules/_object-gopn-ext.js","node_modules/core-js/modules/es6.symbol.js","node_modules/core-js/modules/_enum-keys.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/es6.object.freeze.js","node_modules/core-js/modules/es6.object.seal.js","node_modules/core-js/modules/es6.object.prevent-extensions.js","node_modules/core-js/modules/es6.object.is-frozen.js","node_modules/core-js/modules/es6.object.is-sealed.js","node_modules/core-js/modules/es6.object.is-extensible.js","node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","node_modules/core-js/modules/es6.object.get-prototype-of.js","node_modules/core-js/modules/es6.object.keys.js","node_modules/core-js/modules/es6.object.get-own-property-names.js","node_modules/core-js/modules/es6.object.assign.js","node_modules/core-js/modules/_same-value.js","node_modules/core-js/modules/es6.object.is.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.string.raw.js","node_modules/core-js/modules/es6.string.from-code-point.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/es6.string.code-point-at.js","node_modules/core-js/modules/_string-repeat.js","node_modules/core-js/modules/es6.string.repeat.js","node_modules/core-js/modules/_is-regexp.js","node_modules/core-js/modules/_string-context.js","node_modules/core-js/modules/_fails-is-regexp.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.string.ends-with.js","node_modules/core-js/modules/es6.string.includes.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/es6.regexp.match.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/es6.regexp.search.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/es6.array.of.js","node_modules/core-js/modules/es6.array.copy-within.js","node_modules/core-js/modules/es6.array.find.js","node_modules/core-js/modules/es6.array.find-index.js","node_modules/core-js/modules/es6.array.fill.js","node_modules/core-js/modules/es6.number.is-finite.js","node_modules/core-js/modules/_is-integer.js","node_modules/core-js/modules/es6.number.is-integer.js","node_modules/core-js/modules/es6.number.is-safe-integer.js","node_modules/core-js/modules/es6.number.is-nan.js","node_modules/core-js/modules/es6.number.epsilon.js","node_modules/core-js/modules/es6.number.min-safe-integer.js","node_modules/core-js/modules/es6.number.max-safe-integer.js","node_modules/core-js/modules/_math-log1p.js","node_modules/core-js/modules/es6.math.acosh.js","node_modules/core-js/modules/es6.math.asinh.js","node_modules/core-js/modules/es6.math.atanh.js","node_modules/core-js/modules/_math-sign.js","node_modules/core-js/modules/es6.math.cbrt.js","node_modules/core-js/modules/es6.math.clz32.js","node_modules/core-js/modules/es6.math.cosh.js","node_modules/core-js/modules/_math-expm1.js","node_modules/core-js/modules/es6.math.expm1.js","node_modules/core-js/modules/_math-fround.js","node_modules/core-js/modules/es6.math.fround.js","node_modules/core-js/modules/es6.math.hypot.js","node_modules/core-js/modules/es6.math.imul.js","node_modules/core-js/modules/es6.math.log1p.js","node_modules/core-js/modules/es6.math.log10.js","node_modules/core-js/modules/es6.math.log2.js","node_modules/core-js/modules/es6.math.sign.js","node_modules/core-js/modules/es6.math.sinh.js","node_modules/core-js/modules/es6.math.tanh.js","node_modules/core-js/modules/es6.math.trunc.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es7.object.entries.js","node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","node_modules/core-js/modules/_string-pad.js","node_modules/core-js/modules/es7.string.pad-start.js","node_modules/core-js/modules/es7.string.pad-end.js","node_modules/core-js/modules/web.timers.js","node_modules/core-js/modules/web.immediate.js","node_modules/core-js/modules/web.dom.iterable.js","node_modules/regenerator-runtime/runtime.js","node_modules/custom-event-polyfill/polyfill.js","node_modules/url-polyfill/url-polyfill.js","src/js/utils/is.js","src/js/utils/events.js","src/js/utils/elements.js","src/js/utils/animation.js","src/js/utils/browser.js","src/js/support.js","src/js/html5.js","src/js/utils/arrays.js","src/js/utils/objects.js","src/js/utils/strings.js","src/js/utils/i18n.js","src/js/storage.js","src/js/utils/fetch.js","src/js/utils/loadSprite.js","src/js/utils/time.js","src/js/controls.js","src/js/utils/urls.js","src/js/captions.js","src/js/config/defaults.js","src/js/config/types.js","src/js/console.js","src/js/fullscreen.js","src/js/utils/loadImage.js","src/js/ui.js","src/js/listeners.js","node_modules/loadjs/dist/loadjs.umd.js","src/js/utils/loadScript.js","src/js/plugins/vimeo.js","src/js/plugins/youtube.js","src/js/media.js","src/js/plugins/ads.js","src/js/source.js","src/js/plyr.js"],"names":["global","module","exports","window","Math","self","Function","__g","core","version","__e","_isObject","it","_anObject","isObject","TypeError","_fails","exec","e","_descriptors","require$$0","Object","defineProperty","get","a","document","is","createElement","_domCreate","_ie8DomDefine","require$$1","require$$2","_toPrimitive","S","fn","val","toString","call","valueOf","dP","O","P","Attributes","anObject","toPrimitive","IE8_DOM_DEFINE","value","_propertyDesc","bitmap","enumerable","configurable","writable","_hide","object","key","f","createDesc","hasOwnProperty","_has","id","px","random","_uid","concat","undefined","SRC","$toString","TPL","split","inspectSource","safe","isFunction","has","hide","join","String","prototype","this","_aFunction","_ctx","that","length","aFunction","b","c","apply","arguments","$export","type","name","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","target","expProto","ctx","redefine","U","W","R","Typed","_export","TYPED","uid","VIEW","ABV","ArrayBuffer","DataView","CONSTR","i","TypedArrayConstructors","_typed","_redefineAll","src","_anInstance","Constructor","forbiddenField","ceil","floor","_toInteger","isNaN","min","_toLength","toInteger","_toIndex","number","toLength","RangeError","_cof","slice","_iobject","propertyIsEnumerable","cof","_defined","_toIobject","IObject","defined","max","_toAbsoluteIndex","index","_arrayIncludes","IS_INCLUDES","$this","el","fromIndex","toIObject","toAbsoluteIndex","store","push","mode","copyright","shared","_sharedKey","arrayIndexOf","IE_PROTO","_objectKeysInternal","names","result","_enumBugKeys","hiddenKeys","getOwnPropertyNames","$keys","_toObject","_arrayFill","toObject","aLen","end","endPos","Symbol","USE_SYMBOL","def","TAG","_setToStringTag","tag","stat","gOPN","PROTOTYPE","WRONG_INDEX","$ArrayBuffer","$DataView","Infinity","BaseBuffer","abs","pow","log","LN2","$BUFFER","DESCRIPTORS","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","m","buffer","Array","eLen","eMax","eBias","rt","s","unpackIEEE754","nBits","NaN","unpackI32","bytes","packI8","packI16","packI32","packF64","packF32","addGetter","C","internal","view","isLittleEndian","intIndex","toIndex","_b","start","pack","reverse","set","conversion","$typed","fails","ArrayBufferProto","anInstance","keys","j","constructor","$setInt8","setInt8","getInt8","redefineAll","byteOffset","setUint8","byteLength","arrayFill","bufferLength","offset","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","setToStringTag","SPECIES","_speciesConstructor","D","_setSpecies","KEY","$isView","isView","$slice","len","first","fin","speciesConstructor","viewS","viewT","ARG","_classof","T","tryGet","callee","_iterators","ITERATOR","ArrayProto","_isArrayIter","Iterators","_objectKeys","enumBugKeys","_objectDps","defineProperties","Properties","getKeys","_html","documentElement","Empty","createDict","iframeDocument","iframe","style","display","appendChild","contentWindow","open","write","lt","close","_objectCreate","create","dPs","ObjectProto","_objectGpo","getPrototypeOf","core_getIteratorMethod","getIteratorMethod","classof","_isArray","isArray","arg","_arraySpeciesCreate","original","_arrayMethods","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","asc","callbackfn","res","UNSCOPABLES","_addToUnscopables","_iterStep","done","IteratorPrototype","_iterCreate","NAME","next","descriptor","BUGGY","returnThis","_iterDefine","Base","DEFAULT","IS_SET","FORCED","$iterCreate","methods","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","es6_array_iterator","iterated","_t","_i","_k","step","Arguments","addToUnscopables","SAFE_CLOSING","_iterDetect","skipClosing","arr","iter","_arrayCopyWithin","copyWithin","to","from","count","inc","gOPD","getOwnPropertyDescriptor","pIE","require$$3","require$$4","require$$5","$buffer","require$$6","require$$7","require$$8","propertyDesc","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","require$$26","wks","require$$27","createArrayMethod","require$$28","createArrayIncludes","require$$29","require$$30","ArrayIterators","require$$31","require$$32","$iterDetect","require$$33","setSpecies","require$$34","require$$35","arrayCopyWithin","require$$36","$DP","require$$37","$GOPD","require$$38","Uint8Array","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayValues","arrayKeys","arrayEntries","arrayLastIndexOf","lastIndexOf","arrayReduce","reduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","sort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","TYPED_ARRAY","$map","allocate","LITTLE_ENDIAN","Uint16Array","FORCED_SET","toOffset","BYTES","validate","speciesFromList","list","fromList","_d","$from","iterator","mapfn","mapping","iterFn","$of","TO_LOCALE_BUG","$toLocaleString","every","fill","filter","find","predicate","findIndex","forEach","indexOf","searchElement","includes","separator","map","middle","some","comparefn","subarray","begin","$begin","BYTES_PER_ELEMENT","$set","arrayLike","$iterators","isTAIndex","$getDesc","$setDesc","desc","$TypedArrayPrototype$","wrapper","CLAMPED","GETTER","SETTER","TypedArray","TAC","TypedArrayPrototype","addElement","data","v","o","getter","round","setter","$offset","$length","klass","$len","l","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","init","_iterCall","ret","BREAK","RETURN","iterable","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","_validateCollection","SIZE","getEntry","entry","_f","n","k","_collectionStrong","getConstructor","ADDER","_l","forOf","clear","r","p","delete","prev","setStrong","$iterDefine","check","_setProto","setPrototypeOf","test","buggy","__proto__","_collection","common","IS_WEAK","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","inheritIfRequired","strong","add","getOwnPropertySymbols","$assign","assign","_objectAssign","A","K","getSymbols","gOPS","isEnum","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","splice","_collectionWeak","$has","ufstore","InternalMap","each","weak","tmp","$WeakMap","freeze","method","rApply","Reflect","fApply","thisArgument","argumentsList","L","_invoke","args","un","factories","_bind","bind","partArgs","bound","construct","invoke","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","receiver","getProto","$isExtensible","_ownKeys","ownKeys","$preventExtensions","V","existingDescriptor","ownDesc","setProto","defer","channel","port","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","_task","macrotask","Observer","MutationObserver","WebKitMutationObserver","Promise","isNode","PromiseCapability","resolve","reject","promise","$$resolve","$$reject","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","_perform","navigator","_userAgent","userAgent","task","microtask","head","last","notify","flush","parent","domain","exit","enter","standalone","then","toggle","node","createTextNode","observe","characterData","versions","v8","$Promise","empty","newPromiseCapability","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","exited","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","error","_a","onrejectionhandled","$reject","_w","$resolve","executor","err","onFulfilled","onRejected","catch","capability","x","promiseCapability","promiseResolve","all","remaining","$index","alreadyCalled","race","_wksDefine","$Symbol","_global","charAt","wksExt","windowNames","getWindowNames","gOPNExt","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","$fails","_create","protoDesc","wrap","sym","isSymbol","$defineProperty","$defineProperties","symbols","enumKeys","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","wksDefine","for","keyFor","useSetter","useSimple","replacer","$replacer","_objectSap","$freeze","$seal","$isFrozen","$isSealed","$getPrototypeOf","_sameValue","y","FProto","nameRE","match","raw","callSite","tpl","fromCharCode","$fromCodePoint","fromCodePoint","code","TO_STRING","$at","pos","charCodeAt","codePointAt","_stringRepeat","str","repeat","MATCH","_isRegexp","isRegExp","_stringContext","searchString","_failsIsRegexp","re","$startsWith","startsWith","context","search","$endsWith","endsWith","endPosition","flags","RegExp","ignoreCase","multiline","unicode","sticky","_fixReWks","SYMBOL","fns","strfn","rxfn","string","$match","regexp","REPLACE","$replace","searchValue","replaceValue","SPLIT","$split","_split","$push","NPCG","limit","separator2","lastIndex","lastLength","output","lastLastIndex","splitLimit","separatorCopy","replace","SEARCH","$search","_createProperty","createProperty","$find","forced","_isFinite","isFinite","_isInteger","isInteger","isSafeInteger","EPSILON","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","_mathLog1p","log1p","sqrt","$acosh","acosh","Number","MAX_VALUE","$asinh","asinh","$atanh","atanh","_mathSign","sign","cbrt","clz32","LOG2E","cosh","$expm1","expm1","_mathExpm1","EPSILON32","MAX32","MIN32","_mathFround","fround","$abs","$sign","hypot","value1","value2","div","sum","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","trunc","$includes","_objectToArray","isEntries","$values","getOwnPropertyDescriptors","getDesc","_stringPad","maxLength","fillString","left","stringLength","fillStr","intMaxLength","fillLen","stringFiller","padStart","$pad","padEnd","MSIE","time","boundArgs","setInterval","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","Op","hasOwn","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","runtime","regeneratorRuntime","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","NativeIteratorPrototype","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","__await","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","tryLocsList","pop","Context","reset","skipTempReset","sent","_sent","delegate","tryEntries","resetTryEntry","stop","rootRecord","completion","rval","dispatchException","exception","handle","loc","caught","record","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","Error","abrupt","finallyEntry","complete","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","protoGenerator","generator","state","doneResult","delegateResult","maybeInvokeDelegate","tryCatch","makeInvokeMethod","obj","unwrapped","previousPromise","callInvokeWithMethodAndArg","return","info","pushTryEntry","locs","iteratorMethod","ce","CustomEvent","cancelable","preventDefault","defaultPrevented","params","evt","origPrevent","bubbles","detail","createEvent","initCustomEvent","Event","iteratorSupported","checkIfIteratorIsSupported","createIterator","items","shift","serializeParam","encodeURIComponent","deserializeParam","decodeURIComponent","URLSearchParams","attribute","append","_this","_entries","getAll","callback","thisArg","searchArray","polyfillURLSearchParams","u","URL","pathname","href","searchParams","checkIfURLIsSupported","_URL","url","base","baseElement","doc","location","implementation","createHTMLDocument","anchorElement","body","protocol","attributeName","_anchorElement","linkURLWithAnchorAttribute","origin","expectedPort","http:","https:","ftp:","addPortToOrigin","hostname","password","username","methodName","createObjectURL","blob","revokeObjectURL","polyfillURL","getOrigin","input","instanceOf","Boolean","isNullOrUndefined","isString","isNodeList","isEmpty","is$1","nullOrUndefined","boolean","function","array","weakMap","WeakMap","nodeList","element","Element","textNode","Text","keyboardEvent","KeyboardEvent","cue","TextTrackCue","VTTCue","track","TextTrack","supportsPassiveListeners","supported","options","removeEventListener","toggleListener","passive","capture","events","eventListeners","on","off","once","onceCallback","_len","_key","triggerEvent","plyr","dispatchEvent","elements","targets","child","cloneNode","parentNode","sibling","nextSibling","insertBefore","setAttributes","_ref","slicedToArray","_ref3","_ref4","setAttribute","text","innerText","insertElement","removeElement","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","selector","trim","className","parts","class","toggleHidden","hidden","removeAttribute","toggleClass","force","classList","contains","hasClass","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelectorAll","getElements","container","getElement","querySelector","setFocus","tabFocus","focus","config","classNames","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","repaint","offsetHeight","range","browser","isIE","documentMode","isWebkit","isIPhone","platform","isIos","defaultCodecs","audio/ogg","audio/wav","video/webm","video/mp4","video/ogg","support","audio","video","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","inputType","_inputType$split","mediaType","isHTML5","media","canPlayType","textTracks","touch","transitions","reducedMotion","matchMedia","html5","getSources","getAttribute","getQualityOptions","extend","player","_player$media","currentTime","paused","preload","readyState","play","load","quality","storage","cancelRequests","blankVideo","debug","dedupe","item","getDeep","path","sources","defineProperty$1","format","replaceAll","toTitleCase","toUpperCase","substr","toLowerCase","toCamelCase","toPascalCase","getHTML","innerHTML","i18n","{seektime}","seekTime","{title}","title","_ref2","Storage","classCallCheck","enabled","localStorage","getItem","json","parse","setItem","removeItem","fetch","responseType","request","XMLHttpRequest","responseText","response","status","send","loadSprite","hasId","exists","getElementById","update","insertAdjacentElement","useStorage","cached","prefix","content","getHours","parseInt","getMinutes","getSeconds","formatTime","displayHours","inverted","hours","mins","secs","controls","getIconUrl","cors","iconUrl","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","duration","seekTooltip","tooltip","warn","toggleNativeControls","createIcon","iconPath","iconPrefix","icon","createElementNS","role","focusable","use","setAttributeNS","createLabel","attr","createBadge","badge","menu","createButton","buttonType","button","label","labelPressed","iconPressed","control","createRange","autocomplete","aria-label","aria-valuemin","aria-valuemax","aria-valuenow","updateRangeFill","createProgress","aria-hidden","suffixKey","played","suffix","createTime","bindMenuItemShortcuts","menuItem","which","stopPropagation","isRadioButton","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","focusFirstMenuItem","createMenuItem","_this2","_ref$badge","_ref$checked","checked","aria-checked","flex","children","listeners","currentTrack","speed","parseFloat","updateTimeDisplay","updateVolume","setRange","muted","pressed","updateProgress","_this3","current","toFixed","getElementsByTagName","nodeValue","setProgress","buffered","percent","setProperty","updateSeekTooltip","_this4","tooltips","clientRect","getBoundingClientRect","visible","_toggle","width","pageX","timeUpdate","invert","invertTime","seeking","durationUpdate","hasDuration","displayDuration","toggleMenuButton","setting","updateSetting","pane","panels","default","getLabel","setQualityMenu","_this5","checkMenu","sorting","getBadge","setCaptionsMenu","_this6","tracks","getTracks","toggled","language","unshift","setSpeedMenu","_this7","isVimeo","popup","firstItem","toggleMenu","show","isMenuItem","getMenuSize","tab","clone","position","opacity","scrollWidth","height","scrollHeight","_this8","size","restore","propertyName","_this9","aria-haspopup","aria-controls","aria-expanded","inner","home","backButton","inject","_this10","props","seektime","controlPressed","_config","labels","parseUrl","parser","buildUrlParams","setup","isVideo","isYouTube","languages","userLanguage","active","trackEvents","_captions","currentTrackNode","languageExists","updateCues","setLanguage","activeClass","findTrack","toConsumableArray","embed","enableTextTrack","sortIsDefault","sorted","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","focused","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","disabled","advertisement","qualityBadge","2160","1440","1080","720","576","480","urls","vimeo","sdk","youtube","googleIMA","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","google","publisherId","providers","types","noop","Console","onChange","keyCode","activeElement","shiftKey","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","overflow","Fullscreen","property","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","loadImage","minWidth","image","Image","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","ready","setTitle","setPoster","isEmbed","togglePoster","enable","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","Listeners","lastKey","focusTimer","lastKeyDown","handleKey","setTabFocus","firstTouch","altKey","ctrlKey","metaKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","timeStamp","wasKeyDown","delay","hasAudio","initialized","managerPromise","isAudio","ended","proxyEvents","_event$detail","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","proxy","inputEvent","rect","currentTarget","hasAttribute","seekTo","isFocusIn","webkitDirectionInvertedFromDevice","_map","deltaX","deltaY","_map2","direction","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","executeCallbacks","depsNotFound","success","loadFile","callbackFn","numTries","isCss","maxTries","numRetries","beforeCallbackFn","before","pathStripped","rel","onbeforeload","ev","sheet","cssText","loadjs","paths","arg1","arg2","numWaiting","loadFiles","deps","bundleIds","subscribe","isDefined","loadScript","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","_split2","padding","paddingBottom","transform","byline","portrait","transparent","gesture","$2","thumbnail_large","Player","disableTextTrack","restorePause","setVolume","setCurrentTime","setPlaybackRate","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","getRatio","h","getAspectRatio","setAutopause","getVideoTitle","getCurrentTime","getDuration","getTextTracks","_ref$cues","strippedCues","fragment","createDocumentFragment","firstChild","getPaused","seconds","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","snippet","currentId","posterSrc","format$$1","playerVars","hl","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","2","5","100","101","150","onPlaybackRateChange","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getAvailablePlaybackRates","clearInterval","buffering","getVideoLoadedFraction","lastBuffered","onStateChange","unMute","Ads","displayContainer","manager","loader","cuePoints","safetyTimer","countdownTimer","ima","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","adError","zIndex","destroy","_this11","handlers","_this12","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","Date","AV_WIDTH","AV_HEIGHT","AV_CDIM2","insertElements","change","_sources$","_sources$$provider","tagName","crossorigin","Plyr","failed","jQuery","getProviderByUrl","truthy","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","curr","closest","states","webkitPresentationMode","inline","t"],"mappings":"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","file":"plyr.polyfilled.min.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.7' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n  if (!isObject(it)) throw TypeError(it + ' is not an object!');\n  return it;\n};\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (e) {\n    return true;\n  }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n  return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return dP(O, P, Attributes);\n  } catch (e) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n  return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n  return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n  var isFunction = typeof val == 'function';\n  if (isFunction) has(val, 'name') || hide(val, 'name', key);\n  if (O[key] === val) return;\n  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n  if (O === global) {\n    O[key] = val;\n  } else if (!safe) {\n    delete O[key];\n    hide(O, key, val);\n  } else if (O[key]) {\n    O[key] = val;\n  } else {\n    hide(O, key, val);\n  }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n  return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n  if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n  return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n  var IS_FORCED = type & $export.F;\n  var IS_GLOBAL = type & $export.G;\n  var IS_STATIC = type & $export.S;\n  var IS_PROTO = type & $export.P;\n  var IS_BIND = type & $export.B;\n  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n  var key, own, out, exp;\n  if (IS_GLOBAL) source = name;\n  for (key in source) {\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    // export native or passed\n    out = (own ? target : source)[key];\n    // bind timers to global for call from export context\n    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // extend global\n    if (target) redefine(target, key, out, type & $export.U);\n    // export\n    if (exports[key] != out) hide(exports, key, exp);\n    if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n  }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n  'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n  if (Typed = global[TypedArrayConstructors[i++]]) {\n    hide(Typed.prototype, TYPED, true);\n    hide(Typed.prototype, VIEW, true);\n  } else CONSTR = false;\n}\n\nmodule.exports = {\n  ABV: ABV,\n  CONSTR: CONSTR,\n  TYPED: TYPED,\n  VIEW: VIEW\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n  for (var key in src) redefine(target, key, src[key], safe);\n  return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n    throw TypeError(name + ': incorrect invocation!');\n  } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n  if (it === undefined) return 0;\n  var number = toInteger(it);\n  var length = toLength(number);\n  if (number !== length) throw RangeError('Wrong length!');\n  return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: core.version,\n  mode: require('./_library') ? 'pure' : 'global',\n  copyright: '© 2018 Denis Pushkarev (zloirock.ru)'\n});\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n  var O = toIObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n  return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n  var O = toObject(this);\n  var length = toLength(O.length);\n  var aLen = arguments.length;\n  var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n  var end = aLen > 2 ? arguments[2] : undefined;\n  var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n  while (endPos > index) O[index++] = value;\n  return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n  var buffer = new Array(nBytes);\n  var eLen = nBytes * 8 - mLen - 1;\n  var eMax = (1 << eLen) - 1;\n  var eBias = eMax >> 1;\n  var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n  var i = 0;\n  var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n  var e, m, c;\n  value = abs(value);\n  // eslint-disable-next-line no-self-compare\n  if (value != value || value === Infinity) {\n    // eslint-disable-next-line no-self-compare\n    m = value != value ? 1 : 0;\n    e = eMax;\n  } else {\n    e = floor(log(value) / LN2);\n    if (value * (c = pow(2, -e)) < 1) {\n      e--;\n      c *= 2;\n    }\n    if (e + eBias >= 1) {\n      value += rt / c;\n    } else {\n      value += rt * pow(2, 1 - eBias);\n    }\n    if (value * c >= 2) {\n      e++;\n      c /= 2;\n    }\n    if (e + eBias >= eMax) {\n      m = 0;\n      e = eMax;\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * pow(2, mLen);\n      e = e + eBias;\n    } else {\n      m = value * pow(2, eBias - 1) * pow(2, mLen);\n      e = 0;\n    }\n  }\n  for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n  e = e << mLen | m;\n  eLen += mLen;\n  for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n  buffer[--i] |= s * 128;\n  return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n  var eLen = nBytes * 8 - mLen - 1;\n  var eMax = (1 << eLen) - 1;\n  var eBias = eMax >> 1;\n  var nBits = eLen - 7;\n  var i = nBytes - 1;\n  var s = buffer[i--];\n  var e = s & 127;\n  var m;\n  s >>= 7;\n  for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n  m = e & (1 << -nBits) - 1;\n  e >>= -nBits;\n  nBits += mLen;\n  for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n  if (e === 0) {\n    e = 1 - eBias;\n  } else if (e === eMax) {\n    return m ? NaN : s ? -Infinity : Infinity;\n  } else {\n    m = m + pow(2, mLen);\n    e = e - eBias;\n  } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n  return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n  return [it & 0xff];\n}\nfunction packI16(it) {\n  return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n  return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n  return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n  return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n  dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n  var numIndex = +index;\n  var intIndex = toIndex(numIndex);\n  if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n  var store = view[$BUFFER]._b;\n  var start = intIndex + view[$OFFSET];\n  var pack = store.slice(start, start + bytes);\n  return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n  var numIndex = +index;\n  var intIndex = toIndex(numIndex);\n  if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n  var store = view[$BUFFER]._b;\n  var start = intIndex + view[$OFFSET];\n  var pack = conversion(+value);\n  for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n  $ArrayBuffer = function ArrayBuffer(length) {\n    anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n    var byteLength = toIndex(length);\n    this._b = arrayFill.call(new Array(byteLength), 0);\n    this[$LENGTH] = byteLength;\n  };\n\n  $DataView = function DataView(buffer, byteOffset, byteLength) {\n    anInstance(this, $DataView, DATA_VIEW);\n    anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n    var bufferLength = buffer[$LENGTH];\n    var offset = toInteger(byteOffset);\n    if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n    byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n    if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n    this[$BUFFER] = buffer;\n    this[$OFFSET] = offset;\n    this[$LENGTH] = byteLength;\n  };\n\n  if (DESCRIPTORS) {\n    addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n    addGetter($DataView, BUFFER, '_b');\n    addGetter($DataView, BYTE_LENGTH, '_l');\n    addGetter($DataView, BYTE_OFFSET, '_o');\n  }\n\n  redefineAll($DataView[PROTOTYPE], {\n    getInt8: function getInt8(byteOffset) {\n      return get(this, 1, byteOffset)[0] << 24 >> 24;\n    },\n    getUint8: function getUint8(byteOffset) {\n      return get(this, 1, byteOffset)[0];\n    },\n    getInt16: function getInt16(byteOffset /* , littleEndian */) {\n      var bytes = get(this, 2, byteOffset, arguments[1]);\n      return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n    },\n    getUint16: function getUint16(byteOffset /* , littleEndian */) {\n      var bytes = get(this, 2, byteOffset, arguments[1]);\n      return bytes[1] << 8 | bytes[0];\n    },\n    getInt32: function getInt32(byteOffset /* , littleEndian */) {\n      return unpackI32(get(this, 4, byteOffset, arguments[1]));\n    },\n    getUint32: function getUint32(byteOffset /* , littleEndian */) {\n      return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n    },\n    getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n      return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n    },\n    getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n      return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n    },\n    setInt8: function setInt8(byteOffset, value) {\n      set(this, 1, byteOffset, packI8, value);\n    },\n    setUint8: function setUint8(byteOffset, value) {\n      set(this, 1, byteOffset, packI8, value);\n    },\n    setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n      set(this, 2, byteOffset, packI16, value, arguments[2]);\n    },\n    setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n      set(this, 2, byteOffset, packI16, value, arguments[2]);\n    },\n    setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packI32, value, arguments[2]);\n    },\n    setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packI32, value, arguments[2]);\n    },\n    setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n      set(this, 4, byteOffset, packF32, value, arguments[2]);\n    },\n    setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n      set(this, 8, byteOffset, packF64, value, arguments[2]);\n    }\n  });\n} else {\n  if (!fails(function () {\n    $ArrayBuffer(1);\n  }) || !fails(function () {\n    new $ArrayBuffer(-1); // eslint-disable-line no-new\n  }) || fails(function () {\n    new $ArrayBuffer(); // eslint-disable-line no-new\n    new $ArrayBuffer(1.5); // eslint-disable-line no-new\n    new $ArrayBuffer(NaN); // eslint-disable-line no-new\n    return $ArrayBuffer.name != ARRAY_BUFFER;\n  })) {\n    $ArrayBuffer = function ArrayBuffer(length) {\n      anInstance(this, $ArrayBuffer);\n      return new BaseBuffer(toIndex(length));\n    };\n    var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n    for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n      if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n    }\n    if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n  }\n  // iOS Safari 7.x bug\n  var view = new $DataView(new $ArrayBuffer(2));\n  var $setInt8 = $DataView[PROTOTYPE].setInt8;\n  view.setInt8(0, 2147483648);\n  view.setInt8(1, 2147483649);\n  if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n    setInt8: function setInt8(byteOffset, value) {\n      $setInt8.call(this, byteOffset, value << 24 >> 24);\n    },\n    setUint8: function setUint8(byteOffset, value) {\n      $setInt8.call(this, byteOffset, value << 24 >> 24);\n    }\n  }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n  var C = global[KEY];\n  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n    configurable: true,\n    get: function () { return this; }\n  });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n  // 24.1.3.1 ArrayBuffer.isView(arg)\n  isView: function isView(it) {\n    return $isView && $isView(it) || isObject(it) && VIEW in it;\n  }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n  return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n  // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n  slice: function slice(start, end) {\n    if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n    var len = anObject(this).byteLength;\n    var first = toAbsoluteIndex(start, len);\n    var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n    var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n    var viewS = new $DataView(this);\n    var viewT = new $DataView(result);\n    var index = 0;\n    while (first < fin) {\n      viewT.setUint8(index++, viewS.getUint8(first++));\n    } return result;\n  }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n  return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = getKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var P;\n  while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe');\n  var i = enumBugKeys.length;\n  var lt = '<';\n  var gt = '>';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n  if (it != undefined) return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n  return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n  var C;\n  if (isArray(original)) {\n    C = original.constructor;\n    // cross-realm fallback\n    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n    if (isObject(C)) {\n      C = C[SPECIES];\n      if (C === null) C = undefined;\n    }\n  } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n  return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n  var IS_MAP = TYPE == 1;\n  var IS_FILTER = TYPE == 2;\n  var IS_SOME = TYPE == 3;\n  var IS_EVERY = TYPE == 4;\n  var IS_FIND_INDEX = TYPE == 6;\n  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n  var create = $create || asc;\n  return function ($this, callbackfn, that) {\n    var O = toObject($this);\n    var self = IObject(O);\n    var f = ctx(callbackfn, that, 3);\n    var length = toLength(self.length);\n    var index = 0;\n    var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n    var val, res;\n    for (;length > index; index++) if (NO_HOLES || index in self) {\n      val = self[index];\n      res = f(val, index, O);\n      if (TYPE) {\n        if (IS_MAP) result[index] = res;   // map\n        else if (res) switch (TYPE) {\n          case 3: return true;             // some\n          case 5: return val;              // find\n          case 6: return index;            // findIndex\n          case 2: result.push(val);        // filter\n        } else if (IS_EVERY) return false; // every\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n  };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n  ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n  return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function (kind) {\n    if (!BUGGY && kind in proto) return proto[kind];\n    switch (kind) {\n      case KEYS: return function keys() { return new Constructor(this, kind); };\n      case VALUES: return function values() { return new Constructor(this, kind); };\n    } return function entries() { return new Constructor(this, kind); };\n  };\n  var TAG = NAME + ' Iterator';\n  var DEF_VALUES = DEFAULT == VALUES;\n  var VALUES_BUG = false;\n  var proto = Base.prototype;\n  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n  var $default = $native || getMethod(DEFAULT);\n  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n  var methods, key, IteratorPrototype;\n  // Fix native\n  if ($anyNative) {\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEF_VALUES && $native && $native.name !== VALUES) {\n    VALUES_BUG = true;\n    $default = function values() { return $native.call(this); };\n  }\n  // Define iterator\n  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG] = returnThis;\n  if (DEFAULT) {\n    methods = {\n      values: DEF_VALUES ? $default : getMethod(VALUES),\n      keys: IS_SET ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if (FORCED) for (key in methods) {\n      if (!(key in proto)) redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n  var O = this._t;\n  var kind = this._k;\n  var index = this._i++;\n  if (!O || index >= O.length) {\n    this._t = undefined;\n    return step(1);\n  }\n  if (kind == 'keys') return step(0, index);\n  if (kind == 'values') return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function () { SAFE_CLOSING = true; };\n  // eslint-disable-next-line no-throw-literal\n  Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n  if (!skipClosing && !SAFE_CLOSING) return false;\n  var safe = false;\n  try {\n    var arr = [7];\n    var iter = arr[ITERATOR]();\n    iter.next = function () { return { done: safe = true }; };\n    arr[ITERATOR] = function () { return iter; };\n    exec(arr);\n  } catch (e) { /* empty */ }\n  return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n  var O = toObject(this);\n  var len = toLength(O.length);\n  var to = toAbsoluteIndex(target, len);\n  var from = toAbsoluteIndex(start, len);\n  var end = arguments.length > 2 ? arguments[2] : undefined;\n  var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n  var inc = 1;\n  if (from < to && to < from + count) {\n    inc = -1;\n    from += count - 1;\n    to += count - 1;\n  }\n  while (count-- > 0) {\n    if (from in O) O[to] = O[from];\n    else delete O[to];\n    to += inc;\n    from += inc;\n  } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return gOPD(O, P);\n  } catch (e) { /* empty */ }\n  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n  var LIBRARY = require('./_library');\n  var global = require('./_global');\n  var fails = require('./_fails');\n  var $export = require('./_export');\n  var $typed = require('./_typed');\n  var $buffer = require('./_typed-buffer');\n  var ctx = require('./_ctx');\n  var anInstance = require('./_an-instance');\n  var propertyDesc = require('./_property-desc');\n  var hide = require('./_hide');\n  var redefineAll = require('./_redefine-all');\n  var toInteger = require('./_to-integer');\n  var toLength = require('./_to-length');\n  var toIndex = require('./_to-index');\n  var toAbsoluteIndex = require('./_to-absolute-index');\n  var toPrimitive = require('./_to-primitive');\n  var has = require('./_has');\n  var classof = require('./_classof');\n  var isObject = require('./_is-object');\n  var toObject = require('./_to-object');\n  var isArrayIter = require('./_is-array-iter');\n  var create = require('./_object-create');\n  var getPrototypeOf = require('./_object-gpo');\n  var gOPN = require('./_object-gopn').f;\n  var getIterFn = require('./core.get-iterator-method');\n  var uid = require('./_uid');\n  var wks = require('./_wks');\n  var createArrayMethod = require('./_array-methods');\n  var createArrayIncludes = require('./_array-includes');\n  var speciesConstructor = require('./_species-constructor');\n  var ArrayIterators = require('./es6.array.iterator');\n  var Iterators = require('./_iterators');\n  var $iterDetect = require('./_iter-detect');\n  var setSpecies = require('./_set-species');\n  var arrayFill = require('./_array-fill');\n  var arrayCopyWithin = require('./_array-copy-within');\n  var $DP = require('./_object-dp');\n  var $GOPD = require('./_object-gopd');\n  var dP = $DP.f;\n  var gOPD = $GOPD.f;\n  var RangeError = global.RangeError;\n  var TypeError = global.TypeError;\n  var Uint8Array = global.Uint8Array;\n  var ARRAY_BUFFER = 'ArrayBuffer';\n  var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n  var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n  var PROTOTYPE = 'prototype';\n  var ArrayProto = Array[PROTOTYPE];\n  var $ArrayBuffer = $buffer.ArrayBuffer;\n  var $DataView = $buffer.DataView;\n  var arrayForEach = createArrayMethod(0);\n  var arrayFilter = createArrayMethod(2);\n  var arraySome = createArrayMethod(3);\n  var arrayEvery = createArrayMethod(4);\n  var arrayFind = createArrayMethod(5);\n  var arrayFindIndex = createArrayMethod(6);\n  var arrayIncludes = createArrayIncludes(true);\n  var arrayIndexOf = createArrayIncludes(false);\n  var arrayValues = ArrayIterators.values;\n  var arrayKeys = ArrayIterators.keys;\n  var arrayEntries = ArrayIterators.entries;\n  var arrayLastIndexOf = ArrayProto.lastIndexOf;\n  var arrayReduce = ArrayProto.reduce;\n  var arrayReduceRight = ArrayProto.reduceRight;\n  var arrayJoin = ArrayProto.join;\n  var arraySort = ArrayProto.sort;\n  var arraySlice = ArrayProto.slice;\n  var arrayToString = ArrayProto.toString;\n  var arrayToLocaleString = ArrayProto.toLocaleString;\n  var ITERATOR = wks('iterator');\n  var TAG = wks('toStringTag');\n  var TYPED_CONSTRUCTOR = uid('typed_constructor');\n  var DEF_CONSTRUCTOR = uid('def_constructor');\n  var ALL_CONSTRUCTORS = $typed.CONSTR;\n  var TYPED_ARRAY = $typed.TYPED;\n  var VIEW = $typed.VIEW;\n  var WRONG_LENGTH = 'Wrong length!';\n\n  var $map = createArrayMethod(1, function (O, length) {\n    return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n  });\n\n  var LITTLE_ENDIAN = fails(function () {\n    // eslint-disable-next-line no-undef\n    return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n  });\n\n  var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n    new Uint8Array(1).set({});\n  });\n\n  var toOffset = function (it, BYTES) {\n    var offset = toInteger(it);\n    if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n    return offset;\n  };\n\n  var validate = function (it) {\n    if (isObject(it) && TYPED_ARRAY in it) return it;\n    throw TypeError(it + ' is not a typed array!');\n  };\n\n  var allocate = function (C, length) {\n    if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n      throw TypeError('It is not a typed array constructor!');\n    } return new C(length);\n  };\n\n  var speciesFromList = function (O, list) {\n    return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n  };\n\n  var fromList = function (C, list) {\n    var index = 0;\n    var length = list.length;\n    var result = allocate(C, length);\n    while (length > index) result[index] = list[index++];\n    return result;\n  };\n\n  var addGetter = function (it, key, internal) {\n    dP(it, key, { get: function () { return this._d[internal]; } });\n  };\n\n  var $from = function from(source /* , mapfn, thisArg */) {\n    var O = toObject(source);\n    var aLen = arguments.length;\n    var mapfn = aLen > 1 ? arguments[1] : undefined;\n    var mapping = mapfn !== undefined;\n    var iterFn = getIterFn(O);\n    var i, length, values, result, step, iterator;\n    if (iterFn != undefined && !isArrayIter(iterFn)) {\n      for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n        values.push(step.value);\n      } O = values;\n    }\n    if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n    for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n      result[i] = mapping ? mapfn(O[i], i) : O[i];\n    }\n    return result;\n  };\n\n  var $of = function of(/* ...items */) {\n    var index = 0;\n    var length = arguments.length;\n    var result = allocate(this, length);\n    while (length > index) result[index] = arguments[index++];\n    return result;\n  };\n\n  // iOS Safari 6.x fails here\n  var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n  var $toLocaleString = function toLocaleString() {\n    return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n  };\n\n  var proto = {\n    copyWithin: function copyWithin(target, start /* , end */) {\n      return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    every: function every(callbackfn /* , thisArg */) {\n      return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n      return arrayFill.apply(validate(this), arguments);\n    },\n    filter: function filter(callbackfn /* , thisArg */) {\n      return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n        arguments.length > 1 ? arguments[1] : undefined));\n    },\n    find: function find(predicate /* , thisArg */) {\n      return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    findIndex: function findIndex(predicate /* , thisArg */) {\n      return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    forEach: function forEach(callbackfn /* , thisArg */) {\n      arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    indexOf: function indexOf(searchElement /* , fromIndex */) {\n      return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    includes: function includes(searchElement /* , fromIndex */) {\n      return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    join: function join(separator) { // eslint-disable-line no-unused-vars\n      return arrayJoin.apply(validate(this), arguments);\n    },\n    lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n      return arrayLastIndexOf.apply(validate(this), arguments);\n    },\n    map: function map(mapfn /* , thisArg */) {\n      return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n      return arrayReduce.apply(validate(this), arguments);\n    },\n    reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n      return arrayReduceRight.apply(validate(this), arguments);\n    },\n    reverse: function reverse() {\n      var that = this;\n      var length = validate(that).length;\n      var middle = Math.floor(length / 2);\n      var index = 0;\n      var value;\n      while (index < middle) {\n        value = that[index];\n        that[index++] = that[--length];\n        that[length] = value;\n      } return that;\n    },\n    some: function some(callbackfn /* , thisArg */) {\n      return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    sort: function sort(comparefn) {\n      return arraySort.call(validate(this), comparefn);\n    },\n    subarray: function subarray(begin, end) {\n      var O = validate(this);\n      var length = O.length;\n      var $begin = toAbsoluteIndex(begin, length);\n      return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n        O.buffer,\n        O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n        toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n      );\n    }\n  };\n\n  var $slice = function slice(start, end) {\n    return speciesFromList(this, arraySlice.call(validate(this), start, end));\n  };\n\n  var $set = function set(arrayLike /* , offset */) {\n    validate(this);\n    var offset = toOffset(arguments[1], 1);\n    var length = this.length;\n    var src = toObject(arrayLike);\n    var len = toLength(src.length);\n    var index = 0;\n    if (len + offset > length) throw RangeError(WRONG_LENGTH);\n    while (index < len) this[offset + index] = src[index++];\n  };\n\n  var $iterators = {\n    entries: function entries() {\n      return arrayEntries.call(validate(this));\n    },\n    keys: function keys() {\n      return arrayKeys.call(validate(this));\n    },\n    values: function values() {\n      return arrayValues.call(validate(this));\n    }\n  };\n\n  var isTAIndex = function (target, key) {\n    return isObject(target)\n      && target[TYPED_ARRAY]\n      && typeof key != 'symbol'\n      && key in target\n      && String(+key) == String(key);\n  };\n  var $getDesc = function getOwnPropertyDescriptor(target, key) {\n    return isTAIndex(target, key = toPrimitive(key, true))\n      ? propertyDesc(2, target[key])\n      : gOPD(target, key);\n  };\n  var $setDesc = function defineProperty(target, key, desc) {\n    if (isTAIndex(target, key = toPrimitive(key, true))\n      && isObject(desc)\n      && has(desc, 'value')\n      && !has(desc, 'get')\n      && !has(desc, 'set')\n      // TODO: add validation descriptor w/o calling accessors\n      && !desc.configurable\n      && (!has(desc, 'writable') || desc.writable)\n      && (!has(desc, 'enumerable') || desc.enumerable)\n    ) {\n      target[key] = desc.value;\n      return target;\n    } return dP(target, key, desc);\n  };\n\n  if (!ALL_CONSTRUCTORS) {\n    $GOPD.f = $getDesc;\n    $DP.f = $setDesc;\n  }\n\n  $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n    getOwnPropertyDescriptor: $getDesc,\n    defineProperty: $setDesc\n  });\n\n  if (fails(function () { arrayToString.call({}); })) {\n    arrayToString = arrayToLocaleString = function toString() {\n      return arrayJoin.call(this);\n    };\n  }\n\n  var $TypedArrayPrototype$ = redefineAll({}, proto);\n  redefineAll($TypedArrayPrototype$, $iterators);\n  hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n  redefineAll($TypedArrayPrototype$, {\n    slice: $slice,\n    set: $set,\n    constructor: function () { /* noop */ },\n    toString: arrayToString,\n    toLocaleString: $toLocaleString\n  });\n  addGetter($TypedArrayPrototype$, 'buffer', 'b');\n  addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n  addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n  addGetter($TypedArrayPrototype$, 'length', 'e');\n  dP($TypedArrayPrototype$, TAG, {\n    get: function () { return this[TYPED_ARRAY]; }\n  });\n\n  // eslint-disable-next-line max-statements\n  module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n    CLAMPED = !!CLAMPED;\n    var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n    var GETTER = 'get' + KEY;\n    var SETTER = 'set' + KEY;\n    var TypedArray = global[NAME];\n    var Base = TypedArray || {};\n    var TAC = TypedArray && getPrototypeOf(TypedArray);\n    var FORCED = !TypedArray || !$typed.ABV;\n    var O = {};\n    var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n    var getter = function (that, index) {\n      var data = that._d;\n      return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n    };\n    var setter = function (that, index, value) {\n      var data = that._d;\n      if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n      data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n    };\n    var addElement = function (that, index) {\n      dP(that, index, {\n        get: function () {\n          return getter(this, index);\n        },\n        set: function (value) {\n          return setter(this, index, value);\n        },\n        enumerable: true\n      });\n    };\n    if (FORCED) {\n      TypedArray = wrapper(function (that, data, $offset, $length) {\n        anInstance(that, TypedArray, NAME, '_d');\n        var index = 0;\n        var offset = 0;\n        var buffer, byteLength, length, klass;\n        if (!isObject(data)) {\n          length = toIndex(data);\n          byteLength = length * BYTES;\n          buffer = new $ArrayBuffer(byteLength);\n        } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n          buffer = data;\n          offset = toOffset($offset, BYTES);\n          var $len = data.byteLength;\n          if ($length === undefined) {\n            if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n            byteLength = $len - offset;\n            if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n          } else {\n            byteLength = toLength($length) * BYTES;\n            if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n          }\n          length = byteLength / BYTES;\n        } else if (TYPED_ARRAY in data) {\n          return fromList(TypedArray, data);\n        } else {\n          return $from.call(TypedArray, data);\n        }\n        hide(that, '_d', {\n          b: buffer,\n          o: offset,\n          l: byteLength,\n          e: length,\n          v: new $DataView(buffer)\n        });\n        while (index < length) addElement(that, index++);\n      });\n      TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n      hide(TypedArrayPrototype, 'constructor', TypedArray);\n    } else if (!fails(function () {\n      TypedArray(1);\n    }) || !fails(function () {\n      new TypedArray(-1); // eslint-disable-line no-new\n    }) || !$iterDetect(function (iter) {\n      new TypedArray(); // eslint-disable-line no-new\n      new TypedArray(null); // eslint-disable-line no-new\n      new TypedArray(1.5); // eslint-disable-line no-new\n      new TypedArray(iter); // eslint-disable-line no-new\n    }, true)) {\n      TypedArray = wrapper(function (that, data, $offset, $length) {\n        anInstance(that, TypedArray, NAME);\n        var klass;\n        // `ws` module bug, temporarily remove validation length for Uint8Array\n        // https://github.com/websockets/ws/pull/645\n        if (!isObject(data)) return new Base(toIndex(data));\n        if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n          return $length !== undefined\n            ? new Base(data, toOffset($offset, BYTES), $length)\n            : $offset !== undefined\n              ? new Base(data, toOffset($offset, BYTES))\n              : new Base(data);\n        }\n        if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n        return $from.call(TypedArray, data);\n      });\n      arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n        if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n      });\n      TypedArray[PROTOTYPE] = TypedArrayPrototype;\n      if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n    }\n    var $nativeIterator = TypedArrayPrototype[ITERATOR];\n    var CORRECT_ITER_NAME = !!$nativeIterator\n      && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n    var $iterator = $iterators.values;\n    hide(TypedArray, TYPED_CONSTRUCTOR, true);\n    hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n    hide(TypedArrayPrototype, VIEW, true);\n    hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n    if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n      dP(TypedArrayPrototype, TAG, {\n        get: function () { return NAME; }\n      });\n    }\n\n    O[NAME] = TypedArray;\n\n    $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n    $export($export.S, NAME, {\n      BYTES_PER_ELEMENT: BYTES\n    });\n\n    $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n      from: $from,\n      of: $of\n    });\n\n    if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n    $export($export.P, NAME, proto);\n\n    setSpecies(NAME);\n\n    $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n    $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n    if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n    $export($export.P + $export.F * fails(function () {\n      new TypedArray(1).slice();\n    }), NAME, { slice: $slice });\n\n    $export($export.P + $export.F * (fails(function () {\n      return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n    }) || !fails(function () {\n      TypedArrayPrototype.toLocaleString.call([1, 2]);\n    })), NAME, { toLocaleString: $toLocaleString });\n\n    Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n    if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n  };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n  return function Int8Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n  return function Uint8Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n  return function Uint8ClampedArray(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n  return function Int16Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n  return function Uint16Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n  return function Int32Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n  return function Uint32Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n  return function Float32Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n  return function Float64Array(data, byteOffset, length) {\n    return init(this, data, byteOffset, length);\n  };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch (e) {\n    var ret = iterator['return'];\n    if (ret !== undefined) anObject(ret.call(iterator));\n    throw e;\n  }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n  var f = ctx(fn, that, entries ? 2 : 1);\n  var index = 0;\n  var length, step, iterator, result;\n  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n  // fast case for arrays with default iterator\n  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if (result === BREAK || result === RETURN) return result;\n  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n    result = call(iterator, f, step.value, entries);\n    if (result === BREAK || result === RETURN) return result;\n  }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n  return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n  setDesc(it, META, { value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  } });\n};\nvar fastKey = function (it, create) {\n  // return primitive with prefix\n  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return 'F';\n    // not necessary to add metadata\n    if (!create) return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function (it, create) {\n  if (!has(it, META)) {\n    // can't set metadata to uncaught frozen object\n    if (!isExtensible(it)) return true;\n    // not necessary to add metadata\n    if (!create) return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY: META,\n  NEED: false,\n  fastKey: fastKey,\n  getWeak: getWeak,\n  onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n  if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n  return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n  // fast case\n  var index = fastKey(key);\n  var entry;\n  if (index !== 'F') return that._i[index];\n  // frozen object case\n  for (entry = that._f; entry; entry = entry.n) {\n    if (entry.k == key) return entry;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, NAME, '_i');\n      that._t = NAME;         // collection type\n      that._i = create(null); // index\n      that._f = undefined;    // first entry\n      that._l = undefined;    // last entry\n      that[SIZE] = 0;         // size\n      if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n    });\n    redefineAll(C.prototype, {\n      // 23.1.3.1 Map.prototype.clear()\n      // 23.2.3.2 Set.prototype.clear()\n      clear: function clear() {\n        for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n          entry.r = true;\n          if (entry.p) entry.p = entry.p.n = undefined;\n          delete data[entry.i];\n        }\n        that._f = that._l = undefined;\n        that[SIZE] = 0;\n      },\n      // 23.1.3.3 Map.prototype.delete(key)\n      // 23.2.3.4 Set.prototype.delete(value)\n      'delete': function (key) {\n        var that = validate(this, NAME);\n        var entry = getEntry(that, key);\n        if (entry) {\n          var next = entry.n;\n          var prev = entry.p;\n          delete that._i[entry.i];\n          entry.r = true;\n          if (prev) prev.n = next;\n          if (next) next.p = prev;\n          if (that._f == entry) that._f = next;\n          if (that._l == entry) that._l = prev;\n          that[SIZE]--;\n        } return !!entry;\n      },\n      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n      forEach: function forEach(callbackfn /* , that = undefined */) {\n        validate(this, NAME);\n        var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n        var entry;\n        while (entry = entry ? entry.n : this._f) {\n          f(entry.v, entry.k, this);\n          // revert to the last existing entry\n          while (entry && entry.r) entry = entry.p;\n        }\n      },\n      // 23.1.3.7 Map.prototype.has(key)\n      // 23.2.3.7 Set.prototype.has(value)\n      has: function has(key) {\n        return !!getEntry(validate(this, NAME), key);\n      }\n    });\n    if (DESCRIPTORS) dP(C.prototype, 'size', {\n      get: function () {\n        return validate(this, NAME)[SIZE];\n      }\n    });\n    return C;\n  },\n  def: function (that, key, value) {\n    var entry = getEntry(that, key);\n    var prev, index;\n    // change existing entry\n    if (entry) {\n      entry.v = value;\n    // create new entry\n    } else {\n      that._l = entry = {\n        i: index = fastKey(key, true), // <- index\n        k: key,                        // <- key\n        v: value,                      // <- value\n        p: prev = that._l,             // <- previous entry\n        n: undefined,                  // <- next entry\n        r: false                       // <- removed\n      };\n      if (!that._f) that._f = entry;\n      if (prev) prev.n = entry;\n      that[SIZE]++;\n      // add to index\n      if (index !== 'F') that._i[index] = entry;\n    } return that;\n  },\n  getEntry: getEntry,\n  setStrong: function (C, NAME, IS_MAP) {\n    // add .keys, .values, .entries, [@@iterator]\n    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n    $iterDefine(C, NAME, function (iterated, kind) {\n      this._t = validate(iterated, NAME); // target\n      this._k = kind;                     // kind\n      this._l = undefined;                // previous\n    }, function () {\n      var that = this;\n      var kind = that._k;\n      var entry = that._l;\n      // revert to the last existing entry\n      while (entry && entry.r) entry = entry.p;\n      // get next entry\n      if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n        // or finish the iteration\n        that._t = undefined;\n        return step(1);\n      }\n      // return step by kind\n      if (kind == 'keys') return step(0, entry.k);\n      if (kind == 'values') return step(0, entry.v);\n      return step(0, [entry.k, entry.v]);\n    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n    // add [@@species], 23.1.2.2, 23.2.2.2\n    setSpecies(NAME);\n  }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n  anObject(O);\n  if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n    function (test, buggy, set) {\n      try {\n        set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n        set(test, []);\n        buggy = !(test instanceof Array);\n      } catch (e) { buggy = true; }\n      return function setPrototypeOf(O, proto) {\n        check(O, proto);\n        if (buggy) O.__proto__ = proto;\n        else set(O, proto);\n        return O;\n      };\n    }({}, false) : undefined),\n  check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n  var S = target.constructor;\n  var P;\n  if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n    setPrototypeOf(that, P);\n  } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n  var Base = global[NAME];\n  var C = Base;\n  var ADDER = IS_MAP ? 'set' : 'add';\n  var proto = C && C.prototype;\n  var O = {};\n  var fixMethod = function (KEY) {\n    var fn = proto[KEY];\n    redefine(proto, KEY,\n      KEY == 'delete' ? function (a) {\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'has' ? function has(a) {\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'get' ? function get(a) {\n        return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n        : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n    );\n  };\n  if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n    new C().entries().next();\n  }))) {\n    // create collection constructor\n    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n    redefineAll(C.prototype, methods);\n    meta.NEED = true;\n  } else {\n    var instance = new C();\n    // early implementations not supports chaining\n    var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n    // V8 ~  Chromium 40- weak-collections throws on primitives, but should return false\n    var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n    // most early implementations doesn't supports iterables, most modern - not close it correctly\n    var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n    // for early implementations -0 and +0 not the same\n    var BUGGY_ZERO = !IS_WEAK && fails(function () {\n      // V8 ~ Chromium 42- fails only with 5+ elements\n      var $instance = new C();\n      var index = 5;\n      while (index--) $instance[ADDER](index, index);\n      return !$instance.has(-0);\n    });\n    if (!ACCEPT_ITERABLES) {\n      C = wrapper(function (target, iterable) {\n        anInstance(target, C, NAME);\n        var that = inheritIfRequired(new Base(), target, C);\n        if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n        return that;\n      });\n      C.prototype = proto;\n      proto.constructor = C;\n    }\n    if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n      fixMethod('delete');\n      fixMethod('has');\n      IS_MAP && fixMethod('get');\n    }\n    if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n    // weak collections should not contains .clear method\n    if (IS_WEAK && proto.clear) delete proto.clear;\n  }\n\n  setToStringTag(C, NAME);\n\n  O[NAME] = C;\n  $export($export.G + $export.W + $export.F * (C != Base), O);\n\n  if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n  return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n  return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.1.3.6 Map.prototype.get(key)\n  get: function get(key) {\n    var entry = strong.getEntry(validate(this, MAP), key);\n    return entry && entry.v;\n  },\n  // 23.1.3.9 Map.prototype.set(key, value)\n  set: function set(key, value) {\n    return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n  }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n  return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.2.3.1 Set.prototype.add(value)\n  add: function add(value) {\n    return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n  }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var S = Symbol();\n  var K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function (k) { B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var aLen = arguments.length;\n  var index = 1;\n  var getSymbols = gOPS.f;\n  var isEnum = pIE.f;\n  while (aLen > index) {\n    var S = IObject(arguments[index++]);\n    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n  } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n  return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n  this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n  return arrayFind(store.a, function (it) {\n    return it[0] === key;\n  });\n};\nUncaughtFrozenStore.prototype = {\n  get: function (key) {\n    var entry = findUncaughtFrozen(this, key);\n    if (entry) return entry[1];\n  },\n  has: function (key) {\n    return !!findUncaughtFrozen(this, key);\n  },\n  set: function (key, value) {\n    var entry = findUncaughtFrozen(this, key);\n    if (entry) entry[1] = value;\n    else this.a.push([key, value]);\n  },\n  'delete': function (key) {\n    var index = arrayFindIndex(this.a, function (it) {\n      return it[0] === key;\n    });\n    if (~index) this.a.splice(index, 1);\n    return !!~index;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n    var C = wrapper(function (that, iterable) {\n      anInstance(that, C, NAME, '_i');\n      that._t = NAME;      // collection type\n      that._i = id++;      // collection id\n      that._l = undefined; // leak store for uncaught frozen objects\n      if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n    });\n    redefineAll(C.prototype, {\n      // 23.3.3.2 WeakMap.prototype.delete(key)\n      // 23.4.3.3 WeakSet.prototype.delete(value)\n      'delete': function (key) {\n        if (!isObject(key)) return false;\n        var data = getWeak(key);\n        if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n        return data && $has(data, this._i) && delete data[this._i];\n      },\n      // 23.3.3.4 WeakMap.prototype.has(key)\n      // 23.4.3.4 WeakSet.prototype.has(value)\n      has: function has(key) {\n        if (!isObject(key)) return false;\n        var data = getWeak(key);\n        if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n        return data && $has(data, this._i);\n      }\n    });\n    return C;\n  },\n  def: function (that, key, value) {\n    var data = getWeak(anObject(key), true);\n    if (data === true) uncaughtFrozenStore(that).set(key, value);\n    else data[that._i] = value;\n    return that;\n  },\n  ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n  return function WeakMap() {\n    return get(this, arguments.length > 0 ? arguments[0] : undefined);\n  };\n};\n\nvar methods = {\n  // 23.3.3.3 WeakMap.prototype.get(key)\n  get: function get(key) {\n    if (isObject(key)) {\n      var data = getWeak(key);\n      if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n      return data ? data[this._i] : undefined;\n    }\n  },\n  // 23.3.3.5 WeakMap.prototype.set(key, value)\n  set: function set(key, value) {\n    return weak.def(validate(this, WEAK_MAP), key, value);\n  }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n  InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n  assign(InternalMap.prototype, methods);\n  meta.NEED = true;\n  each(['delete', 'has', 'get', 'set'], function (key) {\n    var proto = $WeakMap.prototype;\n    var method = proto[key];\n    redefine(proto, key, function (a, b) {\n      // store frozen objects on internal weakmap shim\n      if (isObject(a) && !isExtensible(a)) {\n        if (!this._f) this._f = new InternalMap();\n        var result = this._f[key](a, b);\n        return key == 'set' ? this : result;\n      // store all the rest on native weakmap\n      } return method.call(this, a, b);\n    });\n  });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n  return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.4.3.1 WeakSet.prototype.add(value)\n  add: function add(value) {\n    return weak.def(validate(this, WEAK_SET), value, true);\n  }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n  rApply(function () { /* empty */ });\n}), 'Reflect', {\n  apply: function apply(target, thisArgument, argumentsList) {\n    var T = aFunction(target);\n    var L = anObject(argumentsList);\n    return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n  }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n  var un = that === undefined;\n  switch (args.length) {\n    case 0: return un ? fn()\n                      : fn.call(that);\n    case 1: return un ? fn(args[0])\n                      : fn.call(that, args[0]);\n    case 2: return un ? fn(args[0], args[1])\n                      : fn.call(that, args[0], args[1]);\n    case 3: return un ? fn(args[0], args[1], args[2])\n                      : fn.call(that, args[0], args[1], args[2]);\n    case 4: return un ? fn(args[0], args[1], args[2], args[3])\n                      : fn.call(that, args[0], args[1], args[2], args[3]);\n  } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n  if (!(len in factories)) {\n    for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n    // eslint-disable-next-line no-new-func\n    factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n  } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n  var fn = aFunction(this);\n  var partArgs = arraySlice.call(arguments, 1);\n  var bound = function (/* args... */) {\n    var args = partArgs.concat(arraySlice.call(arguments));\n    return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n  };\n  if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n  return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n  function F() { /* empty */ }\n  return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n  rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n  construct: function construct(Target, args /* , newTarget */) {\n    aFunction(Target);\n    anObject(args);\n    var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n    if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n    if (Target == newTarget) {\n      // w/o altered newTarget, optimization for 0-4 arguments\n      switch (args.length) {\n        case 0: return new Target();\n        case 1: return new Target(args[0]);\n        case 2: return new Target(args[0], args[1]);\n        case 3: return new Target(args[0], args[1], args[2]);\n        case 4: return new Target(args[0], args[1], args[2], args[3]);\n      }\n      // w/o altered newTarget, lot of arguments case\n      var $args = [null];\n      $args.push.apply($args, args);\n      return new (bind.apply(Target, $args))();\n    }\n    // with altered newTarget, not support built-in constructors\n    var proto = newTarget.prototype;\n    var instance = create(isObject(proto) ? proto : Object.prototype);\n    var result = Function.apply.call(Target, instance, args);\n    return isObject(result) ? result : instance;\n  }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n  // eslint-disable-next-line no-undef\n  Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n  defineProperty: function defineProperty(target, propertyKey, attributes) {\n    anObject(target);\n    propertyKey = toPrimitive(propertyKey, true);\n    anObject(attributes);\n    try {\n      dP.f(target, propertyKey, attributes);\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n  deleteProperty: function deleteProperty(target, propertyKey) {\n    var desc = gOPD(anObject(target), propertyKey);\n    return desc && !desc.configurable ? false : delete target[propertyKey];\n  }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n  var receiver = arguments.length < 3 ? target : arguments[2];\n  var desc, proto;\n  if (anObject(target) === receiver) return target[propertyKey];\n  if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n    ? desc.value\n    : desc.get !== undefined\n      ? desc.get.call(receiver)\n      : undefined;\n  if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n  getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n    return gOPD.f(anObject(target), propertyKey);\n  }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n  getPrototypeOf: function getPrototypeOf(target) {\n    return getProto(anObject(target));\n  }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n  has: function has(target, propertyKey) {\n    return propertyKey in target;\n  }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n  isExtensible: function isExtensible(target) {\n    anObject(target);\n    return $isExtensible ? $isExtensible(target) : true;\n  }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n  var keys = gOPN.f(anObject(it));\n  var getSymbols = gOPS.f;\n  return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n  preventExtensions: function preventExtensions(target) {\n    anObject(target);\n    try {\n      if ($preventExtensions) $preventExtensions(target);\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n  var receiver = arguments.length < 4 ? target : arguments[3];\n  var ownDesc = gOPD.f(anObject(target), propertyKey);\n  var existingDescriptor, proto;\n  if (!ownDesc) {\n    if (isObject(proto = getPrototypeOf(target))) {\n      return set(proto, propertyKey, V, receiver);\n    }\n    ownDesc = createDesc(0);\n  }\n  if (has(ownDesc, 'value')) {\n    if (ownDesc.writable === false || !isObject(receiver)) return false;\n    if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n      if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n      existingDescriptor.value = V;\n      dP.f(receiver, propertyKey, existingDescriptor);\n    } else dP.f(receiver, propertyKey, createDesc(0, V));\n    return true;\n  }\n  return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n  setPrototypeOf: function setPrototypeOf(target, proto) {\n    setProto.check(target, proto);\n    try {\n      setProto.set(target, proto);\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n  var id = +this;\n  // eslint-disable-next-line no-prototype-builtins\n  if (queue.hasOwnProperty(id)) {\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\nvar listener = function (event) {\n  run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n  setTask = function setImmediate(fn) {\n    var args = [];\n    var i = 1;\n    while (arguments.length > i) args.push(arguments[i++]);\n    queue[++counter] = function () {\n      // eslint-disable-next-line no-new-func\n      invoke(typeof fn == 'function' ? fn : Function(fn), args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clearTask = function clearImmediate(id) {\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if (require('./_cof')(process) == 'process') {\n    defer = function (id) {\n      process.nextTick(ctx(run, id, 1));\n    };\n  // Sphere (JS game engine) Dispatch API\n  } else if (Dispatch && Dispatch.now) {\n    defer = function (id) {\n      Dispatch.now(ctx(run, id, 1));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  } else if (MessageChannel) {\n    channel = new MessageChannel();\n    port = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = ctx(port.postMessage, port, 1);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n    defer = function (id) {\n      global.postMessage(id + '', '*');\n    };\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if (ONREADYSTATECHANGE in cel('script')) {\n    defer = function (id) {\n      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n        html.removeChild(this);\n        run.call(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function (id) {\n      setTimeout(ctx(run, id, 1), 0);\n    };\n  }\n}\nmodule.exports = {\n  set: setTask,\n  clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n  var head, last, notify;\n\n  var flush = function () {\n    var parent, fn;\n    if (isNode && (parent = process.domain)) parent.exit();\n    while (head) {\n      fn = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch (e) {\n        if (head) notify();\n        else last = undefined;\n        throw e;\n      }\n    } last = undefined;\n    if (parent) parent.enter();\n  };\n\n  // Node.js\n  if (isNode) {\n    notify = function () {\n      process.nextTick(flush);\n    };\n  // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n  } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n    var toggle = true;\n    var node = document.createTextNode('');\n    new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n    notify = function () {\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if (Promise && Promise.resolve) {\n    // Promise.resolve without an argument throws an error in LG WebOS 2\n    var promise = Promise.resolve(undefined);\n    notify = function () {\n      promise.then(flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessag\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    notify = function () {\n      // strange IE + webpack dev server bug - use .call(global)\n      macrotask.call(global, flush);\n    };\n  }\n\n  return function (fn) {\n    var task = { fn: fn, next: undefined };\n    if (last) last.next = task;\n    if (!head) {\n      head = task;\n      notify();\n    } last = task;\n  };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n  var resolve, reject;\n  this.promise = new C(function ($$resolve, $$reject) {\n    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject = $$reject;\n  });\n  this.resolve = aFunction(resolve);\n  this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n  return new PromiseCapability(C);\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n  try {\n    // correct subclassing with @@species support\n    var promise = $Promise.resolve(1);\n    var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n      exec(empty, empty);\n    };\n    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n    return (isNode || typeof PromiseRejectionEvent == 'function')\n      && promise.then(empty) instanceof FakePromise\n      // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n      // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n      // we can't detect it synchronously, so just check versions\n      && v8.indexOf('6.6') !== 0\n      && userAgent.indexOf('Chrome/66') === -1;\n  } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n  var then;\n  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n  if (promise._n) return;\n  promise._n = true;\n  var chain = promise._c;\n  microtask(function () {\n    var value = promise._v;\n    var ok = promise._s == 1;\n    var i = 0;\n    var run = function (reaction) {\n      var handler = ok ? reaction.ok : reaction.fail;\n      var resolve = reaction.resolve;\n      var reject = reaction.reject;\n      var domain = reaction.domain;\n      var result, then, exited;\n      try {\n        if (handler) {\n          if (!ok) {\n            if (promise._h == 2) onHandleUnhandled(promise);\n            promise._h = 1;\n          }\n          if (handler === true) result = value;\n          else {\n            if (domain) domain.enter();\n            result = handler(value); // may throw\n            if (domain) {\n              domain.exit();\n              exited = true;\n            }\n          }\n          if (result === reaction.promise) {\n            reject(TypeError('Promise-chain cycle'));\n          } else if (then = isThenable(result)) {\n            then.call(result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch (e) {\n        if (domain && !exited) domain.exit();\n        reject(e);\n      }\n    };\n    while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n    promise._c = [];\n    promise._n = false;\n    if (isReject && !promise._h) onUnhandled(promise);\n  });\n};\nvar onUnhandled = function (promise) {\n  task.call(global, function () {\n    var value = promise._v;\n    var unhandled = isUnhandled(promise);\n    var result, handler, console;\n    if (unhandled) {\n      result = perform(function () {\n        if (isNode) {\n          process.emit('unhandledRejection', value, promise);\n        } else if (handler = global.onunhandledrejection) {\n          handler({ promise: promise, reason: value });\n        } else if ((console = global.console) && console.error) {\n          console.error('Unhandled promise rejection', value);\n        }\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n    } promise._a = undefined;\n    if (unhandled && result.e) throw result.v;\n  });\n};\nvar isUnhandled = function (promise) {\n  return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n  task.call(global, function () {\n    var handler;\n    if (isNode) {\n      process.emit('rejectionHandled', promise);\n    } else if (handler = global.onrejectionhandled) {\n      handler({ promise: promise, reason: promise._v });\n    }\n  });\n};\nvar $reject = function (value) {\n  var promise = this;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  promise._v = value;\n  promise._s = 2;\n  if (!promise._a) promise._a = promise._c.slice();\n  notify(promise, true);\n};\nvar $resolve = function (value) {\n  var promise = this;\n  var then;\n  if (promise._d) return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  try {\n    if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n    if (then = isThenable(value)) {\n      microtask(function () {\n        var wrapper = { _w: promise, _d: false }; // wrap\n        try {\n          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n        } catch (e) {\n          $reject.call(wrapper, e);\n        }\n      });\n    } else {\n      promise._v = value;\n      promise._s = 1;\n      notify(promise, false);\n    }\n  } catch (e) {\n    $reject.call({ _w: promise, _d: false }, e); // wrap\n  }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n  // 25.4.3.1 Promise(executor)\n  $Promise = function Promise(executor) {\n    anInstance(this, $Promise, PROMISE, '_h');\n    aFunction(executor);\n    Internal.call(this);\n    try {\n      executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n    } catch (err) {\n      $reject.call(this, err);\n    }\n  };\n  // eslint-disable-next-line no-unused-vars\n  Internal = function Promise(executor) {\n    this._c = [];             // <- awaiting reactions\n    this._a = undefined;      // <- checked in isUnhandled reactions\n    this._s = 0;              // <- state\n    this._d = false;          // <- done\n    this._v = undefined;      // <- value\n    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n    this._n = false;          // <- notify\n  };\n  Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n    then: function then(onFulfilled, onRejected) {\n      var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n      reaction.fail = typeof onRejected == 'function' && onRejected;\n      reaction.domain = isNode ? process.domain : undefined;\n      this._c.push(reaction);\n      if (this._a) this._a.push(reaction);\n      if (this._s) notify(this, false);\n      return reaction.promise;\n    },\n    // 25.4.5.1 Promise.prototype.catch(onRejected)\n    'catch': function (onRejected) {\n      return this.then(undefined, onRejected);\n    }\n  });\n  OwnPromiseCapability = function () {\n    var promise = new Internal();\n    this.promise = promise;\n    this.resolve = ctx($resolve, promise, 1);\n    this.reject = ctx($reject, promise, 1);\n  };\n  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n    return C === $Promise || C === Wrapper\n      ? new OwnPromiseCapability(C)\n      : newGenericPromiseCapability(C);\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n  // 25.4.4.5 Promise.reject(r)\n  reject: function reject(r) {\n    var capability = newPromiseCapability(this);\n    var $$reject = capability.reject;\n    $$reject(r);\n    return capability.promise;\n  }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n  // 25.4.4.6 Promise.resolve(x)\n  resolve: function resolve(x) {\n    return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n  }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n  $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n  // 25.4.4.1 Promise.all(iterable)\n  all: function all(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var resolve = capability.resolve;\n    var reject = capability.reject;\n    var result = perform(function () {\n      var values = [];\n      var index = 0;\n      var remaining = 1;\n      forOf(iterable, false, function (promise) {\n        var $index = index++;\n        var alreadyCalled = false;\n        values.push(undefined);\n        remaining++;\n        C.resolve(promise).then(function (value) {\n          if (alreadyCalled) return;\n          alreadyCalled = true;\n          values[$index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  },\n  // 25.4.4.4 Promise.race(iterable)\n  race: function race(iterable) {\n    var C = this;\n    var capability = newPromiseCapability(C);\n    var reject = capability.reject;\n    var result = perform(function () {\n      forOf(iterable, false, function (promise) {\n        C.resolve(promise).then(capability.resolve, reject);\n      });\n    });\n    if (result.e) reject(result.v);\n    return capability.promise;\n  }\n});\n","module.exports = function (exec) {\n  try {\n    return { e: false, v: exec() };\n  } catch (e) {\n    return { e: true, v: e };\n  }\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n  anObject(C);\n  if (isObject(x) && x.constructor === C) return x;\n  var promiseCapability = newPromiseCapability.f(C);\n  var resolve = promiseCapability.resolve;\n  resolve(x);\n  return promiseCapability.promise;\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return gOPN(it);\n  } catch (e) {\n    return windowNames.slice();\n  }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n  return _create(dP({}, 'a', {\n    get: function () { return dP(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (it, key, D) {\n  var protoDesc = gOPD(ObjectProto, key);\n  if (protoDesc) delete ObjectProto[key];\n  dP(it, key, D);\n  if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n  sym._k = tag;\n  return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n  if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n  anObject(it);\n  key = toPrimitive(key, true);\n  anObject(D);\n  if (has(AllSymbols, key)) {\n    if (!D.enumerable) {\n      if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n      D = _create(D, { enumerable: createDesc(0, false) });\n    } return setSymbolDesc(it, key, D);\n  } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n  anObject(it);\n  var keys = enumKeys(P = toIObject(P));\n  var i = 0;\n  var l = keys.length;\n  var key;\n  while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\nvar $create = function create(it, P) {\n  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n  var E = isEnum.call(this, key = toPrimitive(key, true));\n  if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n  it = toIObject(it);\n  key = toPrimitive(key, true);\n  if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n  var D = gOPD(it, key);\n  if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n  return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n  var names = gOPN(toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n  } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n  var IS_OP = it === ObjectProto;\n  var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n  } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n  $Symbol = function Symbol() {\n    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n    var $set = function (value) {\n      if (this === ObjectProto) $set.call(OPSymbols, value);\n      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDesc(this, tag, createDesc(1, value));\n    };\n    if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n    return wrap(tag);\n  };\n  redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n    return this._k;\n  });\n\n  $GOPD.f = $getOwnPropertyDescriptor;\n  $DP.f = $defineProperty;\n  require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n  require('./_object-pie').f = $propertyIsEnumerable;\n  require('./_object-gops').f = $getOwnPropertySymbols;\n\n  if (DESCRIPTORS && !require('./_library')) {\n    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n  }\n\n  wksExt.f = function (name) {\n    return wrap(wks(name));\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n  // 19.4.2.1 Symbol.for(key)\n  'for': function (key) {\n    return has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // 19.4.2.5 Symbol.keyFor(sym)\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n    for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n  },\n  useSetter: function () { setter = true; },\n  useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n  // 19.1.2.2 Object.create(O [, Properties])\n  create: $create,\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n  defineProperty: $defineProperty,\n  // 19.1.2.3 Object.defineProperties(O, Properties)\n  defineProperties: $defineProperties,\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n  var S = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  // WebKit converts symbol values to JSON as null\n  // V8 throws on boxed symbols\n  return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n  stringify: function stringify(it) {\n    var args = [it];\n    var i = 1;\n    var replacer, $replacer;\n    while (arguments.length > i) args.push(arguments[i++]);\n    $replacer = replacer = args[1];\n    if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n    if (!isArray(replacer)) replacer = function (key, value) {\n      if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n      if (!isSymbol(value)) return value;\n    };\n    args[1] = replacer;\n    return _stringify.apply($JSON, args);\n  }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n  var result = getKeys(it);\n  var getSymbols = gOPS.f;\n  if (getSymbols) {\n    var symbols = getSymbols(it);\n    var isEnum = pIE.f;\n    var i = 0;\n    var key;\n    while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n  } return result;\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n  var fn = (core.Object || {})[KEY] || Object[KEY];\n  var exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n  return function freeze(it) {\n    return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n  };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n  return function seal(it) {\n    return $seal && isObject(it) ? $seal(meta(it)) : it;\n  };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n  return function preventExtensions(it) {\n    return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n  };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n  return function isFrozen(it) {\n    return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n  };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n  return function isSealed(it) {\n    return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n  };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n  return function isExtensible(it) {\n    return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n  };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n  return function getOwnPropertyDescriptor(it, key) {\n    return $getOwnPropertyDescriptor(toIObject(it), key);\n  };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n  return function getPrototypeOf(it) {\n    return $getPrototypeOf(toObject(it));\n  };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n  return function keys(it) {\n    return $keys(toObject(it));\n  };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n  return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n  // eslint-disable-next-line no-self-compare\n  return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n  configurable: true,\n  get: function () {\n    try {\n      return ('' + this).match(nameRE)[1];\n    } catch (e) {\n      return '';\n    }\n  }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n  // 21.1.2.4 String.raw(callSite, ...substitutions)\n  raw: function raw(callSite) {\n    var tpl = toIObject(callSite.raw);\n    var len = toLength(tpl.length);\n    var aLen = arguments.length;\n    var res = [];\n    var i = 0;\n    while (len > i) {\n      res.push(String(tpl[i++]));\n      if (i < aLen) res.push(String(arguments[i]));\n    } return res.join('');\n  }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n  // 21.1.2.2 String.fromCodePoint(...codePoints)\n  fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n    var res = [];\n    var aLen = arguments.length;\n    var i = 0;\n    var code;\n    while (aLen > i) {\n      code = +arguments[i++];\n      if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n      res.push(code < 0x10000\n        ? fromCharCode(code)\n        : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n      );\n    } return res.join('');\n  }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n  return function (that, pos) {\n    var s = String(defined(that));\n    var i = toInteger(pos);\n    var l = s.length;\n    var a, b;\n    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n  // 21.1.3.3 String.prototype.codePointAt(pos)\n  codePointAt: function codePointAt(pos) {\n    return $at(this, pos);\n  }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n  var str = String(defined(this));\n  var res = '';\n  var n = toInteger(count);\n  if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n  for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n  return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n  // 21.1.3.13 String.prototype.repeat(count)\n  repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n  if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n  return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n  var re = /./;\n  try {\n    '/./'[KEY](re);\n  } catch (e) {\n    try {\n      re[MATCH] = false;\n      return !'/./'[KEY](re);\n    } catch (f) { /* empty */ }\n  } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n  startsWith: function startsWith(searchString /* , position = 0 */) {\n    var that = context(this, searchString, STARTS_WITH);\n    var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n    var search = String(searchString);\n    return $startsWith\n      ? $startsWith.call(that, search, index)\n      : that.slice(index, index + search.length) === search;\n  }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n  endsWith: function endsWith(searchString /* , endPosition = @length */) {\n    var that = context(this, searchString, ENDS_WITH);\n    var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n    var len = toLength(that.length);\n    var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n    var search = String(searchString);\n    return $endsWith\n      ? $endsWith.call(that, search, end)\n      : that.slice(end - search.length, end) === search;\n  }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n  includes: function includes(searchString /* , position = 0 */) {\n    return !!~context(this, searchString, INCLUDES)\n      .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n  configurable: true,\n  get: require('./_flags')\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.unicode) result += 'u';\n  if (that.sticky) result += 'y';\n  return result;\n};\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n  var SYMBOL = wks(KEY);\n  var fns = exec(defined, SYMBOL, ''[KEY]);\n  var strfn = fns[0];\n  var rxfn = fns[1];\n  if (fails(function () {\n    var O = {};\n    O[SYMBOL] = function () { return 7; };\n    return ''[KEY](O) != 7;\n  })) {\n    redefine(String.prototype, KEY, strfn);\n    hide(RegExp.prototype, SYMBOL, length == 2\n      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n      // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n      ? function (string, arg) { return rxfn.call(string, this, arg); }\n      // 21.2.5.6 RegExp.prototype[@@match](string)\n      // 21.2.5.9 RegExp.prototype[@@search](string)\n      : function (string) { return rxfn.call(string, this); }\n    );\n  }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n  // 21.1.3.11 String.prototype.match(regexp)\n  return [function match(regexp) {\n    'use strict';\n    var O = defined(this);\n    var fn = regexp == undefined ? undefined : regexp[MATCH];\n    return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n  }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n  // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n  return [function replace(searchValue, replaceValue) {\n    'use strict';\n    var O = defined(this);\n    var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n    return fn !== undefined\n      ? fn.call(searchValue, O, replaceValue)\n      : $replace.call(String(O), searchValue, replaceValue);\n  }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n  'use strict';\n  var isRegExp = require('./_is-regexp');\n  var _split = $split;\n  var $push = [].push;\n  var $SPLIT = 'split';\n  var LENGTH = 'length';\n  var LAST_INDEX = 'lastIndex';\n  if (\n    'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n    'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n    'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n    '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n    '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n    ''[$SPLIT](/.?/)[LENGTH]\n  ) {\n    var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n    // based on es5-shim implementation, need to rework it\n    $split = function (separator, limit) {\n      var string = String(this);\n      if (separator === undefined && limit === 0) return [];\n      // If `separator` is not a regex, use native split\n      if (!isRegExp(separator)) return _split.call(string, separator, limit);\n      var output = [];\n      var flags = (separator.ignoreCase ? 'i' : '') +\n                  (separator.multiline ? 'm' : '') +\n                  (separator.unicode ? 'u' : '') +\n                  (separator.sticky ? 'y' : '');\n      var lastLastIndex = 0;\n      var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n      // Make `global` and avoid `lastIndex` issues by working with a copy\n      var separatorCopy = new RegExp(separator.source, flags + 'g');\n      var separator2, match, lastIndex, lastLength, i;\n      // Doesn't need flags gy, but they don't hurt\n      if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n      while (match = separatorCopy.exec(string)) {\n        // `separatorCopy.lastIndex` is not reliable cross-browser\n        lastIndex = match.index + match[0][LENGTH];\n        if (lastIndex > lastLastIndex) {\n          output.push(string.slice(lastLastIndex, match.index));\n          // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n          // eslint-disable-next-line no-loop-func\n          if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n            for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n          });\n          if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n          lastLength = match[0][LENGTH];\n          lastLastIndex = lastIndex;\n          if (output[LENGTH] >= splitLimit) break;\n        }\n        if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n      }\n      if (lastLastIndex === string[LENGTH]) {\n        if (lastLength || !separatorCopy.test('')) output.push('');\n      } else output.push(string.slice(lastLastIndex));\n      return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n    };\n  // Chakra, V8\n  } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n    $split = function (separator, limit) {\n      return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n    };\n  }\n  // 21.1.3.17 String.prototype.split(separator, limit)\n  return [function split(separator, limit) {\n    var O = defined(this);\n    var fn = separator == undefined ? undefined : separator[SPLIT];\n    return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n  }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n  // 21.1.3.15 String.prototype.search(regexp)\n  return [function search(regexp) {\n    'use strict';\n    var O = defined(this);\n    var fn = regexp == undefined ? undefined : regexp[SEARCH];\n    return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n  }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n  if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n  else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n  from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n    var O = toObject(arrayLike);\n    var C = typeof this == 'function' ? this : Array;\n    var aLen = arguments.length;\n    var mapfn = aLen > 1 ? arguments[1] : undefined;\n    var mapping = mapfn !== undefined;\n    var index = 0;\n    var iterFn = getIterFn(O);\n    var length, result, step, iterator;\n    if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n    // if object isn't iterable or it's array with default iterator - use simple case\n    if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n      for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n      }\n    } else {\n      length = toLength(O.length);\n      for (result = new C(length); length > index; index++) {\n        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n      }\n    }\n    result.length = index;\n    return result;\n  }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n  function F() { /* empty */ }\n  return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n  // 22.1.2.3 Array.of( ...items)\n  of: function of(/* ...args */) {\n    var index = 0;\n    var aLen = arguments.length;\n    var result = new (typeof this == 'function' ? this : Array)(aLen);\n    while (aLen > index) createProperty(result, index, arguments[index++]);\n    result.length = aLen;\n    return result;\n  }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n  find: function find(callbackfn /* , that = undefined */) {\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n  findIndex: function findIndex(callbackfn /* , that = undefined */) {\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n  isFinite: function isFinite(it) {\n    return typeof it == 'number' && _isFinite(it);\n  }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n  return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n  isSafeInteger: function isSafeInteger(number) {\n    return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n  }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n  isNaN: function isNaN(number) {\n    // eslint-disable-next-line no-self-compare\n    return number != number;\n  }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n  return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n  // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n  && Math.floor($acosh(Number.MAX_VALUE)) == 710\n  // Tor Browser bug: Math.acosh(Infinity) -> NaN\n  && $acosh(Infinity) == Infinity\n), 'Math', {\n  acosh: function acosh(x) {\n    return (x = +x) < 1 ? NaN : x > 94906265.62425156\n      ? Math.log(x) + Math.LN2\n      : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n  }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n  return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n  atanh: function atanh(x) {\n    return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n  }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n  // eslint-disable-next-line no-self-compare\n  return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n  cbrt: function cbrt(x) {\n    return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n  }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  clz32: function clz32(x) {\n    return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n  }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n  cosh: function cosh(x) {\n    return (exp(x = +x) + exp(-x)) / 2;\n  }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n  // Old FF bug\n  || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n  // Tor Browser bug\n  || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n  return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n  return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n  var $abs = Math.abs(x);\n  var $sign = sign(x);\n  var a, result;\n  if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n  a = (1 + EPSILON32 / EPSILON) * $abs;\n  result = a - (a - $abs);\n  // eslint-disable-next-line no-self-compare\n  if (result > MAX32 || result != result) return $sign * Infinity;\n  return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n  hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n    var sum = 0;\n    var i = 0;\n    var aLen = arguments.length;\n    var larg = 0;\n    var arg, div;\n    while (i < aLen) {\n      arg = abs(arguments[i++]);\n      if (larg < arg) {\n        div = larg / arg;\n        sum = sum * div * div + 1;\n        larg = arg;\n      } else if (arg > 0) {\n        div = arg / larg;\n        sum += div * div;\n      } else sum += arg;\n    }\n    return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n  }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n  return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n  imul: function imul(x, y) {\n    var UINT16 = 0xffff;\n    var xn = +x;\n    var yn = +y;\n    var xl = UINT16 & xn;\n    var yl = UINT16 & yn;\n    return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n  }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  log10: function log10(x) {\n    return Math.log(x) * Math.LOG10E;\n  }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  log2: function log2(x) {\n    return Math.log(x) / Math.LN2;\n  }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n  return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n  sinh: function sinh(x) {\n    return Math.abs(x = +x) < 1\n      ? (expm1(x) - expm1(-x)) / 2\n      : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n  }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n  tanh: function tanh(x) {\n    var a = expm1(x = +x);\n    var b = expm1(-x);\n    return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n  }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  trunc: function trunc(it) {\n    return (it > 0 ? Math.floor : Math.ceil)(it);\n  }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n  includes: function includes(el /* , fromIndex = 0 */) {\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n  return function (it) {\n    var O = toIObject(it);\n    var keys = getKeys(O);\n    var length = keys.length;\n    var i = 0;\n    var result = [];\n    var key;\n    while (length > i) if (isEnum.call(O, key = keys[i++])) {\n      result.push(isEntries ? [key, O[key]] : O[key]);\n    } return result;\n  };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n  values: function values(it) {\n    return $values(it);\n  }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n  entries: function entries(it) {\n    return $entries(it);\n  }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n    var O = toIObject(object);\n    var getDesc = gOPD.f;\n    var keys = ownKeys(O);\n    var result = {};\n    var i = 0;\n    var key, desc;\n    while (keys.length > i) {\n      desc = getDesc(O, key = keys[i++]);\n      if (desc !== undefined) createProperty(result, key, desc);\n    }\n    return result;\n  }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n  var S = String(defined(that));\n  var stringLength = S.length;\n  var fillStr = fillString === undefined ? ' ' : String(fillString);\n  var intMaxLength = toLength(maxLength);\n  if (intMaxLength <= stringLength || fillStr == '') return S;\n  var fillLen = intMaxLength - stringLength;\n  var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n  if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n  return left ? stringFiller + S : S + stringFiller;\n};\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n  padStart: function padStart(maxLength /* , fillString = ' ' */) {\n    return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n  }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n  padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n    return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n  }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n  return function (fn, time /* , ...args */) {\n    var boundArgs = arguments.length > 2;\n    var args = boundArgs ? slice.call(arguments, 2) : false;\n    return set(boundArgs ? function () {\n      // eslint-disable-next-line no-new-func\n      (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n    } : fn, time);\n  };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n  setTimeout: wrap(global.setTimeout),\n  setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n  setImmediate: $task.set,\n  clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n  CSSRuleList: true, // TODO: Not spec compliant, should be false.\n  CSSStyleDeclaration: false,\n  CSSValueList: false,\n  ClientRectList: false,\n  DOMRectList: false,\n  DOMStringList: false,\n  DOMTokenList: true,\n  DataTransferItemList: false,\n  FileList: false,\n  HTMLAllCollection: false,\n  HTMLCollection: false,\n  HTMLFormElement: false,\n  HTMLSelectElement: false,\n  MediaList: true, // TODO: Not spec compliant, should be false.\n  MimeTypeArray: false,\n  NamedNodeMap: false,\n  NodeList: true,\n  PaintRequestList: false,\n  Plugin: false,\n  PluginArray: false,\n  SVGLengthList: false,\n  SVGNumberList: false,\n  SVGPathSegList: false,\n  SVGPointList: false,\n  SVGStringList: false,\n  SVGTransformList: false,\n  SourceBufferList: false,\n  StyleSheetList: true, // TODO: Not spec compliant, should be false.\n  TextTrackCueList: false,\n  TextTrackList: false,\n  TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n  var NAME = collections[i];\n  var explicit = DOMIterables[NAME];\n  var Collection = global[NAME];\n  var proto = Collection && Collection.prototype;\n  var key;\n  if (proto) {\n    if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n    if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n    Iterators[NAME] = ArrayValues;\n    if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n  }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n  \"use strict\";\n\n  var Op = Object.prototype;\n  var hasOwn = Op.hasOwnProperty;\n  var undefined; // More compressible than void 0.\n  var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n  var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n  var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n  var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n  var inModule = typeof module === \"object\";\n  var runtime = global.regeneratorRuntime;\n  if (runtime) {\n    if (inModule) {\n      // If regeneratorRuntime is defined globally and we're in a module,\n      // make the exports object identical to regeneratorRuntime.\n      module.exports = runtime;\n    }\n    // Don't bother evaluating the rest of this file if the runtime was\n    // already defined globally.\n    return;\n  }\n\n  // Define the runtime globally (as expected by generated code) as either\n  // module.exports (if we're in a module) or a new, empty object.\n  runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n    var generator = Object.create(protoGenerator.prototype);\n    var context = new Context(tryLocsList || []);\n\n    // The ._invoke method unifies the implementations of the .next,\n    // .throw, and .return methods.\n    generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n    return generator;\n  }\n  runtime.wrap = wrap;\n\n  // Try/catch helper to minimize deoptimizations. Returns a completion\n  // record like context.tryEntries[i].completion. This interface could\n  // have been (and was previously) designed to take a closure to be\n  // invoked without arguments, but in all the cases we care about we\n  // already have an existing method we want to call, so there's no need\n  // to create a new function object. We can even get away with assuming\n  // the method takes exactly one argument, since that happens to be true\n  // in every case, so we don't have to touch the arguments object. The\n  // only additional allocation required is the completion record, which\n  // has a stable shape and so hopefully should be cheap to allocate.\n  function tryCatch(fn, obj, arg) {\n    try {\n      return { type: \"normal\", arg: fn.call(obj, arg) };\n    } catch (err) {\n      return { type: \"throw\", arg: err };\n    }\n  }\n\n  var GenStateSuspendedStart = \"suspendedStart\";\n  var GenStateSuspendedYield = \"suspendedYield\";\n  var GenStateExecuting = \"executing\";\n  var GenStateCompleted = \"completed\";\n\n  // Returning this object from the innerFn has the same effect as\n  // breaking out of the dispatch switch statement.\n  var ContinueSentinel = {};\n\n  // Dummy constructor functions that we use as the .constructor and\n  // .constructor.prototype properties for functions that return Generator\n  // objects. For full spec compliance, you may wish to configure your\n  // minifier not to mangle the names of these two functions.\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n\n  // This is a polyfill for %IteratorPrototype% for environments that\n  // don't natively support it.\n  var IteratorPrototype = {};\n  IteratorPrototype[iteratorSymbol] = function () {\n    return this;\n  };\n\n  var getProto = Object.getPrototypeOf;\n  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n  if (NativeIteratorPrototype &&\n      NativeIteratorPrototype !== Op &&\n      hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n    // This environment has a native %IteratorPrototype%; use it instead\n    // of the polyfill.\n    IteratorPrototype = NativeIteratorPrototype;\n  }\n\n  var Gp = GeneratorFunctionPrototype.prototype =\n    Generator.prototype = Object.create(IteratorPrototype);\n  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n  GeneratorFunctionPrototype.constructor = GeneratorFunction;\n  GeneratorFunctionPrototype[toStringTagSymbol] =\n    GeneratorFunction.displayName = \"GeneratorFunction\";\n\n  // Helper for defining the .next, .throw, and .return methods of the\n  // Iterator interface in terms of a single ._invoke method.\n  function defineIteratorMethods(prototype) {\n    [\"next\", \"throw\", \"return\"].forEach(function(method) {\n      prototype[method] = function(arg) {\n        return this._invoke(method, arg);\n      };\n    });\n  }\n\n  runtime.isGeneratorFunction = function(genFun) {\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\n    return ctor\n      ? ctor === GeneratorFunction ||\n        // For the native GeneratorFunction constructor, the best we can\n        // do is to check its .name property.\n        (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n      : false;\n  };\n\n  runtime.mark = function(genFun) {\n    if (Object.setPrototypeOf) {\n      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n    } else {\n      genFun.__proto__ = GeneratorFunctionPrototype;\n      if (!(toStringTagSymbol in genFun)) {\n        genFun[toStringTagSymbol] = \"GeneratorFunction\";\n      }\n    }\n    genFun.prototype = Object.create(Gp);\n    return genFun;\n  };\n\n  // Within the body of any async function, `await x` is transformed to\n  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n  // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n  // meant to be awaited.\n  runtime.awrap = function(arg) {\n    return { __await: arg };\n  };\n\n  function AsyncIterator(generator) {\n    function invoke(method, arg, resolve, reject) {\n      var record = tryCatch(generator[method], generator, arg);\n      if (record.type === \"throw\") {\n        reject(record.arg);\n      } else {\n        var result = record.arg;\n        var value = result.value;\n        if (value &&\n            typeof value === \"object\" &&\n            hasOwn.call(value, \"__await\")) {\n          return Promise.resolve(value.__await).then(function(value) {\n            invoke(\"next\", value, resolve, reject);\n          }, function(err) {\n            invoke(\"throw\", err, resolve, reject);\n          });\n        }\n\n        return Promise.resolve(value).then(function(unwrapped) {\n          // When a yielded Promise is resolved, its final value becomes\n          // the .value of the Promise<{value,done}> result for the\n          // current iteration. If the Promise is rejected, however, the\n          // result for this iteration will be rejected with the same\n          // reason. Note that rejections of yielded Promises are not\n          // thrown back into the generator function, as is the case\n          // when an awaited Promise is rejected. This difference in\n          // behavior between yield and await is important, because it\n          // allows the consumer to decide what to do with the yielded\n          // rejection (swallow it and continue, manually .throw it back\n          // into the generator, abandon iteration, whatever). With\n          // await, by contrast, there is no opportunity to examine the\n          // rejection reason outside the generator function, so the\n          // only option is to throw it from the await expression, and\n          // let the generator function handle the exception.\n          result.value = unwrapped;\n          resolve(result);\n        }, reject);\n      }\n    }\n\n    if (typeof global.process === \"object\" && global.process.domain) {\n      invoke = global.process.domain.bind(invoke);\n    }\n\n    var previousPromise;\n\n    function enqueue(method, arg) {\n      function callInvokeWithMethodAndArg() {\n        return new Promise(function(resolve, reject) {\n          invoke(method, arg, resolve, reject);\n        });\n      }\n\n      return previousPromise =\n        // If enqueue has been called before, then we want to wait until\n        // all previous Promises have been resolved before calling invoke,\n        // so that results are always delivered in the correct order. If\n        // enqueue has not been called before, then it is important to\n        // call invoke immediately, without waiting on a callback to fire,\n        // so that the async generator function has the opportunity to do\n        // any necessary setup in a predictable way. This predictability\n        // is why the Promise constructor synchronously invokes its\n        // executor callback, and why async functions synchronously\n        // execute code before the first await. Since we implement simple\n        // async functions in terms of async generators, it is especially\n        // important to get this right, even though it requires care.\n        previousPromise ? previousPromise.then(\n          callInvokeWithMethodAndArg,\n          // Avoid propagating failures to Promises returned by later\n          // invocations of the iterator.\n          callInvokeWithMethodAndArg\n        ) : callInvokeWithMethodAndArg();\n    }\n\n    // Define the unified helper method that is used to implement .next,\n    // .throw, and .return (see defineIteratorMethods).\n    this._invoke = enqueue;\n  }\n\n  defineIteratorMethods(AsyncIterator.prototype);\n  AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n    return this;\n  };\n  runtime.AsyncIterator = AsyncIterator;\n\n  // Note that simple async functions are implemented on top of\n  // AsyncIterator objects; they just return a Promise for the value of\n  // the final result produced by the iterator.\n  runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n    var iter = new AsyncIterator(\n      wrap(innerFn, outerFn, self, tryLocsList)\n    );\n\n    return runtime.isGeneratorFunction(outerFn)\n      ? iter // If outerFn is a generator, return the full iterator.\n      : iter.next().then(function(result) {\n          return result.done ? result.value : iter.next();\n        });\n  };\n\n  function makeInvokeMethod(innerFn, self, context) {\n    var state = GenStateSuspendedStart;\n\n    return function invoke(method, arg) {\n      if (state === GenStateExecuting) {\n        throw new Error(\"Generator is already running\");\n      }\n\n      if (state === GenStateCompleted) {\n        if (method === \"throw\") {\n          throw arg;\n        }\n\n        // Be forgiving, per 25.3.3.3.3 of the spec:\n        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n        return doneResult();\n      }\n\n      context.method = method;\n      context.arg = arg;\n\n      while (true) {\n        var delegate = context.delegate;\n        if (delegate) {\n          var delegateResult = maybeInvokeDelegate(delegate, context);\n          if (delegateResult) {\n            if (delegateResult === ContinueSentinel) continue;\n            return delegateResult;\n          }\n        }\n\n        if (context.method === \"next\") {\n          // Setting context._sent for legacy support of Babel's\n          // function.sent implementation.\n          context.sent = context._sent = context.arg;\n\n        } else if (context.method === \"throw\") {\n          if (state === GenStateSuspendedStart) {\n            state = GenStateCompleted;\n            throw context.arg;\n          }\n\n          context.dispatchException(context.arg);\n\n        } else if (context.method === \"return\") {\n          context.abrupt(\"return\", context.arg);\n        }\n\n        state = GenStateExecuting;\n\n        var record = tryCatch(innerFn, self, context);\n        if (record.type === \"normal\") {\n          // If an exception is thrown from innerFn, we leave state ===\n          // GenStateExecuting and loop back for another invocation.\n          state = context.done\n            ? GenStateCompleted\n            : GenStateSuspendedYield;\n\n          if (record.arg === ContinueSentinel) {\n            continue;\n          }\n\n          return {\n            value: record.arg,\n            done: context.done\n          };\n\n        } else if (record.type === \"throw\") {\n          state = GenStateCompleted;\n          // Dispatch the exception by looping back around to the\n          // context.dispatchException(context.arg) call above.\n          context.method = \"throw\";\n          context.arg = record.arg;\n        }\n      }\n    };\n  }\n\n  // Call delegate.iterator[context.method](context.arg) and handle the\n  // result, either by returning a { value, done } result from the\n  // delegate iterator, or by modifying context.method and context.arg,\n  // setting context.delegate to null, and returning the ContinueSentinel.\n  function maybeInvokeDelegate(delegate, context) {\n    var method = delegate.iterator[context.method];\n    if (method === undefined) {\n      // A .throw or .return when the delegate iterator has no .throw\n      // method always terminates the yield* loop.\n      context.delegate = null;\n\n      if (context.method === \"throw\") {\n        if (delegate.iterator.return) {\n          // If the delegate iterator has a return method, give it a\n          // chance to clean up.\n          context.method = \"return\";\n          context.arg = undefined;\n          maybeInvokeDelegate(delegate, context);\n\n          if (context.method === \"throw\") {\n            // If maybeInvokeDelegate(context) changed context.method from\n            // \"return\" to \"throw\", let that override the TypeError below.\n            return ContinueSentinel;\n          }\n        }\n\n        context.method = \"throw\";\n        context.arg = new TypeError(\n          \"The iterator does not provide a 'throw' method\");\n      }\n\n      return ContinueSentinel;\n    }\n\n    var record = tryCatch(method, delegate.iterator, context.arg);\n\n    if (record.type === \"throw\") {\n      context.method = \"throw\";\n      context.arg = record.arg;\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    var info = record.arg;\n\n    if (! info) {\n      context.method = \"throw\";\n      context.arg = new TypeError(\"iterator result is not an object\");\n      context.delegate = null;\n      return ContinueSentinel;\n    }\n\n    if (info.done) {\n      // Assign the result of the finished delegate to the temporary\n      // variable specified by delegate.resultName (see delegateYield).\n      context[delegate.resultName] = info.value;\n\n      // Resume execution at the desired location (see delegateYield).\n      context.next = delegate.nextLoc;\n\n      // If context.method was \"throw\" but the delegate handled the\n      // exception, let the outer generator proceed normally. If\n      // context.method was \"next\", forget context.arg since it has been\n      // \"consumed\" by the delegate iterator. If context.method was\n      // \"return\", allow the original .return call to continue in the\n      // outer generator.\n      if (context.method !== \"return\") {\n        context.method = \"next\";\n        context.arg = undefined;\n      }\n\n    } else {\n      // Re-yield the result returned by the delegate method.\n      return info;\n    }\n\n    // The delegate iterator is finished, so forget it and continue with\n    // the outer generator.\n    context.delegate = null;\n    return ContinueSentinel;\n  }\n\n  // Define Generator.prototype.{next,throw,return} in terms of the\n  // unified ._invoke helper method.\n  defineIteratorMethods(Gp);\n\n  Gp[toStringTagSymbol] = \"Generator\";\n\n  // A Generator should always return itself as the iterator object when the\n  // @@iterator function is called on it. Some browsers' implementations of the\n  // iterator prototype chain incorrectly implement this, causing the Generator\n  // object to not be returned from this call. This ensures that doesn't happen.\n  // See https://github.com/facebook/regenerator/issues/274 for more details.\n  Gp[iteratorSymbol] = function() {\n    return this;\n  };\n\n  Gp.toString = function() {\n    return \"[object Generator]\";\n  };\n\n  function pushTryEntry(locs) {\n    var entry = { tryLoc: locs[0] };\n\n    if (1 in locs) {\n      entry.catchLoc = locs[1];\n    }\n\n    if (2 in locs) {\n      entry.finallyLoc = locs[2];\n      entry.afterLoc = locs[3];\n    }\n\n    this.tryEntries.push(entry);\n  }\n\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \"normal\";\n    delete record.arg;\n    entry.completion = record;\n  }\n\n  function Context(tryLocsList) {\n    // The root entry object (effectively a try statement without a catch\n    // or a finally block) gives us a place to store values thrown from\n    // locations where there is no enclosing try statement.\n    this.tryEntries = [{ tryLoc: \"root\" }];\n    tryLocsList.forEach(pushTryEntry, this);\n    this.reset(true);\n  }\n\n  runtime.keys = function(object) {\n    var keys = [];\n    for (var key in object) {\n      keys.push(key);\n    }\n    keys.reverse();\n\n    // Rather than returning an object with a next method, we keep\n    // things simple and return the next function itself.\n    return function next() {\n      while (keys.length) {\n        var key = keys.pop();\n        if (key in object) {\n          next.value = key;\n          next.done = false;\n          return next;\n        }\n      }\n\n      // To avoid creating an additional object, we just hang the .value\n      // and .done properties off the next function object itself. This\n      // also ensures that the minifier will not anonymize the function.\n      next.done = true;\n      return next;\n    };\n  };\n\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) {\n        return iteratorMethod.call(iterable);\n      }\n\n      if (typeof iterable.next === \"function\") {\n        return iterable;\n      }\n\n      if (!isNaN(iterable.length)) {\n        var i = -1, next = function next() {\n          while (++i < iterable.length) {\n            if (hasOwn.call(iterable, i)) {\n              next.value = iterable[i];\n              next.done = false;\n              return next;\n            }\n          }\n\n          next.value = undefined;\n          next.done = true;\n\n          return next;\n        };\n\n        return next.next = next;\n      }\n    }\n\n    // Return an iterator with no values.\n    return { next: doneResult };\n  }\n  runtime.values = values;\n\n  function doneResult() {\n    return { value: undefined, done: true };\n  }\n\n  Context.prototype = {\n    constructor: Context,\n\n    reset: function(skipTempReset) {\n      this.prev = 0;\n      this.next = 0;\n      // Resetting context._sent for legacy support of Babel's\n      // function.sent implementation.\n      this.sent = this._sent = undefined;\n      this.done = false;\n      this.delegate = null;\n\n      this.method = \"next\";\n      this.arg = undefined;\n\n      this.tryEntries.forEach(resetTryEntry);\n\n      if (!skipTempReset) {\n        for (var name in this) {\n          // Not sure about the optimal order of these conditions:\n          if (name.charAt(0) === \"t\" &&\n              hasOwn.call(this, name) &&\n              !isNaN(+name.slice(1))) {\n            this[name] = undefined;\n          }\n        }\n      }\n    },\n\n    stop: function() {\n      this.done = true;\n\n      var rootEntry = this.tryEntries[0];\n      var rootRecord = rootEntry.completion;\n      if (rootRecord.type === \"throw\") {\n        throw rootRecord.arg;\n      }\n\n      return this.rval;\n    },\n\n    dispatchException: function(exception) {\n      if (this.done) {\n        throw exception;\n      }\n\n      var context = this;\n      function handle(loc, caught) {\n        record.type = \"throw\";\n        record.arg = exception;\n        context.next = loc;\n\n        if (caught) {\n          // If the dispatched exception was caught by a catch block,\n          // then let that catch block handle the exception normally.\n          context.method = \"next\";\n          context.arg = undefined;\n        }\n\n        return !! caught;\n      }\n\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        var record = entry.completion;\n\n        if (entry.tryLoc === \"root\") {\n          // Exception thrown outside of any try block that could handle\n          // it, so set the completion value of the entire function to\n          // throw the exception.\n          return handle(\"end\");\n        }\n\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            } else if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            }\n\n          } else if (hasFinally) {\n            if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else {\n            throw new Error(\"try statement without catch or finally\");\n          }\n        }\n      }\n    },\n\n    abrupt: function(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc <= this.prev &&\n            hasOwn.call(entry, \"finallyLoc\") &&\n            this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n\n      if (finallyEntry &&\n          (type === \"break\" ||\n           type === \"continue\") &&\n          finallyEntry.tryLoc <= arg &&\n          arg <= finallyEntry.finallyLoc) {\n        // Ignore the finally entry if control is not jumping to a\n        // location outside the try/catch block.\n        finallyEntry = null;\n      }\n\n      var record = finallyEntry ? finallyEntry.completion : {};\n      record.type = type;\n      record.arg = arg;\n\n      if (finallyEntry) {\n        this.method = \"next\";\n        this.next = finallyEntry.finallyLoc;\n        return ContinueSentinel;\n      }\n\n      return this.complete(record);\n    },\n\n    complete: function(record, afterLoc) {\n      if (record.type === \"throw\") {\n        throw record.arg;\n      }\n\n      if (record.type === \"break\" ||\n          record.type === \"continue\") {\n        this.next = record.arg;\n      } else if (record.type === \"return\") {\n        this.rval = this.arg = record.arg;\n        this.method = \"return\";\n        this.next = \"end\";\n      } else if (record.type === \"normal\" && afterLoc) {\n        this.next = afterLoc;\n      }\n\n      return ContinueSentinel;\n    },\n\n    finish: function(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) {\n          this.complete(entry.completion, entry.afterLoc);\n          resetTryEntry(entry);\n          return ContinueSentinel;\n        }\n      }\n    },\n\n    \"catch\": function(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n          if (record.type === \"throw\") {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n          return thrown;\n        }\n      }\n\n      // The context.catch method must only be called with a location\n      // argument that corresponds to a known catch block.\n      throw new Error(\"illegal catch attempt\");\n    },\n\n    delegateYield: function(iterable, resultName, nextLoc) {\n      this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      };\n\n      if (this.method === \"next\") {\n        // Deliberately forget the last sent value so that we don't\n        // accidentally pass it on to the delegate.\n        this.arg = undefined;\n      }\n\n      return ContinueSentinel;\n    }\n  };\n})(\n  // Among the various tricks for obtaining a reference to the global\n  // object, this seems to be the most reliable technique that does not\n  // use indirect eval (which violates Content Security Policy).\n  typeof global === \"object\" ? global :\n  typeof window === \"object\" ? window :\n  typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\n(function() {\n  if (typeof window === 'undefined') {\n    return;\n  }\n\n  try {\n    var ce = new window.CustomEvent('test', { cancelable: true });\n    ce.preventDefault();\n    if (ce.defaultPrevented !== true) {\n      // IE has problems with .preventDefault() on custom events\n      // http://stackoverflow.com/questions/23349191\n      throw new Error('Could not prevent default');\n    }\n  } catch (e) {\n    var CustomEvent = function(event, params) {\n      var evt, origPrevent;\n      params = params || {\n        bubbles: false,\n        cancelable: false,\n        detail: undefined\n      };\n\n      evt = document.createEvent('CustomEvent');\n      evt.initCustomEvent(\n        event,\n        params.bubbles,\n        params.cancelable,\n        params.detail\n      );\n      origPrevent = evt.preventDefault;\n      evt.preventDefault = function() {\n        origPrevent.call(this);\n        try {\n          Object.defineProperty(this, 'defaultPrevented', {\n            get: function() {\n              return true;\n            }\n          });\n        } catch (e) {\n          this.defaultPrevented = true;\n        }\n      };\n      return evt;\n    };\n\n    CustomEvent.prototype = window.Event.prototype;\n    window.CustomEvent = CustomEvent; // expose definition to window\n  }\n})();\n","(function(global) {\r\n  /**\r\n   * Polyfill URLSearchParams\r\n   *\r\n   * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js\r\n   */\r\n\r\n  var checkIfIteratorIsSupported = function() {\r\n    try {\r\n      return !!Symbol.iterator;\r\n    } catch(error) {\r\n      return false;\r\n    }\r\n  };\r\n\r\n\r\n  var iteratorSupported = checkIfIteratorIsSupported();\r\n\r\n  var createIterator = function(items) {\r\n    var iterator = {\r\n      next: function() {\r\n        var value = items.shift();\r\n        return { done: value === void 0, value: value };\r\n      }\r\n    };\r\n\r\n    if(iteratorSupported) {\r\n      iterator[Symbol.iterator] = function() {\r\n        return iterator;\r\n      };\r\n    }\r\n\r\n    return iterator;\r\n  };\r\n\r\n  /**\r\n   * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing\r\n   * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`.\r\n   */\r\n  var serializeParam = function(value) {\r\n    return encodeURIComponent(value).replace(/%20/g, '+');\r\n  };\r\n\r\n  var deserializeParam = function(value) {\r\n    return decodeURIComponent(value).replace(/\\+/g, ' ');\r\n  };\r\n\r\n  var polyfillURLSearchParams= function() {\r\n\r\n    var URLSearchParams = function(searchString) {\r\n      Object.defineProperty(this, '_entries', { value: {} });\r\n\r\n      if(typeof searchString === 'string') {\r\n        if(searchString !== '') {\r\n          searchString = searchString.replace(/^\\?/, '');\r\n          var attributes = searchString.split('&');\r\n          var attribute;\r\n          for(var i = 0; i < attributes.length; i++) {\r\n            attribute = attributes[i].split('=');\r\n            this.append(\r\n              deserializeParam(attribute[0]),\r\n              (attribute.length > 1) ? deserializeParam(attribute[1]) : ''\r\n            );\r\n          }\r\n        }\r\n      } else if(searchString instanceof URLSearchParams) {\r\n        var _this = this;\r\n        searchString.forEach(function(value, name) {\r\n          _this.append(value, name);\r\n        });\r\n      }\r\n    };\r\n\r\n    var proto = URLSearchParams.prototype;\r\n\r\n    proto.append = function(name, value) {\r\n      if(name in this._entries) {\r\n        this._entries[name].push(value.toString());\r\n      } else {\r\n        this._entries[name] = [value.toString()];\r\n      }\r\n    };\r\n\r\n    proto.delete = function(name) {\r\n      delete this._entries[name];\r\n    };\r\n\r\n    proto.get = function(name) {\r\n      return (name in this._entries) ? this._entries[name][0] : null;\r\n    };\r\n\r\n    proto.getAll = function(name) {\r\n      return (name in this._entries) ? this._entries[name].slice(0) : [];\r\n    };\r\n\r\n    proto.has = function(name) {\r\n      return (name in this._entries);\r\n    };\r\n\r\n    proto.set = function(name, value) {\r\n      this._entries[name] = [value.toString()];\r\n    };\r\n\r\n    proto.forEach = function(callback, thisArg) {\r\n      var entries;\r\n      for(var name in this._entries) {\r\n        if(this._entries.hasOwnProperty(name)) {\r\n          entries = this._entries[name];\r\n          for(var i = 0; i < entries.length; i++) {\r\n            callback.call(thisArg, entries[i], name, this);\r\n          }\r\n        }\r\n      }\r\n    };\r\n\r\n    proto.keys = function() {\r\n      var items = [];\r\n      this.forEach(function(value, name) { items.push(name); });\r\n      return createIterator(items);\r\n    };\r\n\r\n    proto.values = function() {\r\n      var items = [];\r\n      this.forEach(function(value) { items.push(value); });\r\n      return createIterator(items);\r\n    };\r\n\r\n    proto.entries = function() {\r\n      var items = [];\r\n      this.forEach(function(value, name) { items.push([name, value]); });\r\n      return createIterator(items);\r\n    };\r\n\r\n    if(iteratorSupported) {\r\n      proto[Symbol.iterator] = proto.entries;\r\n    }\r\n\r\n    proto.toString = function() {\r\n      var searchArray = [];\r\n      this.forEach(function(value, name) {\r\n        searchArray.push(serializeParam(name) + '=' + serializeParam(value));\r\n      });\r\n      return searchArray.join(\"&\");\r\n    };\r\n\r\n    global.URLSearchParams = URLSearchParams;\r\n  };\r\n\r\n  if(!('URLSearchParams' in global) || (new URLSearchParams('?a=1').toString() !== 'a=1')) {\r\n    polyfillURLSearchParams();\r\n  }\r\n\r\n  // HTMLAnchorElement\r\n\r\n})(\r\n  (typeof global !== 'undefined') ? global\r\n    : ((typeof window !== 'undefined') ? window\r\n    : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n\r\n(function(global) {\r\n  /**\r\n   * Polyfill URL\r\n   *\r\n   * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js\r\n   */\r\n\r\n  var checkIfURLIsSupported = function() {\r\n    try {\r\n      var u = new URL('b', 'http://a');\r\n      u.pathname = 'c%20d';\r\n      return (u.href === 'http://a/c%20d') && u.searchParams;\r\n    } catch(e) {\r\n      return false;\r\n    }\r\n  };\r\n\r\n\r\n  var polyfillURL = function() {\r\n    var _URL = global.URL;\r\n\r\n    var URL = function(url, base) {\r\n      if(typeof url !== 'string') url = String(url);\r\n\r\n      // Only create another document if the base is different from current location.\r\n      var doc = document, baseElement;\r\n      if(base && (global.location === void 0 || base !== global.location.href)) {\r\n        doc = document.implementation.createHTMLDocument('');\r\n        baseElement = doc.createElement('base');\r\n        baseElement.href = base;\r\n        doc.head.appendChild(baseElement);\r\n        try {\r\n            if(baseElement.href.indexOf(base) !== 0) throw new Error(baseElement.href);\r\n        } catch (err) { \r\n            throw new Error(\"URL unable to set base \" + base + \" due to \" + err);\r\n        }\r\n      }\r\n\r\n      var anchorElement = doc.createElement('a');\r\n      anchorElement.href = url;\r\n      if (baseElement) {\r\n          doc.body.appendChild(anchorElement);\r\n          anchorElement.href = anchorElement.href; // force href to refresh\r\n      }\r\n\r\n      if(anchorElement.protocol === ':' || !/:/.test(anchorElement.href)) {\r\n        throw new TypeError('Invalid URL');\r\n      }\r\n\r\n      Object.defineProperty(this, '_anchorElement', {\r\n        value: anchorElement\r\n      });\r\n    };\r\n\r\n    var proto = URL.prototype;\r\n\r\n    var linkURLWithAnchorAttribute = function(attributeName) {\r\n      Object.defineProperty(proto, attributeName, {\r\n        get: function() {\r\n          return this._anchorElement[attributeName];\r\n        },\r\n        set: function(value) {\r\n          this._anchorElement[attributeName] = value;\r\n        },\r\n        enumerable: true\r\n      });\r\n    };\r\n\r\n    ['hash', 'host', 'hostname', 'port', 'protocol', 'search']\r\n    .forEach(function(attributeName) {\r\n      linkURLWithAnchorAttribute(attributeName);\r\n    });\r\n\r\n    Object.defineProperties(proto, {\r\n\r\n      'toString': {\r\n        get: function() {\r\n          var _this = this;\r\n          return function() {\r\n            return _this.href;\r\n          };\r\n        }\r\n      },\r\n\r\n      'href' : {\r\n        get: function() {\r\n          return this._anchorElement.href.replace(/\\?$/,'');\r\n        },\r\n        set: function(value) {\r\n          this._anchorElement.href = value;\r\n        },\r\n        enumerable: true\r\n      },\r\n\r\n      'pathname' : {\r\n        get: function() {\r\n          return this._anchorElement.pathname.replace(/(^\\/?)/,'/');\r\n        },\r\n        set: function(value) {\r\n          this._anchorElement.pathname = value;\r\n        },\r\n        enumerable: true\r\n      },\r\n\r\n      'origin': {\r\n        get: function() {\r\n          // get expected port from protocol\r\n          var expectedPort = {'http:': 80, 'https:': 443, 'ftp:': 21}[this._anchorElement.protocol];\r\n          // add port to origin if, expected port is different than actual port\r\n          // and it is not empty f.e http://foo:8080\r\n          // 8080 != 80 && 8080 != ''\r\n          var addPortToOrigin = this._anchorElement.port != expectedPort &&\r\n            this._anchorElement.port !== ''\r\n\r\n          return this._anchorElement.protocol +\r\n            '//' +\r\n            this._anchorElement.hostname +\r\n            (addPortToOrigin ? (':' + this._anchorElement.port) : '');\r\n        },\r\n        enumerable: true\r\n      },\r\n\r\n      'password': { // TODO\r\n        get: function() {\r\n          return '';\r\n        },\r\n        set: function(value) {\r\n        },\r\n        enumerable: true\r\n      },\r\n\r\n      'username': { // TODO\r\n        get: function() {\r\n          return '';\r\n        },\r\n        set: function(value) {\r\n        },\r\n        enumerable: true\r\n      },\r\n\r\n      'searchParams': {\r\n        get: function() {\r\n          var searchParams = new URLSearchParams(this.search);\r\n          var _this = this;\r\n          ['append', 'delete', 'set'].forEach(function(methodName) {\r\n            var method = searchParams[methodName];\r\n            searchParams[methodName] = function() {\r\n              method.apply(searchParams, arguments);\r\n              _this.search = searchParams.toString();\r\n            };\r\n          });\r\n          return searchParams;\r\n        },\r\n        enumerable: true\r\n      }\r\n    });\r\n\r\n    URL.createObjectURL = function(blob) {\r\n      return _URL.createObjectURL.apply(_URL, arguments);\r\n    };\r\n\r\n    URL.revokeObjectURL = function(url) {\r\n      return _URL.revokeObjectURL.apply(_URL, arguments);\r\n    };\r\n\r\n    global.URL = URL;\r\n\r\n  };\r\n\r\n  if(!checkIfURLIsSupported()) {\r\n    polyfillURL();\r\n  }\r\n\r\n  if((global.location !== void 0) && !('origin' in global.location)) {\r\n    var getOrigin = function() {\r\n      return global.location.protocol + '//' + global.location.hostname + (global.location.port ? (':' + global.location.port) : '');\r\n    };\r\n\r\n    try {\r\n      Object.defineProperty(global.location, 'origin', {\r\n        get: getOrigin,\r\n        enumerable: true\r\n      });\r\n    } catch(e) {\r\n      setInterval(function() {\r\n        global.location.origin = getOrigin();\r\n      }, 100);\r\n    }\r\n  }\r\n\r\n})(\r\n  (typeof global !== 'undefined') ? global\r\n    : ((typeof window !== 'undefined') ? window\r\n    : ((typeof self !== 'undefined') ? self : this))\r\n);\r\n","// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => (input !== null && typeof input !== 'undefined' ? input.constructor : null);\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => getConstructor(input) === Function;\nconst isArray = input => Array.isArray(input);\nconst isWeakMap = input => instanceOf(input, WeakMap);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isElement = input => instanceOf(input, Element);\nconst isTextNode = input => getConstructor(input) === Text;\nconst isEvent = input => instanceOf(input, Event);\nconst isKeyboardEvent = input => instanceOf(input, KeyboardEvent);\nconst isCue = input => instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);\nconst isTrack = input => instanceOf(input, TextTrack) || (!isNullOrUndefined(input) && isString(input.kind));\n\nconst isEmpty = input =>\n    isNullOrUndefined(input) ||\n    ((isString(input) || isArray(input) || isNodeList(input)) && !input.length) ||\n    (isObject(input) && !Object.keys(input).length);\n\nconst isUrl = input => {\n    // Accept a URL object\n    if (instanceOf(input, window.URL)) {\n        return true;\n    }\n\n    // Add the protocol if required\n    let string = input;\n    if (!input.startsWith('http://') || !input.startsWith('https://')) {\n        string = `http://${input}`;\n    }\n\n    try {\n        return !isEmpty(new URL(string).hostname);\n    } catch (e) {\n        return false;\n    }\n};\n\nexport default {\n    nullOrUndefined: isNullOrUndefined,\n    object: isObject,\n    number: isNumber,\n    string: isString,\n    boolean: isBoolean,\n    function: isFunction,\n    array: isArray,\n    weakMap: isWeakMap,\n    nodeList: isNodeList,\n    element: isElement,\n    textNode: isTextNode,\n    event: isEvent,\n    keyboardEvent: isKeyboardEvent,\n    cue: isCue,\n    track: isTrack,\n    url: isUrl,\n    empty: isEmpty,\n};\n","// ==========================================================================\n// Event utils\n// ==========================================================================\n\nimport is from './is';\n\n// Check for passive event listener support\n// https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n// https://www.youtube.com/watch?v=NPM6172J22g\nconst supportsPassiveListeners = (() => {\n    // Test via a getter in the options object to see if the passive property is accessed\n    let supported = false;\n    try {\n        const options = Object.defineProperty({}, 'passive', {\n            get() {\n                supported = true;\n                return null;\n            },\n        });\n        window.addEventListener('test', null, options);\n        window.removeEventListener('test', null, options);\n    } catch (e) {\n        // Do nothing\n    }\n\n    return supported;\n})();\n\n// Toggle event listener\nexport function toggleListener(element, event, callback, toggle = false, passive = true, capture = false) {\n    // Bail if no element, event, or callback\n    if (!element || !('addEventListener' in element) || is.empty(event) || !is.function(callback)) {\n        return;\n    }\n\n    // Allow multiple events\n    const events = event.split(' ');\n\n    // Build options\n    // Default to just the capture boolean for browsers with no passive listener support\n    let options = capture;\n\n    // If passive events listeners are supported\n    if (supportsPassiveListeners) {\n        options = {\n            // Whether the listener can be passive (i.e. default never prevented)\n            passive,\n            // Whether the listener is a capturing listener or not\n            capture,\n        };\n    }\n\n    // If a single node is passed, bind the event listener\n    events.forEach(type => {\n        if (this && this.eventListeners && toggle) {\n            // Cache event listener\n            this.eventListeners.push({ element, type, callback, options });\n        }\n\n        element[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n    });\n}\n\n// Bind event handler\nexport function on(element, events = '', callback, passive = true, capture = false) {\n    toggleListener.call(this, element, events, callback, true, passive, capture);\n}\n\n// Unbind event handler\nexport function off(element, events = '', callback, passive = true, capture = false) {\n    toggleListener.call(this, element, events, callback, false, passive, capture);\n}\n\n// Bind once-only event handler\nexport function once(element, events = '', callback, passive = true, capture = false) {\n    function onceCallback(...args) {\n        off(element, events, onceCallback, passive, capture);\n        callback.apply(this, args);\n    }\n\n    toggleListener.call(this, element, events, onceCallback, true, passive, capture);\n}\n\n// Trigger event\nexport function triggerEvent(element, type = '', bubbles = false, detail = {}) {\n    // Bail if no element\n    if (!is.element(element) || is.empty(type)) {\n        return;\n    }\n\n    // Create and dispatch the event\n    const event = new CustomEvent(type, {\n        bubbles,\n        detail: Object.assign({}, detail, {\n            plyr: this,\n        }),\n    });\n\n    // Dispatch the event\n    element.dispatchEvent(event);\n}\n\n// Unbind all cached event listeners\nexport function unbindListeners() {\n    if (this && this.eventListeners) {\n        this.eventListeners.forEach(item => {\n            const { element, type, callback, options } = item;\n            element.removeEventListener(type, callback, options);\n        });\n\n        this.eventListeners = [];\n    }\n}\n\n// Run method when / if player is ready\nexport function ready() {\n    return new Promise(\n        resolve => (this.ready ? setTimeout(resolve, 0) : on.call(this, this.elements.container, 'ready', resolve)),\n    ).then(() => {});\n}\n","// ==========================================================================\n// Element utils\n// ==========================================================================\n\nimport { toggleListener } from './events';\nimport is from './is';\n\n// Wrap an element\nexport function wrap(elements, wrapper) {\n    // Convert `elements` to an array, if necessary.\n    const targets = elements.length ? elements : [elements];\n\n    // Loops backwards to prevent having to clone the wrapper on the\n    // first element (see `child` below).\n    Array.from(targets)\n        .reverse()\n        .forEach((element, index) => {\n            const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n            // Cache the current parent and sibling.\n            const parent = element.parentNode;\n            const sibling = element.nextSibling;\n\n            // Wrap the element (is automatically removed from its current\n            // parent).\n            child.appendChild(element);\n\n            // If the element had a sibling, insert the wrapper before\n            // the sibling to maintain the HTML structure; otherwise, just\n            // append it to the parent.\n            if (sibling) {\n                parent.insertBefore(child, sibling);\n            } else {\n                parent.appendChild(child);\n            }\n        });\n}\n\n// Set attributes\nexport function setAttributes(element, attributes) {\n    if (!is.element(element) || is.empty(attributes)) {\n        return;\n    }\n\n    // Assume null and undefined attributes should be left out,\n    // Setting them would otherwise convert them to \"null\" and \"undefined\"\n    Object.entries(attributes)\n        .filter(([, value]) => !is.nullOrUndefined(value))\n        .forEach(([key, value]) => element.setAttribute(key, value));\n}\n\n// Create a DocumentFragment\nexport function createElement(type, attributes, text) {\n    // Create a new <element>\n    const element = document.createElement(type);\n\n    // Set all passed attributes\n    if (is.object(attributes)) {\n        setAttributes(element, attributes);\n    }\n\n    // Add text node\n    if (is.string(text)) {\n        element.innerText = text;\n    }\n\n    // Return built element\n    return element;\n}\n\n// Inaert an element after another\nexport function insertAfter(element, target) {\n    if (!is.element(element) || !is.element(target)) {\n        return;\n    }\n\n    target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n    if (!is.element(parent)) {\n        return;\n    }\n\n    parent.appendChild(createElement(type, attributes, text));\n}\n\n// Remove element(s)\nexport function removeElement(element) {\n    if (is.nodeList(element) || is.array(element)) {\n        Array.from(element).forEach(removeElement);\n        return;\n    }\n\n    if (!is.element(element) || !is.element(element.parentNode)) {\n        return;\n    }\n\n    element.parentNode.removeChild(element);\n}\n\n// Remove all child elements\nexport function emptyElement(element) {\n    if (!is.element(element)) {\n        return;\n    }\n\n    let { length } = element.childNodes;\n\n    while (length > 0) {\n        element.removeChild(element.lastChild);\n        length -= 1;\n    }\n}\n\n// Replace element\nexport function replaceElement(newChild, oldChild) {\n    if (!is.element(oldChild) || !is.element(oldChild.parentNode) || !is.element(newChild)) {\n        return null;\n    }\n\n    oldChild.parentNode.replaceChild(newChild, oldChild);\n\n    return newChild;\n}\n\n// Get an attribute object from a string selector\nexport function getAttributesFromSelector(sel, existingAttributes) {\n    // For example:\n    // '.test' to { class: 'test' }\n    // '#test' to { id: 'test' }\n    // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n    if (!is.string(sel) || is.empty(sel)) {\n        return {};\n    }\n\n    const attributes = {};\n    const existing = existingAttributes;\n\n    sel.split(',').forEach(s => {\n        // Remove whitespace\n        const selector = s.trim();\n        const className = selector.replace('.', '');\n        const stripped = selector.replace(/[[\\]]/g, '');\n\n        // Get the parts and value\n        const parts = stripped.split('=');\n        const key = parts[0];\n        const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n        // Get the first character\n        const start = selector.charAt(0);\n\n        switch (start) {\n            case '.':\n                // Add to existing classname\n                if (is.object(existing) && is.string(existing.class)) {\n                    existing.class += ` ${className}`;\n                }\n\n                attributes.class = className;\n                break;\n\n            case '#':\n                // ID selector\n                attributes.id = selector.replace('#', '');\n                break;\n\n            case '[':\n                // Attribute selector\n                attributes[key] = value;\n\n                break;\n\n            default:\n                break;\n        }\n    });\n\n    return attributes;\n}\n\n// Toggle hidden\nexport function toggleHidden(element, hidden) {\n    if (!is.element(element)) {\n        return;\n    }\n\n    let hide = hidden;\n\n    if (!is.boolean(hide)) {\n        hide = !element.hidden;\n    }\n\n    if (hide) {\n        element.setAttribute('hidden', '');\n    } else {\n        element.removeAttribute('hidden');\n    }\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\nexport function toggleClass(element, className, force) {\n    if (is.nodeList(element)) {\n        return Array.from(element).map(e => toggleClass(e, className, force));\n    }\n\n    if (is.element(element)) {\n        let method = 'toggle';\n        if (typeof force !== 'undefined') {\n            method = force ? 'add' : 'remove';\n        }\n\n        element.classList[method](className);\n        return element.classList.contains(className);\n    }\n\n    return false;\n}\n\n// Has class name\nexport function hasClass(element, className) {\n    return is.element(element) && element.classList.contains(className);\n}\n\n// Element matches selector\nexport function matches(element, selector) {\n    const prototype = { Element };\n\n    function match() {\n        return Array.from(document.querySelectorAll(selector)).includes(this);\n    }\n\n    const matches =\n        prototype.matches ||\n        prototype.webkitMatchesSelector ||\n        prototype.mozMatchesSelector ||\n        prototype.msMatchesSelector ||\n        match;\n\n    return matches.call(element, selector);\n}\n\n// Find all elements\nexport function getElements(selector) {\n    return this.elements.container.querySelectorAll(selector);\n}\n\n// Find a single element\nexport function getElement(selector) {\n    return this.elements.container.querySelector(selector);\n}\n\n// Trap focus inside container\nexport function trapFocus(element = null, toggle = false) {\n    if (!is.element(element)) {\n        return;\n    }\n\n    const focusable = getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n    const first = focusable[0];\n    const last = focusable[focusable.length - 1];\n\n    const trap = event => {\n        // Bail if not tab key or not fullscreen\n        if (event.key !== 'Tab' || event.keyCode !== 9) {\n            return;\n        }\n\n        // Get the current focused element\n        const focused = document.activeElement;\n\n        if (focused === last && !event.shiftKey) {\n            // Move focus to first element that can be tabbed if Shift isn't used\n            first.focus();\n            event.preventDefault();\n        } else if (focused === first && event.shiftKey) {\n            // Move focus to last element that can be tabbed if Shift is used\n            last.focus();\n            event.preventDefault();\n        }\n    };\n\n    toggleListener.call(this, this.elements.container, 'keydown', trap, toggle, false);\n}\n\n// Set focus and tab focus class\nexport function setFocus(element = null, tabFocus = false) {\n    if (!is.element(element)) {\n        return;\n    }\n\n    // Set regular focus\n    element.focus();\n\n    // If we want to mimic keyboard focus via tab\n    if (tabFocus) {\n        toggleClass(element, this.config.classNames.tabFocus);\n    }\n}\n","// ==========================================================================\n// Animation utils\n// ==========================================================================\n\nimport { toggleHidden } from './elements';\nimport is from './is';\n\nexport const transitionEndEvent = (() => {\n    const element = document.createElement('span');\n\n    const events = {\n        WebkitTransition: 'webkitTransitionEnd',\n        MozTransition: 'transitionend',\n        OTransition: 'oTransitionEnd otransitionend',\n        transition: 'transitionend',\n    };\n\n    const type = Object.keys(events).find(\n        event => element.style[event] !== undefined,\n    );\n\n    return is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element) {\n    setTimeout(() => {\n        try {\n            toggleHidden(element, true);\n            element.offsetHeight; // eslint-disable-line\n            toggleHidden(element, false);\n        } catch (e) {\n            // Do nothing\n        }\n    }, 0);\n}\n","// ==========================================================================\n// Browser sniffing\n// Unfortunately, due to mixed support, UA sniffing is required\n// ==========================================================================\n\nconst browser = {\n    isIE: /* @cc_on!@ */ false || !!document.documentMode,\n    isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n    isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n    isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n};\n\nexport default browser;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport { transitionEndEvent } from './utils/animation';\nimport browser from './utils/browser';\nimport { createElement } from './utils/elements';\nimport is from './utils/is';\n\n// Default codecs for checking mimetype support\nconst defaultCodecs = {\n    'audio/ogg': 'vorbis',\n    'audio/wav': '1',\n    'video/webm': 'vp8, vorbis',\n    'video/mp4': 'avc1.42E01E, mp4a.40.2',\n    'video/ogg': 'theora',\n};\n\n// Check for feature support\nconst support = {\n    // Basic support\n    audio: 'canPlayType' in document.createElement('audio'),\n    video: 'canPlayType' in document.createElement('video'),\n\n    // Check for support\n    // Basic functionality vs full UI\n    check(type, provider, playsinline) {\n        const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n        const api = support[type] || provider !== 'html5';\n        const ui = api && support.rangeInput && (type !== 'video' || !browser.isIPhone || canPlayInline);\n\n        return {\n            api,\n            ui,\n        };\n    },\n\n    // Picture-in-picture support\n    // Safari only currently\n    pip: (() => !browser.isIPhone && is.function(createElement('video').webkitSetPresentationMode))(),\n\n    // Airplay support\n    // Safari only currently\n    airplay: is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n    // Inline playback support\n    // https://webkit.org/blog/6784/new-video-policies-for-ios/\n    playsinline: 'playsInline' in document.createElement('video'),\n\n    // Check for mime type support against a player instance\n    // Credits: http://diveintohtml5.info/everything.html\n    // Related: http://www.leanbackplayer.com/test/h5mt.html\n    mime(inputType) {\n        const [mediaType] = inputType.split('/');\n        if (!this.isHTML5 || mediaType !== this.type) {\n            return false;\n        }\n\n        let type;\n        if (inputType && inputType.includes('codecs=')) {\n            // Use input directly\n            type = inputType;\n        } else if (inputType === 'audio/mpeg') {\n            // Skip codec\n            type = 'audio/mpeg;';\n        } else if (inputType in defaultCodecs) {\n            // Use codec\n            type = `${inputType}; codecs=\"${defaultCodecs[inputType]}\"`;\n        }\n\n        try {\n            return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));\n        } catch (err) {\n            return false;\n        }\n    },\n\n    // Check for textTracks support\n    textTracks: 'textTracks' in document.createElement('video'),\n\n    // <input type=\"range\"> Sliders\n    rangeInput: (() => {\n        const range = document.createElement('input');\n        range.type = 'range';\n        return range.type === 'range';\n    })(),\n\n    // Touch\n    // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n    touch: 'ontouchstart' in document.documentElement,\n\n    // Detect transitions support\n    transitions: transitionEndEvent !== false,\n\n    // Reduced motion iOS & MacOS setting\n    // https://webkit.org/blog/7551/responsive-design-for-motion/\n    reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport { removeElement } from './utils/elements';\nimport { triggerEvent } from './utils/events';\n\nconst html5 = {\n    getSources() {\n        if (!this.isHTML5) {\n            return [];\n        }\n\n        const sources = Array.from(this.media.querySelectorAll('source'));\n\n        // Filter out unsupported sources\n        return sources.filter(source => support.mime.call(this, source.getAttribute('type')));\n    },\n\n    // Get quality levels\n    getQualityOptions() {\n        // Get sizes from <source> elements\n        return html5.getSources\n            .call(this)\n            .map(source => Number(source.getAttribute('size')))\n            .filter(Boolean);\n    },\n\n    extend() {\n        if (!this.isHTML5) {\n            return;\n        }\n\n        const player = this;\n\n        // Quality\n        Object.defineProperty(player.media, 'quality', {\n            get() {\n                // Get sources\n                const sources = html5.getSources.call(player);\n                const source = sources.find(source => source.getAttribute('src') === player.source);\n\n                // Return size, if match is found\n                return source && Number(source.getAttribute('size'));\n            },\n            set(input) {\n                // Get sources\n                const sources = html5.getSources.call(player);\n\n                // Get first match for requested size\n                const source = sources.find(source => Number(source.getAttribute('size')) === input);\n\n                // No matching source found\n                if (!source) {\n                    return;\n                }\n\n                // Get current state\n                const { currentTime, paused, preload, readyState } = player.media;\n\n                // Set new source\n                player.media.src = source.getAttribute('src');\n\n                // Prevent loading if preload=\"none\" and the current source isn't loaded (#1044)\n                if (preload !== 'none' || readyState) {\n                    // Restore time\n                    player.once('loadedmetadata', () => {\n                        player.currentTime = currentTime;\n\n                        // Resume playing\n                        if (!paused) {\n                            player.play();\n                        }\n                    });\n\n                    // Load new source\n                    player.media.load();\n                }\n\n                // Trigger change event\n                triggerEvent.call(player, player.media, 'qualitychange', false, {\n                    quality: input,\n                });\n\n                // Save to storage\n                player.storage.set({ quality: input });\n            },\n        });\n    },\n\n    // Cancel current network requests\n    // See https://github.com/sampotts/plyr/issues/174\n    cancelRequests() {\n        if (!this.isHTML5) {\n            return;\n        }\n\n        // Remove child sources\n        removeElement(html5.getSources.call(this));\n\n        // Set blank video src attribute\n        // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n        // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n        this.media.setAttribute('src', this.config.blankVideo);\n\n        // Load the new empty source\n        // This will cancel existing requests\n        // See https://github.com/sampotts/plyr/issues/174\n        this.media.load();\n\n        // Debugging\n        this.debug.log('Cancelled network requests');\n    },\n};\n\nexport default html5;\n","// ==========================================================================\n// Array utils\n// ==========================================================================\n\nimport is from './is';\n\n// Remove duplicates in an array\nexport function dedupe(array) {\n    if (!is.array(array)) {\n        return array;\n    }\n\n    return array.filter((item, index) => array.indexOf(item) === index);\n}\n\n// Get the closest value in an array\nexport function closest(array, value) {\n    if (!is.array(array) || !array.length) {\n        return null;\n    }\n\n    return array.reduce((prev, curr) => (Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev));\n}\n","// ==========================================================================\n// Object utils\n// ==========================================================================\n\nimport is from './is';\n\n// Clone nested objects\nexport function cloneDeep(object) {\n    return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nexport function getDeep(object, path) {\n    return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nexport function extend(target = {}, ...sources) {\n    if (!sources.length) {\n        return target;\n    }\n\n    const source = sources.shift();\n\n    if (!is.object(source)) {\n        return target;\n    }\n\n    Object.keys(source).forEach(key => {\n        if (is.object(source[key])) {\n            if (!Object.keys(target).includes(key)) {\n                Object.assign(target, { [key]: {} });\n            }\n\n            extend(target[key], source[key]);\n        } else {\n            Object.assign(target, { [key]: source[key] });\n        }\n    });\n\n    return extend(target, ...sources);\n}\n","// ==========================================================================\n// String utils\n// ==========================================================================\n\nimport is from './is';\n\n// Generate a random ID\nexport function generateId(prefix) {\n    return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nexport function format(input, ...args) {\n    if (is.empty(input)) {\n        return input;\n    }\n\n    return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n}\n\n// Get percentage\nexport function getPercentage(current, max) {\n    if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n        return 0;\n    }\n\n    return (current / max * 100).toFixed(2);\n}\n\n// Replace all occurances of a string in a string\nexport function replaceAll(input = '', find = '', replace = '') {\n    return input.replace(\n        new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'),\n        replace.toString(),\n    );\n}\n\n// Convert to title case\nexport function toTitleCase(input = '') {\n    return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n}\n\n// Convert string to pascalCase\nexport function toPascalCase(input = '') {\n    let string = input.toString();\n\n    // Convert kebab case\n    string = replaceAll(string, '-', ' ');\n\n    // Convert snake case\n    string = replaceAll(string, '_', ' ');\n\n    // Convert to title case\n    string = toTitleCase(string);\n\n    // Convert to pascal case\n    return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nexport function toCamelCase(input = '') {\n    let string = input.toString();\n\n    // Convert to pascal case\n    string = toPascalCase(string);\n\n    // Convert first character to lowercase\n    return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nexport function stripHTML(source) {\n    const fragment = document.createDocumentFragment();\n    const element = document.createElement('div');\n    fragment.appendChild(element);\n    element.innerHTML = source;\n    return fragment.firstChild.innerText;\n}\n\n// Like outerHTML, but also works for DocumentFragment\nexport function getHTML(element) {\n    const wrapper = document.createElement('div');\n    wrapper.appendChild(element);\n    return wrapper.innerHTML;\n}\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport is from './is';\nimport { getDeep } from './objects';\nimport { replaceAll } from './strings';\n\nconst i18n = {\n    get(key = '', config = {}) {\n        if (is.empty(key) || is.empty(config)) {\n            return '';\n        }\n\n        let string = getDeep(config.i18n, key);\n\n        if (is.empty(string)) {\n            return '';\n        }\n\n        const replace = {\n            '{seektime}': config.seekTime,\n            '{title}': config.title,\n        };\n\n        Object.entries(replace).forEach(([key, value]) => {\n            string = replaceAll(string, key, value);\n        });\n\n        return string;\n    },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport is from './utils/is';\nimport { extend } from './utils/objects';\n\nclass Storage {\n    constructor(player) {\n        this.enabled = player.config.storage.enabled;\n        this.key = player.config.storage.key;\n    }\n\n    // Check for actual support (see if we can use it)\n    static get supported() {\n        try {\n            if (!('localStorage' in window)) {\n                return false;\n            }\n\n            const test = '___test';\n\n            // Try to use it (it might be disabled, e.g. user is in private mode)\n            // see: https://github.com/sampotts/plyr/issues/131\n            window.localStorage.setItem(test, test);\n            window.localStorage.removeItem(test);\n\n            return true;\n        } catch (e) {\n            return false;\n        }\n    }\n\n    get(key) {\n        if (!Storage.supported || !this.enabled) {\n            return null;\n        }\n\n        const store = window.localStorage.getItem(this.key);\n\n        if (is.empty(store)) {\n            return null;\n        }\n\n        const json = JSON.parse(store);\n\n        return is.string(key) && key.length ? json[key] : json;\n    }\n\n    set(object) {\n        // Bail if we don't have localStorage support or it's disabled\n        if (!Storage.supported || !this.enabled) {\n            return;\n        }\n\n        // Can only store objectst\n        if (!is.object(object)) {\n            return;\n        }\n\n        // Get current storage\n        let storage = this.get();\n\n        // Default to empty object\n        if (is.empty(storage)) {\n            storage = {};\n        }\n\n        // Update the working copy of the values\n        extend(storage, object);\n\n        // Update storage\n        window.localStorage.setItem(this.key, JSON.stringify(storage));\n    }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Fetch wrapper\n// Using XHR to avoid issues with older browsers\n// ==========================================================================\n\nexport default function fetch(url, responseType = 'text') {\n    return new Promise((resolve, reject) => {\n        try {\n            const request = new XMLHttpRequest();\n\n            // Check for CORS support\n            if (!('withCredentials' in request)) {\n                return;\n            }\n\n            request.addEventListener('load', () => {\n                if (responseType === 'text') {\n                    try {\n                        resolve(JSON.parse(request.responseText));\n                    } catch (e) {\n                        resolve(request.responseText);\n                    }\n                } else {\n                    resolve(request.response);\n                }\n            });\n\n            request.addEventListener('error', () => {\n                throw new Error(request.status);\n            });\n\n            request.open('GET', url, true);\n\n            // Set the required response type\n            request.responseType = responseType;\n\n            request.send();\n        } catch (e) {\n            reject(e);\n        }\n    });\n}\n","// ==========================================================================\n// Sprite loader\n// ==========================================================================\n\nimport Storage from '../storage';\nimport fetch from './fetch';\nimport is from './is';\n\n// Load an external SVG sprite\nexport default function loadSprite(url, id) {\n    if (!is.string(url)) {\n        return;\n    }\n\n    const prefix = 'cache';\n    const hasId = is.string(id);\n    let isCached = false;\n\n    const exists = () => document.getElementById(id) !== null;\n\n    const update = (container, data) => {\n        container.innerHTML = data;\n\n        // Check again incase of race condition\n        if (hasId && exists()) {\n            return;\n        }\n\n        // Inject the SVG to the body\n        document.body.insertAdjacentElement('afterbegin', container);\n    };\n\n    // Only load once if ID set\n    if (!hasId || !exists()) {\n        const useStorage = Storage.supported;\n\n        // Create container\n        const container = document.createElement('div');\n        container.setAttribute('hidden', '');\n\n        if (hasId) {\n            container.setAttribute('id', id);\n        }\n\n        // Check in cache\n        if (useStorage) {\n            const cached = window.localStorage.getItem(`${prefix}-${id}`);\n            isCached = cached !== null;\n\n            if (isCached) {\n                const data = JSON.parse(cached);\n                update(container, data.content);\n            }\n        }\n\n        // Get the sprite\n        fetch(url)\n            .then(result => {\n                if (is.empty(result)) {\n                    return;\n                }\n\n                if (useStorage) {\n                    window.localStorage.setItem(\n                        `${prefix}-${id}`,\n                        JSON.stringify({\n                            content: result,\n                        }),\n                    );\n                }\n\n                update(container, result);\n            })\n            .catch(() => {});\n    }\n}\n","// ==========================================================================\n// Time utils\n// ==========================================================================\n\nimport is from './is';\n\n// Time helpers\nexport const getHours = value => parseInt((value / 60 / 60) % 60, 10);\nexport const getMinutes = value => parseInt((value / 60) % 60, 10);\nexport const getSeconds = value => parseInt(value % 60, 10);\n\n// Format time to UI friendly string\nexport function formatTime(time = 0, displayHours = false, inverted = false) {\n    // Bail if the value isn't a number\n    if (!is.number(time)) {\n        return formatTime(null, displayHours, inverted);\n    }\n\n    // Format time component to add leading zero\n    const format = value => `0${value}`.slice(-2);\n\n    // Breakdown to hours, mins, secs\n    let hours = getHours(time);\n    const mins = getMinutes(time);\n    const secs = getSeconds(time);\n\n    // Do we need to display hours?\n    if (displayHours || hours > 0) {\n        hours = `${hours}:`;\n    } else {\n        hours = '';\n    }\n\n    // Render\n    return `${inverted && time > 0 ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n}\n","// ==========================================================================\n// Plyr controls\n// TODO: This needs to be split into smaller files and cleaned up\n// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport { createElement, emptyElement, getAttributesFromSelector, getElement, getElements, hasClass, matches, removeElement, setAttributes, setFocus, toggleClass, toggleHidden } from './utils/elements';\nimport { off, on } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { extend } from './utils/objects';\nimport { getPercentage, replaceAll, toCamelCase, toTitleCase } from './utils/strings';\nimport { formatTime, getHours } from './utils/time';\n\n// TODO: Don't export a massive object - break down and create class\nconst controls = {\n    // Get icon URL\n    getIconUrl() {\n        const url = new URL(this.config.iconUrl, window.location);\n        const cors = url.host !== window.location.host || (browser.isIE && !window.svg4everybody);\n\n        return {\n            url: this.config.iconUrl,\n            cors,\n        };\n    },\n\n    // Find the UI controls\n    findElements() {\n        try {\n            this.elements.controls = getElement.call(this, this.config.selectors.controls.wrapper);\n\n            // Buttons\n            this.elements.buttons = {\n                play: getElements.call(this, this.config.selectors.buttons.play),\n                pause: getElement.call(this, this.config.selectors.buttons.pause),\n                restart: getElement.call(this, this.config.selectors.buttons.restart),\n                rewind: getElement.call(this, this.config.selectors.buttons.rewind),\n                fastForward: getElement.call(this, this.config.selectors.buttons.fastForward),\n                mute: getElement.call(this, this.config.selectors.buttons.mute),\n                pip: getElement.call(this, this.config.selectors.buttons.pip),\n                airplay: getElement.call(this, this.config.selectors.buttons.airplay),\n                settings: getElement.call(this, this.config.selectors.buttons.settings),\n                captions: getElement.call(this, this.config.selectors.buttons.captions),\n                fullscreen: getElement.call(this, this.config.selectors.buttons.fullscreen),\n            };\n\n            // Progress\n            this.elements.progress = getElement.call(this, this.config.selectors.progress);\n\n            // Inputs\n            this.elements.inputs = {\n                seek: getElement.call(this, this.config.selectors.inputs.seek),\n                volume: getElement.call(this, this.config.selectors.inputs.volume),\n            };\n\n            // Display\n            this.elements.display = {\n                buffer: getElement.call(this, this.config.selectors.display.buffer),\n                currentTime: getElement.call(this, this.config.selectors.display.currentTime),\n                duration: getElement.call(this, this.config.selectors.display.duration),\n            };\n\n            // Seek tooltip\n            if (is.element(this.elements.progress)) {\n                this.elements.display.seekTooltip = this.elements.progress.querySelector(\n                    `.${this.config.classNames.tooltip}`,\n                );\n            }\n\n            return true;\n        } catch (error) {\n            // Log it\n            this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n            // Restore native video controls\n            this.toggleNativeControls(true);\n\n            return false;\n        }\n    },\n\n    // Create <svg> icon\n    createIcon(type, attributes) {\n        const namespace = 'http://www.w3.org/2000/svg';\n        const iconUrl = controls.getIconUrl.call(this);\n        const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n        // Create <svg>\n        const icon = document.createElementNS(namespace, 'svg');\n        setAttributes(\n            icon,\n            extend(attributes, {\n                role: 'presentation',\n                focusable: 'false',\n            }),\n        );\n\n        // Create the <use> to reference sprite\n        const use = document.createElementNS(namespace, 'use');\n        const path = `${iconPath}-${type}`;\n\n        // Set `href` attributes\n        // https://github.com/sampotts/plyr/issues/460\n        // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n        if ('href' in use) {\n            use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n        } else {\n            use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n        }\n\n        // Add <use> to <svg>\n        icon.appendChild(use);\n\n        return icon;\n    },\n\n    // Create hidden text label\n    createLabel(type, attr = {}) {\n        // Skip i18n for abbreviations and brand names\n        const universals = {\n            pip: 'PIP',\n            airplay: 'AirPlay',\n        };\n        const text = universals[type] || i18n.get(type, this.config);\n\n        const attributes = Object.assign({}, attr, {\n            class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' '),\n        });\n        return createElement('span', attributes, text);\n    },\n\n    // Create a badge\n    createBadge(text) {\n        if (is.empty(text)) {\n            return null;\n        }\n\n        const badge = createElement('span', {\n            class: this.config.classNames.menu.value,\n        });\n\n        badge.appendChild(\n            createElement(\n                'span',\n                {\n                    class: this.config.classNames.menu.badge,\n                },\n                text,\n            ),\n        );\n\n        return badge;\n    },\n\n    // Create a <button>\n    createButton(buttonType, attr) {\n        const button = createElement('button');\n        const attributes = Object.assign({}, attr);\n        let type = toCamelCase(buttonType);\n\n        let toggle = false;\n        let label;\n        let icon;\n        let labelPressed;\n        let iconPressed;\n\n        if (!('type' in attributes)) {\n            attributes.type = 'button';\n        }\n\n        if ('class' in attributes) {\n            if (!attributes.class.includes(this.config.classNames.control)) {\n                attributes.class += ` ${this.config.classNames.control}`;\n            }\n        } else {\n            attributes.class = this.config.classNames.control;\n        }\n\n        // Large play button\n        switch (buttonType) {\n            case 'play':\n                toggle = true;\n                label = 'play';\n                labelPressed = 'pause';\n                icon = 'play';\n                iconPressed = 'pause';\n                break;\n\n            case 'mute':\n                toggle = true;\n                label = 'mute';\n                labelPressed = 'unmute';\n                icon = 'volume';\n                iconPressed = 'muted';\n                break;\n\n            case 'captions':\n                toggle = true;\n                label = 'enableCaptions';\n                labelPressed = 'disableCaptions';\n                icon = 'captions-off';\n                iconPressed = 'captions-on';\n                break;\n\n            case 'fullscreen':\n                toggle = true;\n                label = 'enterFullscreen';\n                labelPressed = 'exitFullscreen';\n                icon = 'enter-fullscreen';\n                iconPressed = 'exit-fullscreen';\n                break;\n\n            case 'play-large':\n                attributes.class += ` ${this.config.classNames.control}--overlaid`;\n                type = 'play';\n                label = 'play';\n                icon = 'play';\n                break;\n\n            default:\n                label = type;\n                icon = buttonType;\n        }\n\n        // Setup toggle icon and labels\n        if (toggle) {\n            // Icon\n            button.appendChild(\n                controls.createIcon.call(this, iconPressed, {\n                    class: 'icon--pressed',\n                }),\n            );\n            button.appendChild(\n                controls.createIcon.call(this, icon, {\n                    class: 'icon--not-pressed',\n                }),\n            );\n\n            // Label/Tooltip\n            button.appendChild(\n                controls.createLabel.call(this, labelPressed, {\n                    class: 'label--pressed',\n                }),\n            );\n            button.appendChild(\n                controls.createLabel.call(this, label, {\n                    class: 'label--not-pressed',\n                }),\n            );\n        } else {\n            button.appendChild(controls.createIcon.call(this, icon));\n            button.appendChild(controls.createLabel.call(this, label));\n        }\n\n        // Merge attributes\n        extend(attributes, getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n        setAttributes(button, attributes);\n\n        // We have multiple play buttons\n        if (type === 'play') {\n            if (!is.array(this.elements.buttons[type])) {\n                this.elements.buttons[type] = [];\n            }\n\n            this.elements.buttons[type].push(button);\n        } else {\n            this.elements.buttons[type] = button;\n        }\n\n        return button;\n    },\n\n    // Create an <input type='range'>\n    createRange(type, attributes) {\n        // Seek input\n        const input = createElement(\n            'input',\n            extend(\n                getAttributesFromSelector(this.config.selectors.inputs[type]),\n                {\n                    type: 'range',\n                    min: 0,\n                    max: 100,\n                    step: 0.01,\n                    value: 0,\n                    autocomplete: 'off',\n                    // A11y fixes for https://github.com/sampotts/plyr/issues/905\n                    role: 'slider',\n                    'aria-label': i18n.get(type, this.config),\n                    'aria-valuemin': 0,\n                    'aria-valuemax': 100,\n                    'aria-valuenow': 0,\n                },\n                attributes,\n            ),\n        );\n\n        this.elements.inputs[type] = input;\n\n        // Set the fill for webkit now\n        controls.updateRangeFill.call(this, input);\n\n        return input;\n    },\n\n    // Create a <progress>\n    createProgress(type, attributes) {\n        const progress = createElement(\n            'progress',\n            extend(\n                getAttributesFromSelector(this.config.selectors.display[type]),\n                {\n                    min: 0,\n                    max: 100,\n                    value: 0,\n                    role: 'presentation',\n                    'aria-hidden': true,\n                },\n                attributes,\n            ),\n        );\n\n        // Create the label inside\n        if (type !== 'volume') {\n            progress.appendChild(createElement('span', null, '0'));\n\n            const suffixKey = {\n                played: 'played',\n                buffer: 'buffered',\n            }[type];\n            const suffix = suffixKey ? i18n.get(suffixKey, this.config) : '';\n\n            progress.innerText = `% ${suffix.toLowerCase()}`;\n        }\n\n        this.elements.display[type] = progress;\n\n        return progress;\n    },\n\n    // Create time display\n    createTime(type) {\n        const attributes = getAttributesFromSelector(this.config.selectors.display[type]);\n\n        const container = createElement(\n            'div',\n            extend(attributes, {\n                class: `${this.config.classNames.display.time} ${attributes.class ? attributes.class : ''}`.trim(),\n                'aria-label': i18n.get(type, this.config),\n            }),\n            '00:00',\n        );\n\n        // Reference for updates\n        this.elements.display[type] = container;\n\n        return container;\n    },\n\n    // Bind keyboard shortcuts for a menu item\n    // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n    bindMenuItemShortcuts(menuItem, type) {\n        // Navigate through menus via arrow keys and space\n        on(\n            menuItem,\n            'keydown keyup',\n            event => {\n                // We only care about space and ⬆️ ⬇️️ ➡️\n                if (![32, 38, 39, 40].includes(event.which)) {\n                    return;\n                }\n\n                // Prevent play / seek\n                event.preventDefault();\n                event.stopPropagation();\n\n                // We're just here to prevent the keydown bubbling\n                if (event.type === 'keydown') {\n                    return;\n                }\n\n                const isRadioButton = matches(menuItem, '[role=\"menuitemradio\"]');\n\n                // Show the respective menu\n                if (!isRadioButton && [32, 39].includes(event.which)) {\n                    controls.showMenuPanel.call(this, type, true);\n                } else {\n                    let target;\n\n                    if (event.which !== 32) {\n                        if (event.which === 40 || (isRadioButton && event.which === 39)) {\n                            target = menuItem.nextElementSibling;\n\n                            if (!is.element(target)) {\n                                target = menuItem.parentNode.firstElementChild;\n                            }\n                        } else {\n                            target = menuItem.previousElementSibling;\n\n                            if (!is.element(target)) {\n                                target = menuItem.parentNode.lastElementChild;\n                            }\n                        }\n\n                        setFocus.call(this, target, true);\n                    }\n                }\n            },\n            false,\n        );\n\n        // Enter will fire a `click` event but we still need to manage focus\n        // So we bind to keyup which fires after and set focus here\n        on(menuItem, 'keyup', event => {\n            if (event.which !== 13) {\n                return;\n            }\n\n            controls.focusFirstMenuItem.call(this, null, true);\n        });\n    },\n\n    // Create a settings menu item\n    createMenuItem({ value, list, type, title, badge = null, checked = false }) {\n        const attributes = getAttributesFromSelector(this.config.selectors.inputs[type]);\n\n        const menuItem = createElement(\n            'button',\n            extend(attributes, {\n                type: 'button',\n                role: 'menuitemradio',\n                class: `${this.config.classNames.control} ${attributes.class ? attributes.class : ''}`.trim(),\n                'aria-checked': checked,\n                value,\n            }),\n        );\n\n        const flex = createElement('span');\n\n        // We have to set as HTML incase of special characters\n        flex.innerHTML = title;\n\n        if (is.element(badge)) {\n            flex.appendChild(badge);\n        }\n\n        menuItem.appendChild(flex);\n\n        // Replicate radio button behaviour\n        Object.defineProperty(menuItem, 'checked', {\n            enumerable: true,\n            get() {\n                return menuItem.getAttribute('aria-checked') === 'true';\n            },\n            set(checked) {\n                // Ensure exclusivity\n                if (checked) {\n                    Array.from(menuItem.parentNode.children)\n                        .filter(node => matches(node, '[role=\"menuitemradio\"]'))\n                        .forEach(node => node.setAttribute('aria-checked', 'false'));\n                }\n\n                menuItem.setAttribute('aria-checked', checked ? 'true' : 'false');\n            },\n        });\n\n        this.listeners.bind(\n            menuItem,\n            'click keyup',\n            event => {\n                if (is.keyboardEvent(event) && event.which !== 32) {\n                    return;\n                }\n\n                event.preventDefault();\n                event.stopPropagation();\n\n                menuItem.checked = true;\n\n                switch (type) {\n                    case 'language':\n                        this.currentTrack = Number(value);\n                        break;\n\n                    case 'quality':\n                        this.quality = value;\n                        break;\n\n                    case 'speed':\n                        this.speed = parseFloat(value);\n                        break;\n\n                    default:\n                        break;\n                }\n\n                controls.showMenuPanel.call(this, 'home', is.keyboardEvent(event));\n            },\n            type,\n            false,\n        );\n\n        controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n        list.appendChild(menuItem);\n    },\n\n    // Format a time for display\n    formatTime(time = 0, inverted = false) {\n        // Bail if the value isn't a number\n        if (!is.number(time)) {\n            return time;\n        }\n\n        // Always display hours if duration is over an hour\n        const forceHours = getHours(this.duration) > 0;\n\n        return formatTime(time, forceHours, inverted);\n    },\n\n    // Update the displayed time\n    updateTimeDisplay(target = null, time = 0, inverted = false) {\n        // Bail if there's no element to display or the value isn't a number\n        if (!is.element(target) || !is.number(time)) {\n            return;\n        }\n\n        // eslint-disable-next-line no-param-reassign\n        target.innerText = controls.formatTime(time, inverted);\n    },\n\n    // Update volume UI and storage\n    updateVolume() {\n        if (!this.supported.ui) {\n            return;\n        }\n\n        // Update range\n        if (is.element(this.elements.inputs.volume)) {\n            controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n        }\n\n        // Update mute state\n        if (is.element(this.elements.buttons.mute)) {\n            this.elements.buttons.mute.pressed = this.muted || this.volume === 0;\n        }\n    },\n\n    // Update seek value and lower fill\n    setRange(target, value = 0) {\n        if (!is.element(target)) {\n            return;\n        }\n\n        // eslint-disable-next-line\n        target.value = value;\n\n        // Webkit range fill\n        controls.updateRangeFill.call(this, target);\n    },\n\n    // Update <progress> elements\n    updateProgress(event) {\n        if (!this.supported.ui || !is.event(event)) {\n            return;\n        }\n\n        let value = 0;\n\n        const setProgress = (target, input) => {\n            const value = is.number(input) ? input : 0;\n            const progress = is.element(target) ? target : this.elements.display.buffer;\n\n            // Update value and label\n            if (is.element(progress)) {\n                progress.value = value;\n\n                // Update text label inside\n                const label = progress.getElementsByTagName('span')[0];\n                if (is.element(label)) {\n                    label.childNodes[0].nodeValue = value;\n                }\n            }\n        };\n\n        if (event) {\n            switch (event.type) {\n                // Video playing\n                case 'timeupdate':\n                case 'seeking':\n                case 'seeked':\n                    value = getPercentage(this.currentTime, this.duration);\n\n                    // Set seek range value only if it's a 'natural' time event\n                    if (event.type === 'timeupdate') {\n                        controls.setRange.call(this, this.elements.inputs.seek, value);\n                    }\n\n                    break;\n\n                // Check buffer status\n                case 'playing':\n                case 'progress':\n                    setProgress(this.elements.display.buffer, this.buffered * 100);\n\n                    break;\n\n                default:\n                    break;\n            }\n        }\n    },\n\n    // Webkit polyfill for lower fill range\n    updateRangeFill(target) {\n        // Get range from event if event passed\n        const range = is.event(target) ? target.target : target;\n\n        // Needs to be a valid <input type='range'>\n        if (!is.element(range) || range.getAttribute('type') !== 'range') {\n            return;\n        }\n\n        // Set aria values for https://github.com/sampotts/plyr/issues/905\n        if (matches(range, this.config.selectors.inputs.seek)) {\n            range.setAttribute('aria-valuenow', this.currentTime);\n            const currentTime = controls.formatTime(this.currentTime);\n            const duration = controls.formatTime(this.duration);\n            const format = i18n.get('seekLabel', this.config);\n            range.setAttribute(\n                'aria-valuetext',\n                format.replace('{currentTime}', currentTime).replace('{duration}', duration),\n            );\n        } else if (matches(range, this.config.selectors.inputs.volume)) {\n            const percent = range.value * 100;\n            range.setAttribute('aria-valuenow', percent);\n            range.setAttribute('aria-valuetext', `${percent.toFixed(1)}%`);\n        } else {\n            range.setAttribute('aria-valuenow', range.value);\n        }\n\n        // WebKit only\n        if (!browser.isWebkit) {\n            return;\n        }\n\n        // Set CSS custom property\n        range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n    },\n\n    // Update hover tooltip for seeking\n    updateSeekTooltip(event) {\n        // Bail if setting not true\n        if (\n            !this.config.tooltips.seek ||\n            !is.element(this.elements.inputs.seek) ||\n            !is.element(this.elements.display.seekTooltip) ||\n            this.duration === 0\n        ) {\n            return;\n        }\n\n        // Calculate percentage\n        let percent = 0;\n        const clientRect = this.elements.progress.getBoundingClientRect();\n        const visible = `${this.config.classNames.tooltip}--visible`;\n\n        const toggle = toggle => {\n            toggleClass(this.elements.display.seekTooltip, visible, toggle);\n        };\n\n        // Hide on touch\n        if (this.touch) {\n            toggle(false);\n            return;\n        }\n\n        // Determine percentage, if already visible\n        if (is.event(event)) {\n            percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n        } else if (hasClass(this.elements.display.seekTooltip, visible)) {\n            percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n        } else {\n            return;\n        }\n\n        // Set bounds\n        if (percent < 0) {\n            percent = 0;\n        } else if (percent > 100) {\n            percent = 100;\n        }\n\n        // Display the time a click would seek to\n        controls.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n        // Set position\n        this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n        // Show/hide the tooltip\n        // If the event is a moues in/out and percentage is inside bounds\n        if (is.event(event) && ['mouseenter', 'mouseleave'].includes(event.type)) {\n            toggle(event.type === 'mouseenter');\n        }\n    },\n\n    // Handle time change event\n    timeUpdate(event) {\n        // Only invert if only one time element is displayed and used for both duration and currentTime\n        const invert = !is.element(this.elements.display.duration) && this.config.invertTime;\n\n        // Duration\n        controls.updateTimeDisplay.call(\n            this,\n            this.elements.display.currentTime,\n            invert ? this.duration - this.currentTime : this.currentTime,\n            invert,\n        );\n\n        // Ignore updates while seeking\n        if (event && event.type === 'timeupdate' && this.media.seeking) {\n            return;\n        }\n\n        // Playing progress\n        controls.updateProgress.call(this, event);\n    },\n\n    // Show the duration on metadataloaded or durationchange events\n    durationUpdate() {\n        // Bail if no UI or durationchange event triggered after playing/seek when invertTime is false\n        if (!this.supported.ui || (!this.config.invertTime && this.currentTime)) {\n            return;\n        }\n\n        // If duration is the 2**32 (shaka), Infinity (HLS), DASH-IF (Number.MAX_SAFE_INTEGER || Number.MAX_VALUE) indicating live we hide the currentTime and progressbar.\n        // https://github.com/video-dev/hls.js/blob/5820d29d3c4c8a46e8b75f1e3afa3e68c1a9a2db/src/controller/buffer-controller.js#L415\n        // https://github.com/google/shaka-player/blob/4d889054631f4e1cf0fbd80ddd2b71887c02e232/lib/media/streaming_engine.js#L1062\n        // https://github.com/Dash-Industry-Forum/dash.js/blob/69859f51b969645b234666800d4cb596d89c602d/src/dash/models/DashManifestModel.js#L338\n        if (this.duration >= 2 ** 32) {\n            toggleHidden(this.elements.display.currentTime, true);\n            toggleHidden(this.elements.progress, true);\n            return;\n        }\n\n        // Update ARIA values\n        if (is.element(this.elements.inputs.seek)) {\n            this.elements.inputs.seek.setAttribute('aria-valuemax', this.duration);\n        }\n\n        // If there's a spot to display duration\n        const hasDuration = is.element(this.elements.display.duration);\n\n        // If there's only one time display, display duration there\n        if (!hasDuration && this.config.displayDuration && this.paused) {\n            controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n        }\n\n        // If there's a duration element, update content\n        if (hasDuration) {\n            controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n        }\n\n        // Update the tooltip (if visible)\n        controls.updateSeekTooltip.call(this);\n    },\n\n    // Hide/show a tab\n    toggleMenuButton(setting, toggle) {\n        toggleHidden(this.elements.settings.buttons[setting], !toggle);\n    },\n\n    // Update the selected setting\n    updateSetting(setting, container, input) {\n        const pane = this.elements.settings.panels[setting];\n        let value = null;\n        let list = container;\n\n        if (setting === 'captions') {\n            value = this.currentTrack;\n        } else {\n            value = !is.empty(input) ? input : this[setting];\n\n            // Get default\n            if (is.empty(value)) {\n                value = this.config[setting].default;\n            }\n\n            // Unsupported value\n            if (!is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n                this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n                return;\n            }\n\n            // Disabled value\n            if (!this.config[setting].options.includes(value)) {\n                this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n                return;\n            }\n        }\n\n        // Get the list if we need to\n        if (!is.element(list)) {\n            list = pane && pane.querySelector('[role=\"menu\"]');\n        }\n\n        // If there's no list it means it's not been rendered...\n        if (!is.element(list)) {\n            return;\n        }\n\n        // Update the label\n        const label = this.elements.settings.buttons[setting].querySelector(`.${this.config.classNames.menu.value}`);\n        label.innerHTML = controls.getLabel.call(this, setting, value);\n\n        // Find the radio option and check it\n        const target = list && list.querySelector(`[value=\"${value}\"]`);\n\n        if (is.element(target)) {\n            target.checked = true;\n        }\n    },\n\n    // Translate a value into a nice label\n    getLabel(setting, value) {\n        switch (setting) {\n            case 'speed':\n                return value === 1 ? i18n.get('normal', this.config) : `${value}&times;`;\n\n            case 'quality':\n                if (is.number(value)) {\n                    const label = i18n.get(`qualityLabel.${value}`, this.config);\n\n                    if (!label.length) {\n                        return `${value}p`;\n                    }\n\n                    return label;\n                }\n\n                return toTitleCase(value);\n\n            case 'captions':\n                return captions.getLabel.call(this);\n\n            default:\n                return null;\n        }\n    },\n\n    // Set the quality menu\n    setQualityMenu(options) {\n        // Menu required\n        if (!is.element(this.elements.settings.panels.quality)) {\n            return;\n        }\n\n        const type = 'quality';\n        const list = this.elements.settings.panels.quality.querySelector('[role=\"menu\"]');\n\n        // Set options if passed and filter based on uniqueness and config\n        if (is.array(options)) {\n            this.options.quality = dedupe(options).filter(quality => this.config.quality.options.includes(quality));\n        }\n\n        // Toggle the pane and tab\n        const toggle = !is.empty(this.options.quality) && this.options.quality.length > 1;\n        controls.toggleMenuButton.call(this, type, toggle);\n\n        // Empty the menu\n        emptyElement(list);\n\n        // Check if we need to toggle the parent\n        controls.checkMenu.call(this);\n\n        // If we're hiding, nothing more to do\n        if (!toggle) {\n            return;\n        }\n\n        // Get the badge HTML for HD, 4K etc\n        const getBadge = quality => {\n            const label = i18n.get(`qualityBadge.${quality}`, this.config);\n\n            if (!label.length) {\n                return null;\n            }\n\n            return controls.createBadge.call(this, label);\n        };\n\n        // Sort options by the config and then render options\n        this.options.quality\n            .sort((a, b) => {\n                const sorting = this.config.quality.options;\n                return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n            })\n            .forEach(quality => {\n                controls.createMenuItem.call(this, {\n                    value: quality,\n                    list,\n                    type,\n                    title: controls.getLabel.call(this, 'quality', quality),\n                    badge: getBadge(quality),\n                });\n            });\n\n        controls.updateSetting.call(this, type, list);\n    },\n\n    // Set the looping options\n    /* setLoopMenu() {\n        // Menu required\n        if (!is.element(this.elements.settings.panels.loop)) {\n            return;\n        }\n\n        const options = ['start', 'end', 'all', 'reset'];\n        const list = this.elements.settings.panels.loop.querySelector('[role=\"menu\"]');\n\n        // Show the pane and tab\n        toggleHidden(this.elements.settings.buttons.loop, false);\n        toggleHidden(this.elements.settings.panels.loop, false);\n\n        // Toggle the pane and tab\n        const toggle = !is.empty(this.loop.options);\n        controls.toggleMenuButton.call(this, 'loop', toggle);\n\n        // Empty the menu\n        emptyElement(list);\n\n        options.forEach(option => {\n            const item = createElement('li');\n\n            const button = createElement(\n                'button',\n                extend(getAttributesFromSelector(this.config.selectors.buttons.loop), {\n                    type: 'button',\n                    class: this.config.classNames.control,\n                    'data-plyr-loop-action': option,\n                }),\n                i18n.get(option, this.config)\n            );\n\n            if (['start', 'end'].includes(option)) {\n                const badge = controls.createBadge.call(this, '00:00');\n                button.appendChild(badge);\n            }\n\n            item.appendChild(button);\n            list.appendChild(item);\n        });\n    }, */\n\n    // Get current selected caption language\n    // TODO: rework this to user the getter in the API?\n\n    // Set a list of available captions languages\n    setCaptionsMenu() {\n        // Menu required\n        if (!is.element(this.elements.settings.panels.captions)) {\n            return;\n        }\n\n        // TODO: Captions or language? Currently it's mixed\n        const type = 'captions';\n        const list = this.elements.settings.panels.captions.querySelector('[role=\"menu\"]');\n        const tracks = captions.getTracks.call(this);\n        const toggle = Boolean(tracks.length);\n\n        // Toggle the pane and tab\n        controls.toggleMenuButton.call(this, type, toggle);\n\n        // Empty the menu\n        emptyElement(list);\n\n        // Check if we need to toggle the parent\n        controls.checkMenu.call(this);\n\n        // If there's no captions, bail\n        if (!toggle) {\n            return;\n        }\n\n        // Generate options data\n        const options = tracks.map((track, value) => ({\n            value,\n            checked: this.captions.toggled && this.currentTrack === value,\n            title: captions.getLabel.call(this, track),\n            badge: track.language && controls.createBadge.call(this, track.language.toUpperCase()),\n            list,\n            type: 'language',\n        }));\n\n        // Add the \"Disabled\" option to turn off captions\n        options.unshift({\n            value: -1,\n            checked: !this.captions.toggled,\n            title: i18n.get('disabled', this.config),\n            list,\n            type: 'language',\n        });\n\n        // Generate options\n        options.forEach(controls.createMenuItem.bind(this));\n\n        controls.updateSetting.call(this, type, list);\n    },\n\n    // Set a list of available captions languages\n    setSpeedMenu(options) {\n        // Menu required\n        if (!is.element(this.elements.settings.panels.speed)) {\n            return;\n        }\n\n        const type = 'speed';\n        const list = this.elements.settings.panels.speed.querySelector('[role=\"menu\"]');\n\n        // Set the speed options\n        if (is.array(options)) {\n            this.options.speed = options;\n        } else if (this.isHTML5 || this.isVimeo) {\n            this.options.speed = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\n        }\n\n        // Set options if passed and filter based on config\n        this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n        // Toggle the pane and tab\n        const toggle = !is.empty(this.options.speed) && this.options.speed.length > 1;\n        controls.toggleMenuButton.call(this, type, toggle);\n\n        // Empty the menu\n        emptyElement(list);\n\n        // Check if we need to toggle the parent\n        controls.checkMenu.call(this);\n\n        // If we're hiding, nothing more to do\n        if (!toggle) {\n            return;\n        }\n\n        // Create items\n        this.options.speed.forEach(speed => {\n            controls.createMenuItem.call(this, {\n                value: speed,\n                list,\n                type,\n                title: controls.getLabel.call(this, 'speed', speed),\n            });\n        });\n\n        controls.updateSetting.call(this, type, list);\n    },\n\n    // Check if we need to hide/show the settings menu\n    checkMenu() {\n        const { buttons } = this.elements.settings;\n        const visible = !is.empty(buttons) && Object.values(buttons).some(button => !button.hidden);\n\n        toggleHidden(this.elements.settings.menu, !visible);\n    },\n\n    // Focus the first menu item in a given (or visible) menu\n    focusFirstMenuItem(pane, tabFocus = false) {\n        if (this.elements.settings.popup.hidden) {\n            return;\n        }\n\n        let target = pane;\n\n        if (!is.element(target)) {\n            target = Object.values(this.elements.settings.panels).find(pane => !pane.hidden);\n        }\n\n        const firstItem = target.querySelector('[role^=\"menuitem\"]');\n\n        setFocus.call(this, firstItem, tabFocus);\n    },\n\n    // Show/hide menu\n    toggleMenu(input) {\n        const { popup } = this.elements.settings;\n        const button = this.elements.buttons.settings;\n\n        // Menu and button are required\n        if (!is.element(popup) || !is.element(button)) {\n            return;\n        }\n\n        // True toggle by default\n        const { hidden } = popup;\n        let show = hidden;\n\n        if (is.boolean(input)) {\n            show = input;\n        } else if (is.keyboardEvent(input) && input.which === 27) {\n            show = false;\n        } else if (is.event(input)) {\n            const isMenuItem = popup.contains(input.target);\n\n            // If the click was inside the menu or if the click\n            // wasn't the button or menu item and we're trying to\n            // show the menu (a doc click shouldn't show the menu)\n            if (isMenuItem || (!isMenuItem && input.target !== button && show)) {\n                return;\n            }\n        }\n\n        // Set button attributes\n        button.setAttribute('aria-expanded', show);\n\n        // Show the actual popup\n        toggleHidden(popup, !show);\n\n        // Add class hook\n        toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n        // Focus the first item if key interaction\n        if (show && is.keyboardEvent(input)) {\n            controls.focusFirstMenuItem.call(this, null, true);\n        } else if (!show && !hidden) {\n            // If closing, re-focus the button\n            setFocus.call(this, button, is.keyboardEvent(input));\n        }\n    },\n\n    // Get the natural size of a menu panel\n    getMenuSize(tab) {\n        const clone = tab.cloneNode(true);\n        clone.style.position = 'absolute';\n        clone.style.opacity = 0;\n        clone.removeAttribute('hidden');\n\n        // Append to parent so we get the \"real\" size\n        tab.parentNode.appendChild(clone);\n\n        // Get the sizes before we remove\n        const width = clone.scrollWidth;\n        const height = clone.scrollHeight;\n\n        // Remove from the DOM\n        removeElement(clone);\n\n        return {\n            width,\n            height,\n        };\n    },\n\n    // Show a panel in the menu\n    showMenuPanel(type = '', tabFocus = false) {\n        const target = document.getElementById(`plyr-settings-${this.id}-${type}`);\n\n        // Nothing to show, bail\n        if (!is.element(target)) {\n            return;\n        }\n\n        // Hide all other panels\n        const container = target.parentNode;\n        const current = Array.from(container.children).find(node => !node.hidden);\n\n        // If we can do fancy animations, we'll animate the height/width\n        if (support.transitions && !support.reducedMotion) {\n            // Set the current width as a base\n            container.style.width = `${current.scrollWidth}px`;\n            container.style.height = `${current.scrollHeight}px`;\n\n            // Get potential sizes\n            const size = controls.getMenuSize.call(this, target);\n\n            // Restore auto height/width\n            const restore = event => {\n                // We're only bothered about height and width on the container\n                if (event.target !== container || !['width', 'height'].includes(event.propertyName)) {\n                    return;\n                }\n\n                // Revert back to auto\n                container.style.width = '';\n                container.style.height = '';\n\n                // Only listen once\n                off.call(this, container, transitionEndEvent, restore);\n            };\n\n            // Listen for the transition finishing and restore auto height/width\n            on.call(this, container, transitionEndEvent, restore);\n\n            // Set dimensions to target\n            container.style.width = `${size.width}px`;\n            container.style.height = `${size.height}px`;\n        }\n\n        // Set attributes on current tab\n        toggleHidden(current, true);\n\n        // Set attributes on target\n        toggleHidden(target, false);\n\n        // Focus the first item\n        controls.focusFirstMenuItem.call(this, target, tabFocus);\n    },\n\n    // Build the default HTML\n    // TODO: Set order based on order in the config.controls array?\n    create(data) {\n        // Create the container\n        const container = createElement('div', getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n        // Restart button\n        if (this.config.controls.includes('restart')) {\n            container.appendChild(controls.createButton.call(this, 'restart'));\n        }\n\n        // Rewind button\n        if (this.config.controls.includes('rewind')) {\n            container.appendChild(controls.createButton.call(this, 'rewind'));\n        }\n\n        // Play/Pause button\n        if (this.config.controls.includes('play')) {\n            container.appendChild(controls.createButton.call(this, 'play'));\n        }\n\n        // Fast forward button\n        if (this.config.controls.includes('fast-forward')) {\n            container.appendChild(controls.createButton.call(this, 'fast-forward'));\n        }\n\n        // Progress\n        if (this.config.controls.includes('progress')) {\n            const progress = createElement('div', getAttributesFromSelector(this.config.selectors.progress));\n\n            // Seek range slider\n            progress.appendChild(\n                controls.createRange.call(this, 'seek', {\n                    id: `plyr-seek-${data.id}`,\n                }),\n            );\n\n            // Buffer progress\n            progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n            // TODO: Add loop display indicator\n\n            // Seek tooltip\n            if (this.config.tooltips.seek) {\n                const tooltip = createElement(\n                    'span',\n                    {\n                        class: this.config.classNames.tooltip,\n                    },\n                    '00:00',\n                );\n\n                progress.appendChild(tooltip);\n                this.elements.display.seekTooltip = tooltip;\n            }\n\n            this.elements.progress = progress;\n            container.appendChild(this.elements.progress);\n        }\n\n        // Media current time display\n        if (this.config.controls.includes('current-time')) {\n            container.appendChild(controls.createTime.call(this, 'currentTime'));\n        }\n\n        // Media duration display\n        if (this.config.controls.includes('duration')) {\n            container.appendChild(controls.createTime.call(this, 'duration'));\n        }\n\n        // Volume controls\n        if (this.config.controls.includes('mute') || this.config.controls.includes('volume')) {\n            const volume = createElement('div', {\n                class: 'plyr__volume',\n            });\n\n            // Toggle mute button\n            if (this.config.controls.includes('mute')) {\n                volume.appendChild(controls.createButton.call(this, 'mute'));\n            }\n\n            // Volume range control\n            if (this.config.controls.includes('volume')) {\n                // Set the attributes\n                const attributes = {\n                    max: 1,\n                    step: 0.05,\n                    value: this.config.volume,\n                };\n\n                // Create the volume range slider\n                volume.appendChild(\n                    controls.createRange.call(\n                        this,\n                        'volume',\n                        extend(attributes, {\n                            id: `plyr-volume-${data.id}`,\n                        }),\n                    ),\n                );\n\n                this.elements.volume = volume;\n            }\n\n            container.appendChild(volume);\n        }\n\n        // Toggle captions button\n        if (this.config.controls.includes('captions')) {\n            container.appendChild(controls.createButton.call(this, 'captions'));\n        }\n\n        // Settings button / menu\n        if (this.config.controls.includes('settings') && !is.empty(this.config.settings)) {\n            const control = createElement('div', {\n                class: 'plyr__menu',\n                hidden: '',\n            });\n\n            control.appendChild(\n                controls.createButton.call(this, 'settings', {\n                    'aria-haspopup': true,\n                    'aria-controls': `plyr-settings-${data.id}`,\n                    'aria-expanded': false,\n                }),\n            );\n\n            const popup = createElement('div', {\n                class: 'plyr__menu__container',\n                id: `plyr-settings-${data.id}`,\n                hidden: '',\n            });\n\n            const inner = createElement('div');\n\n            const home = createElement('div', {\n                id: `plyr-settings-${data.id}-home`,\n            });\n\n            // Create the menu\n            const menu = createElement('div', {\n                role: 'menu',\n            });\n\n            home.appendChild(menu);\n            inner.appendChild(home);\n            this.elements.settings.panels.home = home;\n\n            // Build the menu items\n            this.config.settings.forEach(type => {\n                // TODO: bundle this with the createMenuItem helper and bindings\n                const menuItem = createElement(\n                    'button',\n                    extend(getAttributesFromSelector(this.config.selectors.buttons.settings), {\n                        type: 'button',\n                        class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n                        role: 'menuitem',\n                        'aria-haspopup': true,\n                        hidden: '',\n                    }),\n                );\n\n                // Bind menu shortcuts for keyboard users\n                controls.bindMenuItemShortcuts.call(this, menuItem, type);\n\n                // Show menu on click\n                on(menuItem, 'click', () => {\n                    controls.showMenuPanel.call(this, type, false);\n                });\n\n                const flex = createElement('span', null, i18n.get(type, this.config));\n\n                const value = createElement('span', {\n                    class: this.config.classNames.menu.value,\n                });\n\n                // Speed contains HTML entities\n                value.innerHTML = data[type];\n\n                flex.appendChild(value);\n                menuItem.appendChild(flex);\n                menu.appendChild(menuItem);\n\n                // Build the panes\n                const pane = createElement('div', {\n                    id: `plyr-settings-${data.id}-${type}`,\n                    hidden: '',\n                });\n\n                // Back button\n                const backButton = createElement('button', {\n                    type: 'button',\n                    class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n                });\n\n                // Visible label\n                backButton.appendChild(\n                    createElement(\n                        'span',\n                        {\n                            'aria-hidden': true,\n                        },\n                        i18n.get(type, this.config),\n                    ),\n                );\n\n                // Screen reader label\n                backButton.appendChild(\n                    createElement(\n                        'span',\n                        {\n                            class: this.config.classNames.hidden,\n                        },\n                        i18n.get('menuBack', this.config),\n                    ),\n                );\n\n                // Go back via keyboard\n                on(\n                    pane,\n                    'keydown',\n                    event => {\n                        // We only care about <-\n                        if (event.which !== 37) {\n                            return;\n                        }\n\n                        // Prevent seek\n                        event.preventDefault();\n                        event.stopPropagation();\n\n                        // Show the respective menu\n                        controls.showMenuPanel.call(this, 'home', true);\n                    },\n                    false,\n                );\n\n                // Go back via button click\n                on(backButton, 'click', () => {\n                    controls.showMenuPanel.call(this, 'home', false);\n                });\n\n                // Add to pane\n                pane.appendChild(backButton);\n\n                // Menu\n                pane.appendChild(\n                    createElement('div', {\n                        role: 'menu',\n                    }),\n                );\n\n                inner.appendChild(pane);\n\n                this.elements.settings.buttons[type] = menuItem;\n                this.elements.settings.panels[type] = pane;\n            });\n\n            popup.appendChild(inner);\n            control.appendChild(popup);\n            container.appendChild(control);\n\n            this.elements.settings.popup = popup;\n            this.elements.settings.menu = control;\n        }\n\n        // Picture in picture button\n        if (this.config.controls.includes('pip') && support.pip) {\n            container.appendChild(controls.createButton.call(this, 'pip'));\n        }\n\n        // Airplay button\n        if (this.config.controls.includes('airplay') && support.airplay) {\n            container.appendChild(controls.createButton.call(this, 'airplay'));\n        }\n\n        // Toggle fullscreen button\n        if (this.config.controls.includes('fullscreen')) {\n            container.appendChild(controls.createButton.call(this, 'fullscreen'));\n        }\n\n        // Larger overlaid play button\n        if (this.config.controls.includes('play-large')) {\n            this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n        }\n\n        this.elements.controls = container;\n\n        // Set available quality levels\n        if (this.isHTML5) {\n            controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n        }\n\n        controls.setSpeedMenu.call(this);\n\n        return container;\n    },\n\n    // Insert controls\n    inject() {\n        // Sprite\n        if (this.config.loadSprite) {\n            const icon = controls.getIconUrl.call(this);\n\n            // Only load external sprite using AJAX\n            if (icon.cors) {\n                loadSprite(icon.url, 'sprite-plyr');\n            }\n        }\n\n        // Create a unique ID\n        this.id = Math.floor(Math.random() * 10000);\n\n        // Null by default\n        let container = null;\n        this.elements.controls = null;\n\n        // Set template properties\n        const props = {\n            id: this.id,\n            seektime: this.config.seekTime,\n            title: this.config.title,\n        };\n        let update = true;\n\n        // If function, run it and use output\n        if (is.function(this.config.controls)) {\n            this.config.controls = this.config.controls.call(this.props);\n        }\n\n        // Convert falsy controls to empty array (primarily for empty strings)\n        if (!this.config.controls) {\n            this.config.controls = [];\n        }\n\n        if (is.element(this.config.controls) || is.string(this.config.controls)) {\n            // HTMLElement or Non-empty string passed as the option\n            container = this.config.controls;\n        } else {\n            // Create controls\n            container = controls.create.call(this, {\n                id: this.id,\n                seektime: this.config.seekTime,\n                speed: this.speed,\n                quality: this.quality,\n                captions: captions.getLabel.call(this),\n                // TODO: Looping\n                // loop: 'None',\n            });\n            update = false;\n        }\n\n        // Replace props with their value\n        const replace = input => {\n            let result = input;\n\n            Object.entries(props).forEach(([key, value]) => {\n                result = replaceAll(result, `{${key}}`, value);\n            });\n\n            return result;\n        };\n\n        // Update markup\n        if (update) {\n            if (is.string(this.config.controls)) {\n                container = replace(container);\n            } else if (is.element(container)) {\n                container.innerHTML = replace(container.innerHTML);\n            }\n        }\n\n        // Controls container\n        let target;\n\n        // Inject to custom location\n        if (is.string(this.config.selectors.controls.container)) {\n            target = document.querySelector(this.config.selectors.controls.container);\n        }\n\n        // Inject into the container by default\n        if (!is.element(target)) {\n            target = this.elements.container;\n        }\n\n        // Inject controls HTML (needs to be before captions, hence \"afterbegin\")\n        const insertMethod = is.element(container) ? 'insertAdjacentElement' : 'insertAdjacentHTML';\n        target[insertMethod]('afterbegin', container);\n\n        // Find the elements if need be\n        if (!is.element(this.elements.controls)) {\n            controls.findElements.call(this);\n        }\n\n        // Add pressed property to buttons\n        if (!is.empty(this.elements.buttons)) {\n            // Toggle classname when pressed property is set\n            Object.values(this.elements.buttons).forEach(button => {\n                const className = this.config.classNames.controlPressed;\n                Object.defineProperty(button, 'pressed', {\n                    enumerable: true,\n                    get() {\n                        return hasClass(button, className);\n                    },\n                    set(pressed = false) {\n                        toggleClass(button, className, pressed);\n                    },\n                });\n            });\n        }\n\n        // Edge sometimes doesn't finish the paint so force a redraw\n        if (window.navigator.userAgent.includes('Edge')) {\n            repaint(target);\n        }\n\n        // Setup tooltips\n        if (this.config.tooltips.controls) {\n            const { classNames, selectors } = this.config;\n            const selector = `${selectors.controls.wrapper} ${selectors.labels} .${classNames.hidden}`;\n            const labels = getElements.call(this, selector);\n\n            Array.from(labels).forEach(label => {\n                toggleClass(label, this.config.classNames.hidden, false);\n                toggleClass(label, this.config.classNames.tooltip, true);\n            });\n        }\n    },\n};\n\nexport default controls;\n","// ==========================================================================\n// URL utils\n// ==========================================================================\n\nimport is from './is';\n\n/**\n * Parse a string to a URL object\n * @param {string} input - the URL to be parsed\n * @param {boolean} safe - failsafe parsing\n */\nexport function parseUrl(input, safe = true) {\n    let url = input;\n\n    if (safe) {\n        const parser = document.createElement('a');\n        parser.href = url;\n        url = parser.href;\n    }\n\n    try {\n        return new URL(url);\n    } catch (e) {\n        return null;\n    }\n}\n\n// Convert object to URLSearchParams\nexport function buildUrlParams(input) {\n    const params = new URLSearchParams();\n\n    if (is.object(input)) {\n        Object.entries(input).forEach(([key, value]) => {\n            params.set(key, value);\n        });\n    }\n\n    return params;\n}\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport controls from './controls';\nimport support from './support';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n    createElement,\n    emptyElement,\n    getAttributesFromSelector,\n    insertAfter,\n    removeElement,\n    toggleClass,\n} from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport fetch from './utils/fetch';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport { getHTML } from './utils/strings';\nimport { parseUrl } from './utils/urls';\n\nconst captions = {\n    // Setup captions\n    setup() {\n        // Requires UI support\n        if (!this.supported.ui) {\n            return;\n        }\n\n        // Only Vimeo and HTML5 video supported at this point\n        if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n            // Clear menu and hide\n            if (\n                is.array(this.config.controls) &&\n                this.config.controls.includes('settings') &&\n                this.config.settings.includes('captions')\n            ) {\n                controls.setCaptionsMenu.call(this);\n            }\n\n            return;\n        }\n\n        // Inject the container\n        if (!is.element(this.elements.captions)) {\n            this.elements.captions = createElement('div', getAttributesFromSelector(this.config.selectors.captions));\n\n            insertAfter(this.elements.captions, this.elements.wrapper);\n        }\n\n        // Fix IE captions if CORS is used\n        // Fetch captions and inject as blobs instead (data URIs not supported!)\n        if (browser.isIE && window.URL) {\n            const elements = this.media.querySelectorAll('track');\n\n            Array.from(elements).forEach(track => {\n                const src = track.getAttribute('src');\n                const url = parseUrl(src);\n\n                if (\n                    url !== null &&\n                    url.hostname !== window.location.href.hostname &&\n                    ['http:', 'https:'].includes(url.protocol)\n                ) {\n                    fetch(src, 'blob')\n                        .then(blob => {\n                            track.setAttribute('src', window.URL.createObjectURL(blob));\n                        })\n                        .catch(() => {\n                            removeElement(track);\n                        });\n                }\n            });\n        }\n\n        // Get and set initial data\n        // The \"preferred\" options are not realized unless / until the wanted language has a match\n        // * languages: Array of user's browser languages.\n        // * language:  The language preferred by user settings or config\n        // * active:    The state preferred by user settings or config\n        // * toggled:   The real captions state\n\n        const browserLanguages = navigator.languages || [navigator.language || navigator.userLanguage || 'en'];\n        const languages = dedupe(browserLanguages.map(language => language.split('-')[0]));\n\n        let language = (this.storage.get('language') || this.config.captions.language || 'auto').toLowerCase();\n\n        // Use first browser language when language is 'auto'\n        if (language === 'auto') {\n            [language] = languages;\n        }\n\n        let active = this.storage.get('captions');\n        if (!is.boolean(active)) {\n            ({ active } = this.config.captions);\n        }\n\n        Object.assign(this.captions, {\n            toggled: false,\n            active,\n            language,\n            languages,\n        });\n\n        // Watch changes to textTracks and update captions menu\n        if (this.isHTML5) {\n            const trackEvents = this.config.captions.update ? 'addtrack removetrack' : 'removetrack';\n            on.call(this, this.media.textTracks, trackEvents, captions.update.bind(this));\n        }\n\n        // Update available languages in list next tick (the event must not be triggered before the listeners)\n        setTimeout(captions.update.bind(this), 0);\n    },\n\n    // Update available language options in settings based on tracks\n    update() {\n        const tracks = captions.getTracks.call(this, true);\n        // Get the wanted language\n        const { active, language, meta, currentTrackNode } = this.captions;\n        const languageExists = Boolean(tracks.find(track => track.language === language));\n\n        // Handle tracks (add event listener and \"pseudo\"-default)\n        if (this.isHTML5 && this.isVideo) {\n            tracks.filter(track => !meta.get(track)).forEach(track => {\n                this.debug.log('Track added', track);\n                // Attempt to store if the original dom element was \"default\"\n                meta.set(track, {\n                    default: track.mode === 'showing',\n                });\n\n                // Turn off native caption rendering to avoid double captions\n                track.mode = 'hidden';\n\n                // Add event listener for cue changes\n                on.call(this, track, 'cuechange', () => captions.updateCues.call(this));\n            });\n        }\n\n        // Update language first time it matches, or if the previous matching track was removed\n        if ((languageExists && this.language !== language) || !tracks.includes(currentTrackNode)) {\n            captions.setLanguage.call(this, language);\n            captions.toggle.call(this, active && languageExists);\n        }\n\n        // Enable or disable captions based on track length\n        toggleClass(this.elements.container, this.config.classNames.captions.enabled, !is.empty(tracks));\n\n        // Update available languages in list\n        if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) {\n            controls.setCaptionsMenu.call(this);\n        }\n    },\n\n    // Toggle captions display\n    // Used internally for the toggleCaptions method, with the passive option forced to false\n    toggle(input, passive = true) {\n        // If there's no full support\n        if (!this.supported.ui) {\n            return;\n        }\n\n        const { toggled } = this.captions; // Current state\n        const activeClass = this.config.classNames.captions.active;\n\n        // Get the next state\n        // If the method is called without parameter, toggle based on current value\n        const active = is.nullOrUndefined(input) ? !toggled : input;\n\n        // Update state and trigger event\n        if (active !== toggled) {\n            // When passive, don't override user preferences\n            if (!passive) {\n                this.captions.active = active;\n                this.storage.set({ captions: active });\n            }\n\n            // Force language if the call isn't passive and there is no matching language to toggle to\n            if (!this.language && active && !passive) {\n                const tracks = captions.getTracks.call(this);\n                const track = captions.findTrack.call(this, [this.captions.language, ...this.captions.languages], true);\n\n                // Override user preferences to avoid switching languages if a matching track is added\n                this.captions.language = track.language;\n\n                // Set caption, but don't store in localStorage as user preference\n                captions.set.call(this, tracks.indexOf(track));\n                return;\n            }\n\n            // Toggle button if it's enabled\n            if (this.elements.buttons.captions) {\n                this.elements.buttons.captions.pressed = active;\n            }\n\n            // Add class hook\n            toggleClass(this.elements.container, activeClass, active);\n\n            this.captions.toggled = active;\n\n            // Update settings menu\n            controls.updateSetting.call(this, 'captions');\n\n            // Trigger event (not used internally)\n            triggerEvent.call(this, this.media, active ? 'captionsenabled' : 'captionsdisabled');\n        }\n    },\n\n    // Set captions by track index\n    // Used internally for the currentTrack setter with the passive option forced to false\n    set(index, passive = true) {\n        const tracks = captions.getTracks.call(this);\n\n        // Disable captions if setting to -1\n        if (index === -1) {\n            captions.toggle.call(this, false, passive);\n            return;\n        }\n\n        if (!is.number(index)) {\n            this.debug.warn('Invalid caption argument', index);\n            return;\n        }\n\n        if (!(index in tracks)) {\n            this.debug.warn('Track not found', index);\n            return;\n        }\n\n        if (this.captions.currentTrack !== index) {\n            this.captions.currentTrack = index;\n            const track = tracks[index];\n            const { language } = track || {};\n\n            // Store reference to node for invalidation on remove\n            this.captions.currentTrackNode = track;\n\n            // Update settings menu\n            controls.updateSetting.call(this, 'captions');\n\n            // When passive, don't override user preferences\n            if (!passive) {\n                this.captions.language = language;\n                this.storage.set({ language });\n            }\n\n            // Handle Vimeo captions\n            if (this.isVimeo) {\n                this.embed.enableTextTrack(language);\n            }\n\n            // Trigger event\n            triggerEvent.call(this, this.media, 'languagechange');\n        }\n\n        // Show captions\n        captions.toggle.call(this, true, passive);\n\n        if (this.isHTML5 && this.isVideo) {\n            // If we change the active track while a cue is already displayed we need to update it\n            captions.updateCues.call(this);\n        }\n    },\n\n    // Set captions by language\n    // Used internally for the language setter with the passive option forced to false\n    setLanguage(input, passive = true) {\n        if (!is.string(input)) {\n            this.debug.warn('Invalid language argument', input);\n            return;\n        }\n        // Normalize\n        const language = input.toLowerCase();\n        this.captions.language = language;\n\n        // Set currentTrack\n        const tracks = captions.getTracks.call(this);\n        const track = captions.findTrack.call(this, [language]);\n        captions.set.call(this, tracks.indexOf(track), passive);\n    },\n\n    // Get current valid caption tracks\n    // If update is false it will also ignore tracks without metadata\n    // This is used to \"freeze\" the language options when captions.update is false\n    getTracks(update = false) {\n        // Handle media or textTracks missing or null\n        const tracks = Array.from((this.media || {}).textTracks || []);\n        // For HTML5, use cache instead of current tracks when it exists (if captions.update is false)\n        // Filter out removed tracks and tracks that aren't captions/subtitles (for example metadata)\n        return tracks\n            .filter(track => !this.isHTML5 || update || this.captions.meta.has(track))\n            .filter(track => ['captions', 'subtitles'].includes(track.kind));\n    },\n\n    // Match tracks based on languages and get the first\n    findTrack(languages, force = false) {\n        const tracks = captions.getTracks.call(this);\n        const sortIsDefault = track => Number((this.captions.meta.get(track) || {}).default);\n        const sorted = Array.from(tracks).sort((a, b) => sortIsDefault(b) - sortIsDefault(a));\n        let track;\n        languages.every(language => {\n            track = sorted.find(track => track.language === language);\n            return !track; // Break iteration if there is a match\n        });\n        // If no match is found but is required, get first\n        return track || (force ? sorted[0] : undefined);\n    },\n\n    // Get the current track\n    getCurrentTrack() {\n        return captions.getTracks.call(this)[this.currentTrack];\n    },\n\n    // Get UI label for track\n    getLabel(track) {\n        let currentTrack = track;\n\n        if (!is.track(currentTrack) && support.textTracks && this.captions.toggled) {\n            currentTrack = captions.getCurrentTrack.call(this);\n        }\n\n        if (is.track(currentTrack)) {\n            if (!is.empty(currentTrack.label)) {\n                return currentTrack.label;\n            }\n\n            if (!is.empty(currentTrack.language)) {\n                return track.language.toUpperCase();\n            }\n\n            return i18n.get('enabled', this.config);\n        }\n\n        return i18n.get('disabled', this.config);\n    },\n\n    // Update captions using current track's active cues\n    // Also optional array argument in case there isn't any track (ex: vimeo)\n    updateCues(input) {\n        // Requires UI\n        if (!this.supported.ui) {\n            return;\n        }\n\n        if (!is.element(this.elements.captions)) {\n            this.debug.warn('No captions element to render to');\n            return;\n        }\n\n        // Only accept array or empty input\n        if (!is.nullOrUndefined(input) && !Array.isArray(input)) {\n            this.debug.warn('updateCues: Invalid input', input);\n            return;\n        }\n\n        let cues = input;\n\n        // Get cues from track\n        if (!cues) {\n            const track = captions.getCurrentTrack.call(this);\n            cues = Array.from((track || {}).activeCues || [])\n                .map(cue => cue.getCueAsHTML())\n                .map(getHTML);\n        }\n\n        // Set new caption text\n        const content = cues.map(cueText => cueText.trim()).join('\\n');\n        const changed = content !== this.elements.captions.innerHTML;\n\n        if (changed) {\n            // Empty the container and create a new child element\n            emptyElement(this.elements.captions);\n            const caption = createElement('span', getAttributesFromSelector(this.config.selectors.caption));\n            caption.innerHTML = content;\n            this.elements.captions.appendChild(caption);\n\n            // Trigger event\n            triggerEvent.call(this, this.media, 'cuechange');\n        }\n    },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n    // Disable\n    enabled: true,\n\n    // Custom media title\n    title: '',\n\n    // Logging to console\n    debug: false,\n\n    // Auto play (if supported)\n    autoplay: false,\n\n    // Only allow one media playing at once (vimeo only)\n    autopause: true,\n\n    // Allow inline playback on iOS (this effects YouTube/Vimeo - HTML5 requires the attribute present)\n    // TODO: Remove iosNative fullscreen option in favour of this (logic needs work)\n    playsinline: true,\n\n    // Default time to skip when rewind/fast forward\n    seekTime: 10,\n\n    // Default volume\n    volume: 1,\n    muted: false,\n\n    // Pass a custom duration\n    duration: null,\n\n    // Display the media duration on load in the current time position\n    // If you have opted to display both duration and currentTime, this is ignored\n    displayDuration: true,\n\n    // Invert the current time to be a countdown\n    invertTime: true,\n\n    // Clicking the currentTime inverts it's value to show time left rather than elapsed\n    toggleInvert: true,\n\n    // Aspect ratio (for embeds)\n    ratio: '16:9',\n\n    // Click video container to play/pause\n    clickToPlay: true,\n\n    // Auto hide the controls\n    hideControls: true,\n\n    // Reset to start when playback ended\n    resetOnEnd: false,\n\n    // Disable the standard context menu\n    disableContextMenu: true,\n\n    // Sprite (for icons)\n    loadSprite: true,\n    iconPrefix: 'plyr',\n    iconUrl: 'https://cdn.plyr.io/3.3.12/plyr.svg',\n\n    // Blank video (used to prevent errors on source change)\n    blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n    // Quality default\n    quality: {\n        default: 576,\n        options: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240],\n    },\n\n    // Set loops\n    loop: {\n        active: false,\n        // start: null,\n        // end: null,\n    },\n\n    // Speed default and options to display\n    speed: {\n        selected: 1,\n        options: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2],\n    },\n\n    // Keyboard shortcut settings\n    keyboard: {\n        focused: true,\n        global: false,\n    },\n\n    // Display tooltips\n    tooltips: {\n        controls: false,\n        seek: true,\n    },\n\n    // Captions settings\n    captions: {\n        active: false,\n        language: 'auto',\n        // Listen to new tracks added after Plyr is initialized.\n        // This is needed for streaming captions, but may result in unselectable options\n        update: false,\n    },\n\n    // Fullscreen settings\n    fullscreen: {\n        enabled: true, // Allow fullscreen?\n        fallback: true, // Fallback for vintage browsers\n        iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n    },\n\n    // Local storage\n    storage: {\n        enabled: true,\n        key: 'plyr',\n    },\n\n    // Default controls\n    controls: [\n        'play-large',\n        // 'restart',\n        // 'rewind',\n        'play',\n        // 'fast-forward',\n        'progress',\n        'current-time',\n        'mute',\n        'volume',\n        'captions',\n        'settings',\n        'pip',\n        'airplay',\n        'fullscreen',\n    ],\n    settings: ['captions', 'quality', 'speed'],\n\n    // Localisation\n    i18n: {\n        restart: 'Restart',\n        rewind: 'Rewind {seektime}s',\n        play: 'Play',\n        pause: 'Pause',\n        fastForward: 'Forward {seektime}s',\n        seek: 'Seek',\n        seekLabel: '{currentTime} of {duration}',\n        played: 'Played',\n        buffered: 'Buffered',\n        currentTime: 'Current time',\n        duration: 'Duration',\n        volume: 'Volume',\n        mute: 'Mute',\n        unmute: 'Unmute',\n        enableCaptions: 'Enable captions',\n        disableCaptions: 'Disable captions',\n        enterFullscreen: 'Enter fullscreen',\n        exitFullscreen: 'Exit fullscreen',\n        frameTitle: 'Player for {title}',\n        captions: 'Captions',\n        settings: 'Settings',\n        menuBack: 'Go back to previous menu',\n        speed: 'Speed',\n        normal: 'Normal',\n        quality: 'Quality',\n        loop: 'Loop',\n        start: 'Start',\n        end: 'End',\n        all: 'All',\n        reset: 'Reset',\n        disabled: 'Disabled',\n        enabled: 'Enabled',\n        advertisement: 'Ad',\n        qualityBadge: {\n            2160: '4K',\n            1440: 'HD',\n            1080: 'HD',\n            720: 'HD',\n            576: 'SD',\n            480: 'SD',\n        },\n    },\n\n    // URLs\n    urls: {\n        vimeo: {\n            sdk: 'https://player.vimeo.com/api/player.js',\n            iframe: 'https://player.vimeo.com/video/{0}?{1}',\n            api: 'https://vimeo.com/api/v2/video/{0}.json',\n        },\n        youtube: {\n            sdk: 'https://www.youtube.com/iframe_api',\n            api:\n                'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet',\n        },\n        googleIMA: {\n            sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n        },\n    },\n\n    // Custom control listeners\n    listeners: {\n        seek: null,\n        play: null,\n        pause: null,\n        restart: null,\n        rewind: null,\n        fastForward: null,\n        mute: null,\n        volume: null,\n        captions: null,\n        fullscreen: null,\n        pip: null,\n        airplay: null,\n        speed: null,\n        quality: null,\n        loop: null,\n        language: null,\n    },\n\n    // Events to watch and bubble\n    events: [\n        // Events to watch on HTML5 media elements and bubble\n        // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n        'ended',\n        'progress',\n        'stalled',\n        'playing',\n        'waiting',\n        'canplay',\n        'canplaythrough',\n        'loadstart',\n        'loadeddata',\n        'loadedmetadata',\n        'timeupdate',\n        'volumechange',\n        'play',\n        'pause',\n        'error',\n        'seeking',\n        'seeked',\n        'emptied',\n        'ratechange',\n        'cuechange',\n\n        // Custom events\n        'enterfullscreen',\n        'exitfullscreen',\n        'captionsenabled',\n        'captionsdisabled',\n        'languagechange',\n        'controlshidden',\n        'controlsshown',\n        'ready',\n\n        // YouTube\n        'statechange',\n\n        // Quality\n        'qualitychange',\n\n        // Ads\n        'adsloaded',\n        'adscontentpause',\n        'adscontentresume',\n        'adstarted',\n        'adsmidpoint',\n        'adscomplete',\n        'adsallcomplete',\n        'adsimpression',\n        'adsclick',\n    ],\n\n    // Selectors\n    // Change these to match your template if using custom HTML\n    selectors: {\n        editable: 'input, textarea, select, [contenteditable]',\n        container: '.plyr',\n        controls: {\n            container: null,\n            wrapper: '.plyr__controls',\n        },\n        labels: '[data-plyr]',\n        buttons: {\n            play: '[data-plyr=\"play\"]',\n            pause: '[data-plyr=\"pause\"]',\n            restart: '[data-plyr=\"restart\"]',\n            rewind: '[data-plyr=\"rewind\"]',\n            fastForward: '[data-plyr=\"fast-forward\"]',\n            mute: '[data-plyr=\"mute\"]',\n            captions: '[data-plyr=\"captions\"]',\n            fullscreen: '[data-plyr=\"fullscreen\"]',\n            pip: '[data-plyr=\"pip\"]',\n            airplay: '[data-plyr=\"airplay\"]',\n            settings: '[data-plyr=\"settings\"]',\n            loop: '[data-plyr=\"loop\"]',\n        },\n        inputs: {\n            seek: '[data-plyr=\"seek\"]',\n            volume: '[data-plyr=\"volume\"]',\n            speed: '[data-plyr=\"speed\"]',\n            language: '[data-plyr=\"language\"]',\n            quality: '[data-plyr=\"quality\"]',\n        },\n        display: {\n            currentTime: '.plyr__time--current',\n            duration: '.plyr__time--duration',\n            buffer: '.plyr__progress__buffer',\n            loop: '.plyr__progress__loop', // Used later\n            volume: '.plyr__volume--display',\n        },\n        progress: '.plyr__progress',\n        captions: '.plyr__captions',\n        caption: '.plyr__caption',\n        menu: {\n            quality: '.js-plyr__menu__list--quality',\n        },\n    },\n\n    // Class hooks added to the player in different states\n    classNames: {\n        type: 'plyr--{0}',\n        provider: 'plyr--{0}',\n        video: 'plyr__video-wrapper',\n        embed: 'plyr__video-embed',\n        embedContainer: 'plyr__video-embed__container',\n        poster: 'plyr__poster',\n        posterEnabled: 'plyr__poster-enabled',\n        ads: 'plyr__ads',\n        control: 'plyr__control',\n        controlPressed: 'plyr__control--pressed',\n        playing: 'plyr--playing',\n        paused: 'plyr--paused',\n        stopped: 'plyr--stopped',\n        loading: 'plyr--loading',\n        hover: 'plyr--hover',\n        tooltip: 'plyr__tooltip',\n        cues: 'plyr__cues',\n        hidden: 'plyr__sr-only',\n        hideControls: 'plyr--hide-controls',\n        isIos: 'plyr--is-ios',\n        isTouch: 'plyr--is-touch',\n        uiSupported: 'plyr--full-ui',\n        noTransition: 'plyr--no-transition',\n        display: {\n            time: 'plyr__time',\n        },\n        menu: {\n            value: 'plyr__menu__value',\n            badge: 'plyr__badge',\n            open: 'plyr--menu-open',\n        },\n        captions: {\n            enabled: 'plyr--captions-enabled',\n            active: 'plyr--captions-active',\n        },\n        fullscreen: {\n            enabled: 'plyr--fullscreen-enabled',\n            fallback: 'plyr--fullscreen-fallback',\n        },\n        pip: {\n            supported: 'plyr--pip-supported',\n            active: 'plyr--pip-active',\n        },\n        airplay: {\n            supported: 'plyr--airplay-supported',\n            active: 'plyr--airplay-active',\n        },\n        tabFocus: 'plyr__tab-focus',\n    },\n\n    // Embed attributes\n    attributes: {\n        embed: {\n            provider: 'data-plyr-provider',\n            id: 'data-plyr-embed-id',\n        },\n    },\n\n    // API keys\n    keys: {\n        google: null,\n    },\n\n    // Advertisements plugin\n    // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n    ads: {\n        enabled: false,\n        publisherId: '',\n    },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n    html5: 'html5',\n    youtube: 'youtube',\n    vimeo: 'vimeo',\n};\n\nexport const types = {\n    audio: 'audio',\n    video: 'video',\n};\n\n/**\n * Get provider by URL\n * @param {string} url\n */\nexport function getProviderByUrl(url) {\n    // YouTube\n    if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n        return providers.youtube;\n    }\n\n    // Vimeo\n    if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n        return providers.vimeo;\n    }\n\n    return null;\n}\n\nexport default { providers, types };\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n    constructor(enabled = false) {\n        this.enabled = window.console && enabled;\n\n        if (this.enabled) {\n            this.log('Debugging enabled');\n        }\n    }\n\n    get log() {\n        // eslint-disable-next-line no-console\n        return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n    }\n\n    get warn() {\n        // eslint-disable-next-line no-console\n        return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n    }\n\n    get error() {\n        // eslint-disable-next-line no-console\n        return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n    }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport browser from './utils/browser';\nimport { hasClass, toggleClass, trapFocus } from './utils/elements';\nimport { on, triggerEvent } from './utils/events';\nimport is from './utils/is';\n\nfunction onChange() {\n    if (!this.enabled) {\n        return;\n    }\n\n    // Update toggle button\n    const button = this.player.elements.buttons.fullscreen;\n    if (is.element(button)) {\n        button.pressed = this.active;\n    }\n\n    // Trigger an event\n    triggerEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n    // Trap focus in container\n    if (!browser.isIos) {\n        trapFocus.call(this.player, this.target, this.active);\n    }\n}\n\nfunction toggleFallback(toggle = false) {\n    // Store or restore scroll position\n    if (toggle) {\n        this.scrollPosition = {\n            x: window.scrollX || 0,\n            y: window.scrollY || 0,\n        };\n    } else {\n        window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n    }\n\n    // Toggle scroll\n    document.body.style.overflow = toggle ? 'hidden' : '';\n\n    // Toggle class hook\n    toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n    // Toggle button and fire events\n    onChange.call(this);\n}\n\nclass Fullscreen {\n    constructor(player) {\n        // Keep reference to parent\n        this.player = player;\n\n        // Get prefix\n        this.prefix = Fullscreen.prefix;\n        this.property = Fullscreen.property;\n\n        // Scroll position\n        this.scrollPosition = { x: 0, y: 0 };\n\n        // Register event listeners\n        // Handle event (incase user presses escape etc)\n        on.call(\n            this.player,\n            document,\n            this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`,\n            () => {\n                // TODO: Filter for target??\n                onChange.call(this);\n            },\n        );\n\n        // Fullscreen toggle on double click\n        on.call(this.player, this.player.elements.container, 'dblclick', event => {\n            // Ignore double click in controls\n            if (is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n                return;\n            }\n\n            this.toggle();\n        });\n\n        // Update the UI\n        this.update();\n    }\n\n    // Determine if native supported\n    static get native() {\n        return !!(\n            document.fullscreenEnabled ||\n            document.webkitFullscreenEnabled ||\n            document.mozFullScreenEnabled ||\n            document.msFullscreenEnabled\n        );\n    }\n\n    // Get the prefix for handlers\n    static get prefix() {\n        // No prefix\n        if (is.function(document.exitFullscreen)) {\n            return '';\n        }\n\n        // Check for fullscreen support by vendor prefix\n        let value = '';\n        const prefixes = ['webkit', 'moz', 'ms'];\n\n        prefixes.some(pre => {\n            if (is.function(document[`${pre}ExitFullscreen`]) || is.function(document[`${pre}CancelFullScreen`])) {\n                value = pre;\n                return true;\n            }\n\n            return false;\n        });\n\n        return value;\n    }\n\n    static get property() {\n        return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n    }\n\n    // Determine if fullscreen is enabled\n    get enabled() {\n        return (\n            (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n            this.player.config.fullscreen.enabled &&\n            this.player.supported.ui &&\n            this.player.isVideo\n        );\n    }\n\n    // Get active state\n    get active() {\n        if (!this.enabled) {\n            return false;\n        }\n\n        // Fallback using classname\n        if (!Fullscreen.native) {\n            return hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n        }\n\n        const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.property}Element`];\n\n        return element === this.target;\n    }\n\n    // Get target element\n    get target() {\n        return browser.isIos && this.player.config.fullscreen.iosNative\n            ? this.player.media\n            : this.player.elements.container;\n    }\n\n    // Update UI\n    update() {\n        if (this.enabled) {\n            this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n        } else {\n            this.player.debug.log('Fullscreen not supported and fallback disabled');\n        }\n\n        // Add styling hook to show button\n        toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n    }\n\n    // Make an element fullscreen\n    enter() {\n        if (!this.enabled) {\n            return;\n        }\n\n        // iOS native fullscreen doesn't need the request step\n        if (browser.isIos && this.player.config.fullscreen.iosNative) {\n            this.target.webkitEnterFullscreen();\n        } else if (!Fullscreen.native) {\n            toggleFallback.call(this, true);\n        } else if (!this.prefix) {\n            this.target.requestFullscreen();\n        } else if (!is.empty(this.prefix)) {\n            this.target[`${this.prefix}Request${this.property}`]();\n        }\n    }\n\n    // Bail from fullscreen\n    exit() {\n        if (!this.enabled) {\n            return;\n        }\n\n        // iOS native fullscreen\n        if (browser.isIos && this.player.config.fullscreen.iosNative) {\n            this.target.webkitExitFullscreen();\n            this.player.play();\n        } else if (!Fullscreen.native) {\n            toggleFallback.call(this, false);\n        } else if (!this.prefix) {\n            (document.cancelFullScreen || document.exitFullscreen).call(document);\n        } else if (!is.empty(this.prefix)) {\n            const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n            document[`${this.prefix}${action}${this.property}`]();\n        }\n    }\n\n    // Toggle state\n    toggle() {\n        if (!this.active) {\n            this.enter();\n        } else {\n            this.exit();\n        }\n    }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\n\nexport default function loadImage(src, minWidth = 1) {\n    return new Promise((resolve, reject) => {\n        const image = new Image();\n\n        const handler = () => {\n            delete image.onload;\n            delete image.onerror;\n            (image.naturalWidth >= minWidth ? resolve : reject)(image);\n        };\n\n        Object.assign(image, { onload: handler, onerror: handler, src });\n    });\n}\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport captions from './captions';\nimport controls from './controls';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\nimport i18n from './utils/i18n';\nimport is from './utils/is';\nimport loadImage from './utils/loadImage';\n\nconst ui = {\n    addStyleHook() {\n        toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n        toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n    },\n\n    // Toggle native HTML5 media controls\n    toggleNativeControls(toggle = false) {\n        if (toggle && this.isHTML5) {\n            this.media.setAttribute('controls', '');\n        } else {\n            this.media.removeAttribute('controls');\n        }\n    },\n\n    // Setup the UI\n    build() {\n        // Re-attach media element listeners\n        // TODO: Use event bubbling?\n        this.listeners.media();\n\n        // Don't setup interface if no support\n        if (!this.supported.ui) {\n            this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n            // Restore native controls\n            ui.toggleNativeControls.call(this, true);\n\n            // Bail\n            return;\n        }\n\n        // Inject custom controls if not present\n        if (!is.element(this.elements.controls)) {\n            // Inject custom controls\n            controls.inject.call(this);\n\n            // Re-attach control listeners\n            this.listeners.controls();\n        }\n\n        // Remove native controls\n        ui.toggleNativeControls.call(this);\n\n        // Setup captions for HTML5\n        if (this.isHTML5) {\n            captions.setup.call(this);\n        }\n\n        // Reset volume\n        this.volume = null;\n\n        // Reset mute state\n        this.muted = null;\n\n        // Reset speed\n        this.speed = null;\n\n        // Reset loop state\n        this.loop = null;\n\n        // Reset quality setting\n        this.quality = null;\n\n        // Reset volume display\n        controls.updateVolume.call(this);\n\n        // Reset time display\n        controls.timeUpdate.call(this);\n\n        // Update the UI\n        ui.checkPlaying.call(this);\n\n        // Check for picture-in-picture support\n        toggleClass(\n            this.elements.container,\n            this.config.classNames.pip.supported,\n            support.pip && this.isHTML5 && this.isVideo,\n        );\n\n        // Check for airplay support\n        toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n        // Add iOS class\n        toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n        // Add touch class\n        toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n        // Ready for API calls\n        this.ready = true;\n\n        // Ready event at end of execution stack\n        setTimeout(() => {\n            triggerEvent.call(this, this.media, 'ready');\n        }, 0);\n\n        // Set the title\n        ui.setTitle.call(this);\n\n        // Assure the poster image is set, if the property was added before the element was created\n        if (this.poster) {\n            ui.setPoster.call(this, this.poster, false).catch(() => {});\n        }\n\n        // Manually set the duration if user has overridden it.\n        // The event listeners for it doesn't get called if preload is disabled (#701)\n        if (this.config.duration) {\n            controls.durationUpdate.call(this);\n        }\n    },\n\n    // Setup aria attribute for play and iframe title\n    setTitle() {\n        // Find the current text\n        let label = i18n.get('play', this.config);\n\n        // If there's a media title set, use that for the label\n        if (is.string(this.config.title) && !is.empty(this.config.title)) {\n            label += `, ${this.config.title}`;\n        }\n\n        // If there's a play button, set label\n        Array.from(this.elements.buttons.play || []).forEach(button => {\n            button.setAttribute('aria-label', label);\n        });\n\n        // Set iframe title\n        // https://github.com/sampotts/plyr/issues/124\n        if (this.isEmbed) {\n            const iframe = getElement.call(this, 'iframe');\n\n            if (!is.element(iframe)) {\n                return;\n            }\n\n            // Default to media type\n            const title = !is.empty(this.config.title) ? this.config.title : 'video';\n            const format = i18n.get('frameTitle', this.config);\n\n            iframe.setAttribute('title', format.replace('{title}', title));\n        }\n    },\n\n    // Toggle poster\n    togglePoster(enable) {\n        toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n    },\n\n    // Set the poster image (async)\n    // Used internally for the poster setter, with the passive option forced to false\n    setPoster(poster, passive = true) {\n        // Don't override if call is passive\n        if (passive && this.poster) {\n            return Promise.reject(new Error('Poster already set'));\n        }\n\n        // Set property synchronously to respect the call order\n        this.media.setAttribute('poster', poster);\n\n        // Wait until ui is ready\n        return (\n            ready\n                .call(this)\n                // Load image\n                .then(() => loadImage(poster))\n                .catch(err => {\n                    // Hide poster on error unless it's been set by another call\n                    if (poster === this.poster) {\n                        ui.togglePoster.call(this, false);\n                    }\n                    // Rethrow\n                    throw err;\n                })\n                .then(() => {\n                    // Prevent race conditions\n                    if (poster !== this.poster) {\n                        throw new Error('setPoster cancelled by later call to setPoster');\n                    }\n                })\n                .then(() => {\n                    Object.assign(this.elements.poster.style, {\n                        backgroundImage: `url('${poster}')`,\n                        // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n                        backgroundSize: '',\n                    });\n                    ui.togglePoster.call(this, true);\n                    return poster;\n                })\n        );\n    },\n\n    // Check playing state\n    checkPlaying(event) {\n        // Class hooks\n        toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n        toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n        toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n        // Set state\n        Array.from(this.elements.buttons.play || []).forEach(target => {\n            target.pressed = this.playing;\n        });\n\n        // Only update controls on non timeupdate events\n        if (is.event(event) && event.type === 'timeupdate') {\n            return;\n        }\n\n        // Toggle controls\n        ui.toggleControls.call(this);\n    },\n\n    // Check if media is loading\n    checkLoading(event) {\n        this.loading = ['stalled', 'waiting'].includes(event.type);\n\n        // Clear timer\n        clearTimeout(this.timers.loading);\n\n        // Timer to prevent flicker when seeking\n        this.timers.loading = setTimeout(() => {\n            // Update progress bar loading class state\n            toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n            // Update controls visibility\n            ui.toggleControls.call(this);\n        }, this.loading ? 250 : 0);\n    },\n\n    // Toggle controls based on state and `force` argument\n    toggleControls(force) {\n        const { controls } = this.elements;\n\n        if (controls && this.config.hideControls) {\n            // Show controls if force, loading, paused, or button interaction, otherwise hide\n            this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover));\n        }\n    },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport controls from './controls';\nimport ui from './ui';\nimport { repaint } from './utils/animation';\nimport browser from './utils/browser';\nimport { getElement, getElements, hasClass, matches, toggleClass, toggleHidden } from './utils/elements';\nimport { on, once, toggleListener, triggerEvent } from './utils/events';\nimport is from './utils/is';\n\nclass Listeners {\n    constructor(player) {\n        this.player = player;\n        this.lastKey = null;\n        this.focusTimer = null;\n        this.lastKeyDown = null;\n\n        this.handleKey = this.handleKey.bind(this);\n        this.toggleMenu = this.toggleMenu.bind(this);\n        this.setTabFocus = this.setTabFocus.bind(this);\n        this.firstTouch = this.firstTouch.bind(this);\n    }\n\n    // Handle key presses\n    handleKey(event) {\n        const { player } = this;\n        const { elements } = player;\n        const code = event.keyCode ? event.keyCode : event.which;\n        const pressed = event.type === 'keydown';\n        const repeat = pressed && code === this.lastKey;\n\n        // Bail if a modifier key is set\n        if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n            return;\n        }\n\n        // If the event is bubbled from the media element\n        // Firefox doesn't get the keycode for whatever reason\n        if (!is.number(code)) {\n            return;\n        }\n\n        // Seek by the number keys\n        const seekByKey = () => {\n            // Divide the max duration into 10th's and times by the number value\n            player.currentTime = player.duration / 10 * (code - 48);\n        };\n\n        // Handle the key on keydown\n        // Reset on keyup\n        if (pressed) {\n            // Check focused element\n            // and if the focused element is not editable (e.g. text input)\n            // and any that accept key input http://webaim.org/techniques/keyboard/\n            const focused = document.activeElement;\n            if (is.element(focused)) {\n                const { editable } = player.config.selectors;\n                const { seek } = elements.inputs;\n\n                if (focused !== seek && matches(focused, editable)) {\n                    return;\n                }\n\n                if (event.which === 32 && matches(focused, 'button, [role^=\"menuitem\"]')) {\n                    return;\n                }\n            }\n\n            // Which keycodes should we prevent default\n            const preventDefault = [32, 37, 38, 39, 40, 48, 49, 50, 51, 52, 53, 54, 56, 57, 67, 70, 73, 75, 76, 77, 79];\n\n            // If the code is found prevent default (e.g. prevent scrolling for arrows)\n            if (preventDefault.includes(code)) {\n                event.preventDefault();\n                event.stopPropagation();\n            }\n\n            switch (code) {\n                case 48:\n                case 49:\n                case 50:\n                case 51:\n                case 52:\n                case 53:\n                case 54:\n                case 55:\n                case 56:\n                case 57:\n                    // 0-9\n                    if (!repeat) {\n                        seekByKey();\n                    }\n                    break;\n\n                case 32:\n                case 75:\n                    // Space and K key\n                    if (!repeat) {\n                        player.togglePlay();\n                    }\n                    break;\n\n                case 38:\n                    // Arrow up\n                    player.increaseVolume(0.1);\n                    break;\n\n                case 40:\n                    // Arrow down\n                    player.decreaseVolume(0.1);\n                    break;\n\n                case 77:\n                    // M key\n                    if (!repeat) {\n                        player.muted = !player.muted;\n                    }\n                    break;\n\n                case 39:\n                    // Arrow forward\n                    player.forward();\n                    break;\n\n                case 37:\n                    // Arrow back\n                    player.rewind();\n                    break;\n\n                case 70:\n                    // F key\n                    player.fullscreen.toggle();\n                    break;\n\n                case 67:\n                    // C key\n                    if (!repeat) {\n                        player.toggleCaptions();\n                    }\n                    break;\n\n                case 76:\n                    // L key\n                    player.loop = !player.loop;\n                    break;\n\n                /* case 73:\n                    this.setLoop('start');\n                    break;\n\n                case 76:\n                    this.setLoop();\n                    break;\n\n                case 79:\n                    this.setLoop('end');\n                    break; */\n\n                default:\n                    break;\n            }\n\n            // Escape is handle natively when in full screen\n            // So we only need to worry about non native\n            if (!player.fullscreen.enabled && player.fullscreen.active && code === 27) {\n                player.fullscreen.toggle();\n            }\n\n            // Store last code for next cycle\n            this.lastKey = code;\n        } else {\n            this.lastKey = null;\n        }\n    }\n\n    // Toggle menu\n    toggleMenu(event) {\n        controls.toggleMenu.call(this.player, event);\n    }\n\n    // Device is touch enabled\n    firstTouch() {\n        const { player } = this;\n        const { elements } = player;\n\n        player.touch = true;\n\n        // Add touch class\n        toggleClass(elements.container, player.config.classNames.isTouch, true);\n    }\n\n    setTabFocus(event) {\n        const { player } = this;\n        const { elements } = player;\n\n        clearTimeout(this.focusTimer);\n\n        // Ignore any key other than tab\n        if (event.type === 'keydown' && event.which !== 9) {\n            return;\n        }\n\n        // Store reference to event timeStamp\n        if (event.type === 'keydown') {\n            this.lastKeyDown = event.timeStamp;\n        }\n\n        // Remove current classes\n        const removeCurrent = () => {\n            const className = player.config.classNames.tabFocus;\n            const current = getElements.call(player, `.${className}`);\n            toggleClass(current, className, false);\n        };\n\n        // Determine if a key was pressed to trigger this event\n        const wasKeyDown = event.timeStamp - this.lastKeyDown <= 20;\n\n        // Ignore focus events if a key was pressed prior\n        if (event.type === 'focus' && !wasKeyDown) {\n            return;\n        }\n\n        // Remove all current\n        removeCurrent();\n\n        // Delay the adding of classname until the focus has changed\n        // This event fires before the focusin event\n        this.focusTimer = setTimeout(() => {\n            const focused = document.activeElement;\n\n            // Ignore if current focus element isn't inside the player\n            if (!elements.container.contains(focused)) {\n                return;\n            }\n\n            toggleClass(document.activeElement, player.config.classNames.tabFocus, true);\n        }, 10);\n    }\n\n    // Global window & document listeners\n    global(toggle = true) {\n        const { player } = this;\n\n        // Keyboard shortcuts\n        if (player.config.keyboard.global) {\n            toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);\n        }\n\n        // Click anywhere closes menu\n        toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle);\n\n        // Detect touch by events\n        once.call(player, document.body, 'touchstart', this.firstTouch);\n\n        // Tab focus detection\n        toggleListener.call(player, document.body, 'keydown focus blur', this.setTabFocus, toggle, false, true);\n    }\n\n    // Container listeners\n    container() {\n        const { player } = this;\n        const { elements } = player;\n\n        // Keyboard shortcuts\n        if (!player.config.keyboard.global && player.config.keyboard.focused) {\n            on.call(player, elements.container, 'keydown keyup', this.handleKey, false);\n        }\n\n        // Toggle controls on mouse events and entering fullscreen\n        on.call(\n            player,\n            elements.container,\n            'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n            event => {\n                const { controls } = elements;\n\n                // Remove button states for fullscreen\n                if (controls && event.type === 'enterfullscreen') {\n                    controls.pressed = false;\n                    controls.hover = false;\n                }\n\n                // Show, then hide after a timeout unless another control event occurs\n                const show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);\n\n                let delay = 0;\n\n                if (show) {\n                    ui.toggleControls.call(player, true);\n                    // Use longer timeout for touch devices\n                    delay = player.touch ? 3000 : 2000;\n                }\n\n                // Clear timer\n                clearTimeout(player.timers.controls);\n\n                // Set new timer to prevent flicker when seeking\n                player.timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n            },\n        );\n    }\n\n    // Listen for media events\n    media() {\n        const { player } = this;\n        const { elements } = player;\n\n        // Time change on media\n        on.call(player, player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(player, event));\n\n        // Display duration\n        on.call(player, player.media, 'durationchange loadeddata loadedmetadata', event =>\n            controls.durationUpdate.call(player, event),\n        );\n\n        // Check for audio tracks on load\n        // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n        on.call(player, player.media, 'canplay', () => {\n            toggleHidden(elements.volume, !player.hasAudio);\n            toggleHidden(elements.buttons.mute, !player.hasAudio);\n        });\n\n        // Handle the media finishing\n        on.call(player, player.media, 'ended', () => {\n            // Show poster on end\n            if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {\n                // Restart\n                player.restart();\n            }\n        });\n\n        // Check for buffer progress\n        on.call(player, player.media, 'progress playing seeking seeked', event =>\n            controls.updateProgress.call(player, event),\n        );\n\n        // Handle volume changes\n        on.call(player, player.media, 'volumechange', event => controls.updateVolume.call(player, event));\n\n        // Handle play/pause\n        on.call(player, player.media, 'playing play pause ended emptied timeupdate', event =>\n            ui.checkPlaying.call(player, event),\n        );\n\n        // Loading state\n        on.call(player, player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(player, event));\n\n        // If autoplay, then load advertisement if required\n        // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n        on.call(player, player.media, 'playing', () => {\n            if (!player.ads) {\n                return;\n            }\n\n            // If ads are enabled, wait for them first\n            if (player.ads.enabled && !player.ads.initialized) {\n                // Wait for manager response\n                player.ads.managerPromise.then(() => player.ads.play()).catch(() => player.play());\n            }\n        });\n\n        // Click video\n        if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {\n            // Re-fetch the wrapper\n            const wrapper = getElement.call(player, `.${player.config.classNames.video}`);\n\n            // Bail if there's no wrapper (this should never happen)\n            if (!is.element(wrapper)) {\n                return;\n            }\n\n            // On click play, pause ore restart\n            on.call(player, elements.container, 'click touchstart', event => {\n                const targets = [elements.container, wrapper];\n\n                // Ignore if click if not container or in video wrapper\n                if (!targets.includes(event.target) && !wrapper.contains(event.target)) {\n                    return;\n                }\n\n                // First touch on touch devices will just show controls (if we're hiding controls)\n                // If controls are shown then it'll toggle like a pointer device\n                if (\n                    player.config.hideControls &&\n                    player.touch &&\n                    hasClass(elements.container, player.config.classNames.hideControls)\n                ) {\n                    return;\n                }\n\n                if (player.ended) {\n                    player.restart();\n                    player.play();\n                } else {\n                    player.togglePlay();\n                }\n            });\n        }\n\n        // Disable right click\n        if (player.supported.ui && player.config.disableContextMenu) {\n            on.call(\n                player,\n                elements.wrapper,\n                'contextmenu',\n                event => {\n                    event.preventDefault();\n                },\n                false,\n            );\n        }\n\n        // Volume change\n        on.call(player, player.media, 'volumechange', () => {\n            // Save to storage\n            player.storage.set({\n                volume: player.volume,\n                muted: player.muted,\n            });\n        });\n\n        // Speed change\n        on.call(player, player.media, 'ratechange', () => {\n            // Update UI\n            controls.updateSetting.call(player, 'speed');\n\n            // Save to storage\n            player.storage.set({ speed: player.speed });\n        });\n\n        // Quality change\n        on.call(player, player.media, 'qualitychange', event => {\n            // Update UI\n            controls.updateSetting.call(player, 'quality', null, event.detail.quality);\n        });\n\n        // Proxy events to container\n        // Bubble up key events for Edge\n        const proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');\n\n        on.call(player, player.media, proxyEvents, event => {\n            let { detail = {} } = event;\n\n            // Get error details from media\n            if (event.type === 'error') {\n                detail = player.media.error;\n            }\n\n            triggerEvent.call(player, elements.container, event.type, true, detail);\n        });\n    }\n\n    // Run default and custom handlers\n    proxy(event, defaultHandler, customHandlerKey) {\n        const { player } = this;\n        const customHandler = player.config.listeners[customHandlerKey];\n        const hasCustomHandler = is.function(customHandler);\n        let returned = true;\n\n        // Execute custom handler\n        if (hasCustomHandler) {\n            returned = customHandler.call(player, event);\n        }\n\n        // Only call default handler if not prevented in custom handler\n        if (returned && is.function(defaultHandler)) {\n            defaultHandler.call(player, event);\n        }\n    }\n\n    // Trigger custom and default handlers\n    bind(element, type, defaultHandler, customHandlerKey, passive = true) {\n        const { player } = this;\n        const customHandler = player.config.listeners[customHandlerKey];\n        const hasCustomHandler = is.function(customHandler);\n\n        on.call(\n            player,\n            element,\n            type,\n            event => this.proxy(event, defaultHandler, customHandlerKey),\n            passive && !hasCustomHandler,\n        );\n    }\n\n    // Listen for control events\n    controls() {\n        const { player } = this;\n        const { elements } = player;\n\n        // IE doesn't support input event, so we fallback to change\n        const inputEvent = browser.isIE ? 'change' : 'input';\n\n        // Play/pause toggle\n        if (elements.buttons.play) {\n            Array.from(elements.buttons.play).forEach(button => {\n                this.bind(button, 'click', player.togglePlay, 'play');\n            });\n        }\n\n        // Pause\n        this.bind(elements.buttons.restart, 'click', player.restart, 'restart');\n\n        // Rewind\n        this.bind(elements.buttons.rewind, 'click', player.rewind, 'rewind');\n\n        // Rewind\n        this.bind(elements.buttons.fastForward, 'click', player.forward, 'fastForward');\n\n        // Mute toggle\n        this.bind(\n            elements.buttons.mute,\n            'click',\n            () => {\n                player.muted = !player.muted;\n            },\n            'mute',\n        );\n\n        // Captions toggle\n        this.bind(elements.buttons.captions, 'click', () => player.toggleCaptions());\n\n        // Fullscreen toggle\n        this.bind(\n            elements.buttons.fullscreen,\n            'click',\n            () => {\n                player.fullscreen.toggle();\n            },\n            'fullscreen',\n        );\n\n        // Picture-in-Picture\n        this.bind(\n            elements.buttons.pip,\n            'click',\n            () => {\n                player.pip = 'toggle';\n            },\n            'pip',\n        );\n\n        // Airplay\n        this.bind(elements.buttons.airplay, 'click', player.airplay, 'airplay');\n\n        // Settings menu - click toggle\n        this.bind(elements.buttons.settings, 'click', event => {\n            // Prevent the document click listener closing the menu\n            event.stopPropagation();\n\n            controls.toggleMenu.call(player, event);\n        });\n\n        // Settings menu - keyboard toggle\n        // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n        // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n        this.bind(\n            elements.buttons.settings,\n            'keyup',\n            event => {\n                const code = event.which;\n\n                // We only care about space and return\n                if (![13, 32].includes(code)) {\n                    return;\n                }\n\n                // Because return triggers a click anyway, all we need to do is set focus\n                if (code === 13) {\n                    controls.focusFirstMenuItem.call(player, null, true);\n                    return;\n                }\n\n                // Prevent scroll\n                event.preventDefault();\n\n                // Prevent playing video (Firefox)\n                event.stopPropagation();\n\n                // Toggle menu\n                controls.toggleMenu.call(player, event);\n            },\n            null,\n            false, // Can't be passive as we're preventing default\n        );\n\n        // Escape closes menu\n        this.bind(elements.settings.menu, 'keydown', event => {\n            if (event.which === 27) {\n                controls.toggleMenu.call(player, event);\n            }\n        });\n\n        // Set range input alternative \"value\", which matches the tooltip time (#954)\n        this.bind(elements.inputs.seek, 'mousedown mousemove', event => {\n            const rect = elements.progress.getBoundingClientRect();\n            const percent = 100 / rect.width * (event.pageX - rect.left);\n            event.currentTarget.setAttribute('seek-value', percent);\n        });\n\n        // Pause while seeking\n        this.bind(elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n            const seek = event.currentTarget;\n            const code = event.keyCode ? event.keyCode : event.which;\n            const attribute = 'play-on-seeked';\n\n            if (is.keyboardEvent(event) && (code !== 39 && code !== 37)) {\n                return;\n            }\n\n            // Was playing before?\n            const play = seek.hasAttribute(attribute);\n\n            // Done seeking\n            const done = ['mouseup', 'touchend', 'keyup'].includes(event.type);\n\n            // If we're done seeking and it was playing, resume playback\n            if (play && done) {\n                seek.removeAttribute(attribute);\n                player.play();\n            } else if (!done && player.playing) {\n                seek.setAttribute(attribute, '');\n                player.pause();\n            }\n        });\n\n        // Fix range inputs on iOS\n        // Super weird iOS bug where after you interact with an <input type=\"range\">,\n        // it takes over further interactions on the page. This is a hack\n        if (browser.isIos) {\n            const inputs = getElements.call(player, 'input[type=\"range\"]');\n            Array.from(inputs).forEach(input => this.bind(input, inputEvent, event => repaint(event.target)));\n        }\n\n        // Seek\n        this.bind(\n            elements.inputs.seek,\n            inputEvent,\n            event => {\n                const seek = event.currentTarget;\n\n                // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n                let seekTo = seek.getAttribute('seek-value');\n\n                if (is.empty(seekTo)) {\n                    seekTo = seek.value;\n                }\n\n                seek.removeAttribute('seek-value');\n\n                player.currentTime = seekTo / seek.max * player.duration;\n            },\n            'seek',\n        );\n\n        // Seek tooltip\n        this.bind(elements.progress, 'mouseenter mouseleave mousemove', event =>\n            controls.updateSeekTooltip.call(player, event),\n        );\n\n        // Polyfill for lower fill in <input type=\"range\"> for webkit\n        if (browser.isWebkit) {\n            Array.from(getElements.call(player, 'input[type=\"range\"]')).forEach(element => {\n                this.bind(element, 'input', event => controls.updateRangeFill.call(player, event.target));\n            });\n        }\n\n        // Current time invert\n        // Only if one time element is used for both currentTime and duration\n        if (player.config.toggleInvert && !is.element(elements.display.duration)) {\n            this.bind(elements.display.currentTime, 'click', () => {\n                // Do nothing if we're at the start\n                if (player.currentTime === 0) {\n                    return;\n                }\n\n                player.config.invertTime = !player.config.invertTime;\n\n                controls.timeUpdate.call(player);\n            });\n        }\n\n        // Volume\n        this.bind(\n            elements.inputs.volume,\n            inputEvent,\n            event => {\n                player.volume = event.target.value;\n            },\n            'volume',\n        );\n\n        // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n        this.bind(elements.controls, 'mouseenter mouseleave', event => {\n            elements.controls.hover = !player.touch && event.type === 'mouseenter';\n        });\n\n        // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n        this.bind(elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n            elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n        });\n\n        // Focus in/out on controls\n        this.bind(elements.controls, 'focusin focusout', event => {\n            const { config, elements, timers } = player;\n            const isFocusIn = event.type === 'focusin';\n\n            // Skip transition to prevent focus from scrolling the parent element\n            toggleClass(elements.controls, config.classNames.noTransition, isFocusIn);\n\n            // Toggle\n            ui.toggleControls.call(player, isFocusIn);\n\n            // If focusin, hide again after delay\n            if (isFocusIn) {\n                // Restore transition\n                setTimeout(() => {\n                    toggleClass(elements.controls, config.classNames.noTransition, false);\n                }, 0);\n\n                // Delay a little more for keyboard users\n                const delay = this.touch ? 3000 : 4000;\n\n                // Clear timer\n                clearTimeout(timers.controls);\n\n                // Hide\n                timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n            }\n        });\n\n        // Mouse wheel for volume\n        this.bind(\n            elements.inputs.volume,\n            'wheel',\n            event => {\n                // Detect \"natural\" scroll - suppored on OS X Safari only\n                // Other browsers on OS X will be inverted until support improves\n                const inverted = event.webkitDirectionInvertedFromDevice;\n\n                // Get delta from event. Invert if `inverted` is true\n                const [x, y] = [event.deltaX, -event.deltaY].map(value => (inverted ? -value : value));\n\n                // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta)\n                const direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y);\n\n                // Change the volume by 2%\n                player.increaseVolume(direction / 50);\n\n                // Don't break page scrolling at max and min\n                const { volume } = player.media;\n                if ((direction === 1 && volume < 1) || (direction === -1 && volume > 0)) {\n                    event.preventDefault();\n                }\n            },\n            'volume',\n            false,\n        );\n    }\n}\n\nexport default Listeners;\n","(function(root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    define([], factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory();\n  } else {\n    root.loadjs = factory();\n  }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n    bundleIdCache = {},\n    bundleResultCache = {},\n    bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n  // listify\n  bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n  var depsNotFound = [],\n      i = bundleIds.length,\n      numWaiting = i,\n      fn,\n      bundleId,\n      r,\n      q;\n\n  // define callback function\n  fn = function (bundleId, pathsNotFound) {\n    if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n    numWaiting--;\n    if (!numWaiting) callbackFn(depsNotFound);\n  };\n\n  // register callback\n  while (i--) {\n    bundleId = bundleIds[i];\n\n    // execute callback if in result cache\n    r = bundleResultCache[bundleId];\n    if (r) {\n      fn(bundleId, r);\n      continue;\n    }\n\n    // add to callback queue\n    q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n    q.push(fn);\n  }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n  // exit if id isn't defined\n  if (!bundleId) return;\n\n  var q = bundleCallbackQueue[bundleId];\n\n  // cache result\n  bundleResultCache[bundleId] = pathsNotFound;\n\n  // exit if queue is empty\n  if (!q) return;\n\n  // empty callback queue\n  while (q.length) {\n    q[0](bundleId, pathsNotFound);\n    q.splice(0, 1);\n  }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n  // accept function as argument\n  if (args.call) args = {success: args};\n\n  // success and error callbacks\n  if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n  else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFile(path, callbackFn, args, numTries) {\n  var doc = document,\n      async = args.async,\n      maxTries = (args.numRetries || 0) + 1,\n      beforeCallbackFn = args.before || devnull,\n      pathStripped = path.replace(/^(css|img)!/, ''),\n      isCss,\n      e;\n\n  numTries = numTries || 0;\n\n  if (/(^css!|\\.css$)/.test(path)) {\n    isCss = true;\n\n    // css\n    e = doc.createElement('link');\n    e.rel = 'stylesheet';\n    e.href = pathStripped; //.replace(/^css!/, '');  // remove \"css!\" prefix\n  } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n    // image\n    e = doc.createElement('img');\n    e.src = pathStripped;    \n  } else {\n    // javascript\n    e = doc.createElement('script');\n    e.src = path;\n    e.async = async === undefined ? true : async;\n  }\n\n  e.onload = e.onerror = e.onbeforeload = function (ev) {\n    var result = ev.type[0];\n\n    // Note: The following code isolates IE using `hideFocus` and treats empty\n    // stylesheets as failures to get around lack of onerror support\n    if (isCss && 'hideFocus' in e) {\n      try {\n        if (!e.sheet.cssText.length) result = 'e';\n      } catch (x) {\n        // sheets objects created from load errors don't allow access to\n        // `cssText`\n        result = 'e';\n      }\n    }\n\n    // handle retries in case of load failure\n    if (result == 'e') {\n      // increment counter\n      numTries += 1;\n\n      // exit function and try again\n      if (numTries < maxTries) {\n        return loadFile(path, callbackFn, args, numTries);\n      }\n    }\n\n    // execute callback\n    callbackFn(path, result, ev.defaultPrevented);\n  };\n\n  // add to document (unless callback returns `false`)\n  if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n  // listify paths\n  paths = paths.push ? paths : [paths];\n\n  var numWaiting = paths.length,\n      x = numWaiting,\n      pathsNotFound = [],\n      fn,\n      i;\n\n  // define callback function\n  fn = function(path, result, defaultPrevented) {\n    // handle error\n    if (result == 'e') pathsNotFound.push(path);\n\n    // handle beforeload event. If defaultPrevented then that means the load\n    // will be blocked (ex. Ghostery/ABP on Safari)\n    if (result == 'b') {\n      if (defaultPrevented) pathsNotFound.push(path);\n      else return;\n    }\n\n    numWaiting--;\n    if (!numWaiting) callbackFn(pathsNotFound);\n  };\n\n  // load scripts\n  for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n  var bundleId,\n      args;\n\n  // bundleId (if string)\n  if (arg1 && arg1.trim) bundleId = arg1;\n\n  // args (default is {})\n  args = (bundleId ? arg2 : arg1) || {};\n\n  // throw error if bundle is already defined\n  if (bundleId) {\n    if (bundleId in bundleIdCache) {\n      throw \"LoadJS\";\n    } else {\n      bundleIdCache[bundleId] = true;\n    }\n  }\n\n  // load scripts\n  loadFiles(paths, function (pathsNotFound) {\n    // execute callbacks\n    executeCallbacks(args, pathsNotFound);\n\n    // publish bundle load event\n    publish(bundleId, pathsNotFound);\n  }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.ready = function ready(deps, args) {\n  // subscribe to bundle load event\n  subscribe(deps, function (depsNotFound) {\n    // execute callbacks\n    executeCallbacks(args, depsNotFound);\n  });\n\n  return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n  publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n  bundleIdCache = {};\n  bundleResultCache = {};\n  bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n  return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Load an external script\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nexport default function loadScript(url) {\n    return new Promise((resolve, reject) => {\n        loadjs(url, {\n            success: resolve,\n            error: reject,\n        });\n    });\n}\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport captions from '../captions';\nimport controls from '../controls';\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { format, stripHTML } from '../utils/strings';\nimport { buildUrlParams } from '../utils/urls';\n\n// Parse Vimeo ID from URL\nfunction parseId(url) {\n    if (is.empty(url)) {\n        return null;\n    }\n\n    if (is.number(Number(url))) {\n        return url;\n    }\n\n    const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n    return url.match(regex) ? RegExp.$2 : url;\n}\n\n// Get aspect ratio for dimensions\nfunction getAspectRatio(width, height) {\n    const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n    const ratio = getRatio(width, height);\n    return `${width / ratio}:${height / ratio}`;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n    if (play && !this.embed.hasPlayed) {\n        this.embed.hasPlayed = true;\n    }\n    if (this.media.paused === play) {\n        this.media.paused = !play;\n        triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n    }\n}\n\nconst vimeo = {\n    setup() {\n        // Add embed class for responsive\n        toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n        // Set intial ratio\n        vimeo.setAspectRatio.call(this);\n\n        // Load the API if not already\n        if (!is.object(window.Vimeo)) {\n            loadScript(this.config.urls.vimeo.sdk)\n                .then(() => {\n                    vimeo.ready.call(this);\n                })\n                .catch(error => {\n                    this.debug.warn('Vimeo API failed to load', error);\n                });\n        } else {\n            vimeo.ready.call(this);\n        }\n    },\n\n    // Set aspect ratio\n    // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n    setAspectRatio(input) {\n        const [x, y] = (is.string(input) ? input : this.config.ratio).split(':');\n        const padding = 100 / x * y;\n        this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n        if (this.supported.ui) {\n            const height = 240;\n            const offset = (height - padding) / (height / 50);\n\n            this.media.style.transform = `translateY(-${offset}%)`;\n        }\n    },\n\n    // API Ready\n    ready() {\n        const player = this;\n\n        // Get Vimeo params for the iframe\n        const options = {\n            loop: player.config.loop.active,\n            autoplay: player.autoplay,\n            // muted: player.muted,\n            byline: false,\n            portrait: false,\n            title: false,\n            speed: true,\n            transparent: 0,\n            gesture: 'media',\n            playsinline: !this.config.fullscreen.iosNative,\n        };\n        const params = buildUrlParams(options);\n\n        // Get the source URL or ID\n        let source = player.media.getAttribute('src');\n\n        // Get from <div> if needed\n        if (is.empty(source)) {\n            source = player.media.getAttribute(player.config.attributes.embed.id);\n        }\n\n        const id = parseId(source);\n\n        // Build an iframe\n        const iframe = createElement('iframe');\n        const src = format(player.config.urls.vimeo.iframe, id, params);\n        iframe.setAttribute('src', src);\n        iframe.setAttribute('allowfullscreen', '');\n        iframe.setAttribute('allowtransparency', '');\n        iframe.setAttribute('allow', 'autoplay');\n\n        // Get poster, if already set\n        const { poster } = player;\n\n        // Inject the package\n        const wrapper = createElement('div', { poster, class: player.config.classNames.embedContainer });\n        wrapper.appendChild(iframe);\n        player.media = replaceElement(wrapper, player.media);\n\n        // Get poster image\n        fetch(format(player.config.urls.vimeo.api, id), 'json').then(response => {\n            if (is.empty(response)) {\n                return;\n            }\n\n            // Get the URL for thumbnail\n            const url = new URL(response[0].thumbnail_large);\n\n            // Get original image\n            url.pathname = `${url.pathname.split('_')[0]}.jpg`;\n\n            // Set and show poster\n            ui.setPoster.call(player, url.href).catch(() => {});\n        });\n\n        // Setup instance\n        // https://github.com/vimeo/player.js\n        player.embed = new window.Vimeo.Player(iframe, {\n            autopause: player.config.autopause,\n            muted: player.muted,\n        });\n\n        player.media.paused = true;\n        player.media.currentTime = 0;\n\n        // Disable native text track rendering\n        if (player.supported.ui) {\n            player.embed.disableTextTrack();\n        }\n\n        // Create a faux HTML5 API using the Vimeo API\n        player.media.play = () => {\n            assurePlaybackState.call(player, true);\n            return player.embed.play();\n        };\n\n        player.media.pause = () => {\n            assurePlaybackState.call(player, false);\n            return player.embed.pause();\n        };\n\n        player.media.stop = () => {\n            player.pause();\n            player.currentTime = 0;\n        };\n\n        // Seeking\n        let { currentTime } = player.media;\n        Object.defineProperty(player.media, 'currentTime', {\n            get() {\n                return currentTime;\n            },\n            set(time) {\n                // Vimeo will automatically play on seek if the video hasn't been played before\n\n                // Get current paused state and volume etc\n                const { embed, media, paused, volume } = player;\n                const restorePause = paused && !embed.hasPlayed;\n\n                // Set seeking state and trigger event\n                media.seeking = true;\n                triggerEvent.call(player, media, 'seeking');\n\n                // If paused, mute until seek is complete\n                Promise.resolve(restorePause && embed.setVolume(0))\n                    // Seek\n                    .then(() => embed.setCurrentTime(time))\n                    // Restore paused\n                    .then(() => restorePause && embed.pause())\n                    // Restore volume\n                    .then(() => restorePause && embed.setVolume(volume))\n                    .catch(() => {\n                        // Do nothing\n                    });\n            },\n        });\n\n        // Playback speed\n        let speed = player.config.speed.selected;\n        Object.defineProperty(player.media, 'playbackRate', {\n            get() {\n                return speed;\n            },\n            set(input) {\n                player.embed\n                    .setPlaybackRate(input)\n                    .then(() => {\n                        speed = input;\n                        triggerEvent.call(player, player.media, 'ratechange');\n                    })\n                    .catch(error => {\n                        // Hide menu item (and menu if empty)\n                        if (error.name === 'Error') {\n                            controls.setSpeedMenu.call(player, []);\n                        }\n                    });\n            },\n        });\n\n        // Volume\n        let { volume } = player.config;\n        Object.defineProperty(player.media, 'volume', {\n            get() {\n                return volume;\n            },\n            set(input) {\n                player.embed.setVolume(input).then(() => {\n                    volume = input;\n                    triggerEvent.call(player, player.media, 'volumechange');\n                });\n            },\n        });\n\n        // Muted\n        let { muted } = player.config;\n        Object.defineProperty(player.media, 'muted', {\n            get() {\n                return muted;\n            },\n            set(input) {\n                const toggle = is.boolean(input) ? input : false;\n\n                player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n                    muted = toggle;\n                    triggerEvent.call(player, player.media, 'volumechange');\n                });\n            },\n        });\n\n        // Loop\n        let { loop } = player.config;\n        Object.defineProperty(player.media, 'loop', {\n            get() {\n                return loop;\n            },\n            set(input) {\n                const toggle = is.boolean(input) ? input : player.config.loop.active;\n\n                player.embed.setLoop(toggle).then(() => {\n                    loop = toggle;\n                });\n            },\n        });\n\n        // Source\n        let currentSrc;\n        player.embed\n            .getVideoUrl()\n            .then(value => {\n                currentSrc = value;\n            })\n            .catch(error => {\n                this.debug.warn(error);\n            });\n\n        Object.defineProperty(player.media, 'currentSrc', {\n            get() {\n                return currentSrc;\n            },\n        });\n\n        // Ended\n        Object.defineProperty(player.media, 'ended', {\n            get() {\n                return player.currentTime === player.duration;\n            },\n        });\n\n        // Set aspect ratio based on video size\n        Promise.all([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(dimensions => {\n            const ratio = getAspectRatio(dimensions[0], dimensions[1]);\n            vimeo.setAspectRatio.call(this, ratio);\n        });\n\n        // Set autopause\n        player.embed.setAutopause(player.config.autopause).then(state => {\n            player.config.autopause = state;\n        });\n\n        // Get title\n        player.embed.getVideoTitle().then(title => {\n            player.config.title = title;\n            ui.setTitle.call(this);\n        });\n\n        // Get current time\n        player.embed.getCurrentTime().then(value => {\n            currentTime = value;\n            triggerEvent.call(player, player.media, 'timeupdate');\n        });\n\n        // Get duration\n        player.embed.getDuration().then(value => {\n            player.media.duration = value;\n            triggerEvent.call(player, player.media, 'durationchange');\n        });\n\n        // Get captions\n        player.embed.getTextTracks().then(tracks => {\n            player.media.textTracks = tracks;\n            captions.setup.call(player);\n        });\n\n        player.embed.on('cuechange', ({ cues = [] }) => {\n            const strippedCues = cues.map(cue => stripHTML(cue.text));\n            captions.updateCues.call(player, strippedCues);\n        });\n\n        player.embed.on('loaded', () => {\n            // Assure state and events are updated on autoplay\n            player.embed.getPaused().then(paused => {\n                assurePlaybackState.call(player, !paused);\n                if (!paused) {\n                    triggerEvent.call(player, player.media, 'playing');\n                }\n            });\n\n            if (is.element(player.embed.element) && player.supported.ui) {\n                const frame = player.embed.element;\n\n                // Fix keyboard focus issues\n                // https://github.com/sampotts/plyr/issues/317\n                frame.setAttribute('tabindex', -1);\n            }\n        });\n\n        player.embed.on('play', () => {\n            assurePlaybackState.call(player, true);\n            triggerEvent.call(player, player.media, 'playing');\n        });\n\n        player.embed.on('pause', () => {\n            assurePlaybackState.call(player, false);\n        });\n\n        player.embed.on('timeupdate', data => {\n            player.media.seeking = false;\n            currentTime = data.seconds;\n            triggerEvent.call(player, player.media, 'timeupdate');\n        });\n\n        player.embed.on('progress', data => {\n            player.media.buffered = data.percent;\n            triggerEvent.call(player, player.media, 'progress');\n\n            // Check all loaded\n            if (parseInt(data.percent, 10) === 1) {\n                triggerEvent.call(player, player.media, 'canplaythrough');\n            }\n\n            // Get duration as if we do it before load, it gives an incorrect value\n            // https://github.com/sampotts/plyr/issues/891\n            player.embed.getDuration().then(value => {\n                if (value !== player.media.duration) {\n                    player.media.duration = value;\n                    triggerEvent.call(player, player.media, 'durationchange');\n                }\n            });\n        });\n\n        player.embed.on('seeked', () => {\n            player.media.seeking = false;\n            triggerEvent.call(player, player.media, 'seeked');\n        });\n\n        player.embed.on('ended', () => {\n            player.media.paused = true;\n            triggerEvent.call(player, player.media, 'ended');\n        });\n\n        player.embed.on('error', detail => {\n            player.media.error = detail;\n            triggerEvent.call(player, player.media, 'error');\n        });\n\n        // Rebuild UI\n        setTimeout(() => ui.build.call(player), 0);\n    },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport ui from '../ui';\nimport { createElement, replaceElement, toggleClass } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport fetch from '../utils/fetch';\nimport is from '../utils/is';\nimport loadImage from '../utils/loadImage';\nimport loadScript from '../utils/loadScript';\nimport { format, generateId } from '../utils/strings';\n\n// Parse YouTube ID from URL\nfunction parseId(url) {\n    if (is.empty(url)) {\n        return null;\n    }\n\n    const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n    return url.match(regex) ? RegExp.$2 : url;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n    if (play && !this.embed.hasPlayed) {\n        this.embed.hasPlayed = true;\n    }\n    if (this.media.paused === play) {\n        this.media.paused = !play;\n        triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n    }\n}\n\nconst youtube = {\n    setup() {\n        // Add embed class for responsive\n        toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n        // Set aspect ratio\n        youtube.setAspectRatio.call(this);\n\n        // Setup API\n        if (is.object(window.YT) && is.function(window.YT.Player)) {\n            youtube.ready.call(this);\n        } else {\n            // Load the API\n            loadScript(this.config.urls.youtube.sdk).catch(error => {\n                this.debug.warn('YouTube API failed to load', error);\n            });\n\n            // Setup callback for the API\n            // YouTube has it's own system of course...\n            window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n            // Add to queue\n            window.onYouTubeReadyCallbacks.push(() => {\n                youtube.ready.call(this);\n            });\n\n            // Set callback to process queue\n            window.onYouTubeIframeAPIReady = () => {\n                window.onYouTubeReadyCallbacks.forEach(callback => {\n                    callback();\n                });\n            };\n        }\n    },\n\n    // Get the media title\n    getTitle(videoId) {\n        // Try via undocumented API method first\n        // This method disappears now and then though...\n        // https://github.com/sampotts/plyr/issues/709\n        if (is.function(this.embed.getVideoData)) {\n            const { title } = this.embed.getVideoData();\n\n            if (is.empty(title)) {\n                this.config.title = title;\n                ui.setTitle.call(this);\n                return;\n            }\n        }\n\n        // Or via Google API\n        const key = this.config.keys.google;\n        if (is.string(key) && !is.empty(key)) {\n            const url = format(this.config.urls.youtube.api, videoId, key);\n\n            fetch(url)\n                .then(result => {\n                    if (is.object(result)) {\n                        this.config.title = result.items[0].snippet.title;\n                        ui.setTitle.call(this);\n                    }\n                })\n                .catch(() => {});\n        }\n    },\n\n    // Set aspect ratio\n    setAspectRatio() {\n        const ratio = this.config.ratio.split(':');\n        this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n    },\n\n    // API ready\n    ready() {\n        const player = this;\n\n        // Ignore already setup (race condition)\n        const currentId = player.media.getAttribute('id');\n        if (!is.empty(currentId) && currentId.startsWith('youtube-')) {\n            return;\n        }\n\n        // Get the source URL or ID\n        let source = player.media.getAttribute('src');\n\n        // Get from <div> if needed\n        if (is.empty(source)) {\n            source = player.media.getAttribute(this.config.attributes.embed.id);\n        }\n\n        // Replace the <iframe> with a <div> due to YouTube API issues\n        const videoId = parseId(source);\n        const id = generateId(player.provider);\n\n        // Get poster, if already set\n        const { poster } = player;\n\n        // Replace media element\n        const container = createElement('div', { id, poster });\n        player.media = replaceElement(container, player.media);\n\n        // Id to poster wrapper\n        const posterSrc = format => `https://img.youtube.com/vi/${videoId}/${format}default.jpg`;\n\n        // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n        loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n            .catch(() => loadImage(posterSrc('sd'), 121)) // 480p padded 4:3\n            .catch(() => loadImage(posterSrc('hq'))) // 360p padded 4:3. Always exists\n            .then(image => ui.setPoster.call(player, image.src))\n            .then(posterSrc => {\n                // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n                if (!posterSrc.includes('maxres')) {\n                    player.elements.poster.style.backgroundSize = 'cover';\n                }\n            })\n            .catch(() => {});\n\n        // Setup instance\n        // https://developers.google.com/youtube/iframe_api_reference\n        player.embed = new window.YT.Player(id, {\n            videoId,\n            playerVars: {\n                autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n                hl: player.config.hl, // iframe interface language\n                controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n                rel: 0, // No related vids\n                showinfo: 0, // Hide info\n                iv_load_policy: 3, // Hide annotations\n                modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n                disablekb: 1, // Disable keyboard as we handle it\n                playsinline: 1, // Allow iOS inline playback\n\n                // Tracking for stats\n                // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n                widget_referrer: window ? window.location.href : null,\n\n                // Captions are flaky on YouTube\n                cc_load_policy: player.captions.active ? 1 : 0,\n                cc_lang_pref: player.config.captions.language,\n            },\n            events: {\n                onError(event) {\n                    // YouTube may fire onError twice, so only handle it once\n                    if (!player.media.error) {\n                        const code = event.data;\n                        // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n                        const message =\n                            {\n                                2: 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.',\n                                5: 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.',\n                                100: 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.',\n                                101: 'The owner of the requested video does not allow it to be played in embedded players.',\n                                150: 'The owner of the requested video does not allow it to be played in embedded players.',\n                            }[code] || 'An unknown error occured';\n\n                        player.media.error = { code, message };\n\n                        triggerEvent.call(player, player.media, 'error');\n                    }\n                },\n                onPlaybackRateChange(event) {\n                    // Get the instance\n                    const instance = event.target;\n\n                    // Get current speed\n                    player.media.playbackRate = instance.getPlaybackRate();\n\n                    triggerEvent.call(player, player.media, 'ratechange');\n                },\n                onReady(event) {\n                    // Bail if onReady has already been called. See issue #1108\n                    if (is.function(player.media.play)) {\n                        return;\n                    }\n                    // Get the instance\n                    const instance = event.target;\n\n                    // Get the title\n                    youtube.getTitle.call(player, videoId);\n\n                    // Create a faux HTML5 API using the YouTube API\n                    player.media.play = () => {\n                        assurePlaybackState.call(player, true);\n                        instance.playVideo();\n                    };\n\n                    player.media.pause = () => {\n                        assurePlaybackState.call(player, false);\n                        instance.pauseVideo();\n                    };\n\n                    player.media.stop = () => {\n                        instance.stopVideo();\n                    };\n\n                    player.media.duration = instance.getDuration();\n                    player.media.paused = true;\n\n                    // Seeking\n                    player.media.currentTime = 0;\n                    Object.defineProperty(player.media, 'currentTime', {\n                        get() {\n                            return Number(instance.getCurrentTime());\n                        },\n                        set(time) {\n                            // If paused and never played, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n                            if (player.paused && !player.embed.hasPlayed) {\n                                player.embed.mute();\n                            }\n\n                            // Set seeking state and trigger event\n                            player.media.seeking = true;\n                            triggerEvent.call(player, player.media, 'seeking');\n\n                            // Seek after events sent\n                            instance.seekTo(time);\n                        },\n                    });\n\n                    // Playback speed\n                    Object.defineProperty(player.media, 'playbackRate', {\n                        get() {\n                            return instance.getPlaybackRate();\n                        },\n                        set(input) {\n                            instance.setPlaybackRate(input);\n                        },\n                    });\n\n                    // Volume\n                    let { volume } = player.config;\n                    Object.defineProperty(player.media, 'volume', {\n                        get() {\n                            return volume;\n                        },\n                        set(input) {\n                            volume = input;\n                            instance.setVolume(volume * 100);\n                            triggerEvent.call(player, player.media, 'volumechange');\n                        },\n                    });\n\n                    // Muted\n                    let { muted } = player.config;\n                    Object.defineProperty(player.media, 'muted', {\n                        get() {\n                            return muted;\n                        },\n                        set(input) {\n                            const toggle = is.boolean(input) ? input : muted;\n                            muted = toggle;\n                            instance[toggle ? 'mute' : 'unMute']();\n                            triggerEvent.call(player, player.media, 'volumechange');\n                        },\n                    });\n\n                    // Source\n                    Object.defineProperty(player.media, 'currentSrc', {\n                        get() {\n                            return instance.getVideoUrl();\n                        },\n                    });\n\n                    // Ended\n                    Object.defineProperty(player.media, 'ended', {\n                        get() {\n                            return player.currentTime === player.duration;\n                        },\n                    });\n\n                    // Get available speeds\n                    player.options.speed = instance.getAvailablePlaybackRates();\n\n                    // Set the tabindex to avoid focus entering iframe\n                    if (player.supported.ui) {\n                        player.media.setAttribute('tabindex', -1);\n                    }\n\n                    triggerEvent.call(player, player.media, 'timeupdate');\n                    triggerEvent.call(player, player.media, 'durationchange');\n\n                    // Reset timer\n                    clearInterval(player.timers.buffering);\n\n                    // Setup buffering\n                    player.timers.buffering = setInterval(() => {\n                        // Get loaded % from YouTube\n                        player.media.buffered = instance.getVideoLoadedFraction();\n\n                        // Trigger progress only when we actually buffer something\n                        if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n                            triggerEvent.call(player, player.media, 'progress');\n                        }\n\n                        // Set last buffer point\n                        player.media.lastBuffered = player.media.buffered;\n\n                        // Bail if we're at 100%\n                        if (player.media.buffered === 1) {\n                            clearInterval(player.timers.buffering);\n\n                            // Trigger event\n                            triggerEvent.call(player, player.media, 'canplaythrough');\n                        }\n                    }, 200);\n\n                    // Rebuild UI\n                    setTimeout(() => ui.build.call(player), 50);\n                },\n                onStateChange(event) {\n                    // Get the instance\n                    const instance = event.target;\n\n                    // Reset timer\n                    clearInterval(player.timers.playing);\n\n                    const seeked = player.media.seeking && [1, 2].includes(event.data);\n\n                    if (seeked) {\n                        // Unset seeking and fire seeked event\n                        player.media.seeking = false;\n                        triggerEvent.call(player, player.media, 'seeked');\n                    }\n\n                    // Handle events\n                    // -1   Unstarted\n                    // 0    Ended\n                    // 1    Playing\n                    // 2    Paused\n                    // 3    Buffering\n                    // 5    Video cued\n                    switch (event.data) {\n                        case -1:\n                            // Update scrubber\n                            triggerEvent.call(player, player.media, 'timeupdate');\n\n                            // Get loaded % from YouTube\n                            player.media.buffered = instance.getVideoLoadedFraction();\n                            triggerEvent.call(player, player.media, 'progress');\n\n                            break;\n\n                        case 0:\n                            assurePlaybackState.call(player, false);\n\n                            // YouTube doesn't support loop for a single video, so mimick it.\n                            if (player.media.loop) {\n                                // YouTube needs a call to `stopVideo` before playing again\n                                instance.stopVideo();\n                                instance.playVideo();\n                            } else {\n                                triggerEvent.call(player, player.media, 'ended');\n                            }\n\n                            break;\n\n                        case 1:\n                            // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n                            if (player.media.paused && !player.embed.hasPlayed) {\n                                player.media.pause();\n                            } else {\n                                assurePlaybackState.call(player, true);\n\n                                triggerEvent.call(player, player.media, 'playing');\n\n                                // Poll to get playback progress\n                                player.timers.playing = setInterval(() => {\n                                    triggerEvent.call(player, player.media, 'timeupdate');\n                                }, 50);\n\n                                // Check duration again due to YouTube bug\n                                // https://github.com/sampotts/plyr/issues/374\n                                // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n                                if (player.media.duration !== instance.getDuration()) {\n                                    player.media.duration = instance.getDuration();\n                                    triggerEvent.call(player, player.media, 'durationchange');\n                                }\n                            }\n\n                            break;\n\n                        case 2:\n                            // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n                            if (!player.muted) {\n                                player.embed.unMute();\n                            }\n                            assurePlaybackState.call(player, false);\n\n                            break;\n\n                        default:\n                            break;\n                    }\n\n                    triggerEvent.call(player, player.elements.container, 'statechange', false, {\n                        code: event.data,\n                    });\n                },\n            },\n        });\n    },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport html5 from './html5';\nimport vimeo from './plugins/vimeo';\nimport youtube from './plugins/youtube';\nimport { createElement, toggleClass, wrap } from './utils/elements';\n\nconst media = {\n    // Setup media\n    setup() {\n        // If there's no media, bail\n        if (!this.media) {\n            this.debug.warn('No media element found!');\n            return;\n        }\n\n        // Add type class\n        toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n        // Add provider class\n        toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n        // Add video class for embeds\n        // This will require changes if audio embeds are added\n        if (this.isEmbed) {\n            toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n        }\n\n        // Inject the player wrapper\n        if (this.isVideo) {\n            // Create the wrapper div\n            this.elements.wrapper = createElement('div', {\n                class: this.config.classNames.video,\n            });\n\n            // Wrap the video in a container\n            wrap(this.media, this.elements.wrapper);\n\n            // Faux poster container\n            this.elements.poster = createElement('div', {\n                class: this.config.classNames.poster,\n            });\n\n            this.elements.wrapper.appendChild(this.elements.poster);\n        }\n\n        if (this.isHTML5) {\n            html5.extend.call(this);\n        } else if (this.isYouTube) {\n            youtube.setup.call(this);\n        } else if (this.isVimeo) {\n            vimeo.setup.call(this);\n        }\n    },\n};\n\nexport default media;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\nimport i18n from '../utils/i18n';\nimport is from '../utils/is';\nimport loadScript from '../utils/loadScript';\nimport { formatTime } from '../utils/time';\nimport { buildUrlParams } from '../utils/urls';\n\nclass Ads {\n    /**\n     * Ads constructor.\n     * @param {object} player\n     * @return {Ads}\n     */\n    constructor(player) {\n        this.player = player;\n        this.publisherId = player.config.ads.publisherId;\n        this.playing = false;\n        this.initialized = false;\n        this.elements = {\n            container: null,\n            displayContainer: null,\n        };\n        this.manager = null;\n        this.loader = null;\n        this.cuePoints = null;\n        this.events = {};\n        this.safetyTimer = null;\n        this.countdownTimer = null;\n\n        // Setup a promise to resolve when the IMA manager is ready\n        this.managerPromise = new Promise((resolve, reject) => {\n            // The ad is loaded and ready\n            this.on('loaded', resolve);\n\n            // Ads failed\n            this.on('error', reject);\n        });\n\n        this.load();\n    }\n\n    get enabled() {\n        return (\n            this.player.isHTML5 && this.player.isVideo && this.player.config.ads.enabled && !is.empty(this.publisherId)\n        );\n    }\n\n    /**\n     * Load the IMA SDK\n     */\n    load() {\n        if (this.enabled) {\n            // Check if the Google IMA3 SDK is loaded or load it ourselves\n            if (!is.object(window.google) || !is.object(window.google.ima)) {\n                loadScript(this.player.config.urls.googleIMA.sdk)\n                    .then(() => {\n                        this.ready();\n                    })\n                    .catch(() => {\n                        // Script failed to load or is blocked\n                        this.trigger('error', new Error('Google IMA SDK failed to load'));\n                    });\n            } else {\n                this.ready();\n            }\n        }\n    }\n\n    /**\n     * Get the ads instance ready\n     */\n    ready() {\n        // Start ticking our safety timer. If the whole advertisement\n        // thing doesn't resolve within our set time; we bail\n        this.startSafetyTimer(12000, 'ready()');\n\n        // Clear the safety timer\n        this.managerPromise.then(() => {\n            this.clearSafetyTimer('onAdsManagerLoaded()');\n        });\n\n        // Set listeners on the Plyr instance\n        this.listeners();\n\n        // Setup the IMA SDK\n        this.setupIMA();\n    }\n\n    // Build the default tag URL\n    get tagUrl() {\n        const params = {\n            AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n            AV_CHANNELID: '5a0458dc28a06145e4519d21',\n            AV_URL: window.location.hostname,\n            cb: Date.now(),\n            AV_WIDTH: 640,\n            AV_HEIGHT: 480,\n            AV_CDIM2: this.publisherId,\n        };\n\n        const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n        return `${base}?${buildUrlParams(params)}`;\n    }\n\n    /**\n     * In order for the SDK to display ads for our video, we need to tell it where to put them,\n     * so here we define our ad container. This div is set up to render on top of the video player.\n     * Using the code below, we tell the SDK to render ads within that div. We also provide a\n     * handle to the content video player - the SDK will poll the current time of our player to\n     * properly place mid-rolls. After we create the ad display container, we initialize it. On\n     * mobile devices, this initialization is done as the result of a user action.\n     */\n    setupIMA() {\n        // Create the container for our advertisements\n        this.elements.container = createElement('div', {\n            class: this.player.config.classNames.ads,\n        });\n        this.player.elements.container.appendChild(this.elements.container);\n\n        // So we can run VPAID2\n        google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n        // Set language\n        google.ima.settings.setLocale(this.player.config.ads.language);\n\n        // We assume the adContainer is the video container of the plyr element\n        // that will house the ads\n        this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n        // Request video ads to be pre-loaded\n        this.requestAds();\n    }\n\n    /**\n     * Request advertisements\n     */\n    requestAds() {\n        const { container } = this.player.elements;\n\n        try {\n            // Create ads loader\n            this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n            // Listen and respond to ads loaded and error events\n            this.loader.addEventListener(\n                google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,\n                event => this.onAdsManagerLoaded(event),\n                false,\n            );\n            this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n            // Request video ads\n            const request = new google.ima.AdsRequest();\n            request.adTagUrl = this.tagUrl;\n\n            // Specify the linear and nonlinear slot sizes. This helps the SDK\n            // to select the correct creative if multiple are returned\n            request.linearAdSlotWidth = container.offsetWidth;\n            request.linearAdSlotHeight = container.offsetHeight;\n            request.nonLinearAdSlotWidth = container.offsetWidth;\n            request.nonLinearAdSlotHeight = container.offsetHeight;\n\n            // We only overlay ads as we only support video.\n            request.forceNonLinearFullSlot = false;\n\n            // Mute based on current state\n            request.setAdWillPlayMuted(!this.player.muted);\n\n            this.loader.requestAds(request);\n        } catch (e) {\n            this.onAdError(e);\n        }\n    }\n\n    /**\n     * Update the ad countdown\n     * @param {boolean} start\n     */\n    pollCountdown(start = false) {\n        if (!start) {\n            clearInterval(this.countdownTimer);\n            this.elements.container.removeAttribute('data-badge-text');\n            return;\n        }\n\n        const update = () => {\n            const time = formatTime(Math.max(this.manager.getRemainingTime(), 0));\n            const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n            this.elements.container.setAttribute('data-badge-text', label);\n        };\n\n        this.countdownTimer = setInterval(update, 100);\n    }\n\n    /**\n     * This method is called whenever the ads are ready inside the AdDisplayContainer\n     * @param {Event} adsManagerLoadedEvent\n     */\n    onAdsManagerLoaded(event) {\n        // Load could occur after a source change (race condition)\n        if (!this.enabled) {\n            return;\n        }\n\n        // Get the ads manager\n        const settings = new google.ima.AdsRenderingSettings();\n\n        // Tell the SDK to save and restore content video state on our behalf\n        settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n        settings.enablePreloading = true;\n\n        // The SDK is polling currentTime on the contentPlayback. And needs a duration\n        // so it can determine when to start the mid- and post-roll\n        this.manager = event.getAdsManager(this.player, settings);\n\n        // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n        this.cuePoints = this.manager.getCuePoints();\n\n        // Add advertisement cue's within the time line if available\n        if (!is.empty(this.cuePoints)) {\n            this.cuePoints.forEach(cuePoint => {\n                if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n                    const seekElement = this.player.elements.progress;\n\n                    if (is.element(seekElement)) {\n                        const cuePercentage = 100 / this.player.duration * cuePoint;\n                        const cue = createElement('span', {\n                            class: this.player.config.classNames.cues,\n                        });\n\n                        cue.style.left = `${cuePercentage.toString()}%`;\n                        seekElement.appendChild(cue);\n                    }\n                }\n            });\n        }\n\n        // Set volume to match player\n        this.manager.setVolume(this.player.volume);\n\n        // Add listeners to the required events\n        // Advertisement error events\n        this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n        // Advertisement regular events\n        Object.keys(google.ima.AdEvent.Type).forEach(type => {\n            this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n        });\n\n        // Resolve our adsManager\n        this.trigger('loaded');\n    }\n\n    /**\n     * This is where all the event handling takes place. Retrieve the ad from the event. Some\n     * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n     * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n     * @param {Event} event\n     */\n    onAdEvent(event) {\n        const { container } = this.player.elements;\n\n        // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n        // don't have ad object associated\n        const ad = event.getAd();\n\n        // Proxy event\n        const dispatchEvent = type => {\n            const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n            triggerEvent.call(this.player, this.player.media, event);\n        };\n\n        switch (event.type) {\n            case google.ima.AdEvent.Type.LOADED:\n                // This is the first event sent for an ad - it is possible to determine whether the\n                // ad is a video ad or an overlay\n                this.trigger('loaded');\n\n                // Bubble event\n                dispatchEvent(event.type);\n\n                // Start countdown\n                this.pollCountdown(true);\n\n                if (!ad.isLinear()) {\n                    // Position AdDisplayContainer correctly for overlay\n                    ad.width = container.offsetWidth;\n                    ad.height = container.offsetHeight;\n                }\n\n                // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n                // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n                break;\n\n            case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n                // All ads for the current videos are done. We can now request new advertisements\n                // in case the video is re-played\n\n                // Fire event\n                dispatchEvent(event.type);\n\n                // TODO: Example for what happens when a next video in a playlist would be loaded.\n                // So here we load a new video when all ads are done.\n                // Then we load new ads within a new adsManager. When the video\n                // Is started - after - the ads are loaded, then we get ads.\n                // You can also easily test cancelling and reloading by running\n                // player.ads.cancel() and player.ads.play from the console I guess.\n                // this.player.source = {\n                //     type: 'video',\n                //     title: 'View From A Blue Moon',\n                //     sources: [{\n                //         src:\n                // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n                // 'video/mp4', }], poster:\n                // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n                // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n                // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n                // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n                // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n                // };\n\n                // TODO: So there is still this thing where a video should only be allowed to start\n                // playing when the IMA SDK is ready or has failed\n\n                this.loadAds();\n                break;\n\n            case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n                // This event indicates the ad has started - the video player can adjust the UI,\n                // for example display a pause button and remaining time. Fired when content should\n                // be paused. This usually happens right before an ad is about to cover the content\n\n                dispatchEvent(event.type);\n\n                this.pauseContent();\n\n                break;\n\n            case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n                // This event indicates the ad has finished - the video player can perform\n                // appropriate UI actions, such as removing the timer for remaining time detection.\n                // Fired when content should be resumed. This usually happens when an ad finishes\n                // or collapses\n\n                dispatchEvent(event.type);\n\n                this.pollCountdown();\n\n                this.resumeContent();\n\n                break;\n\n            case google.ima.AdEvent.Type.STARTED:\n            case google.ima.AdEvent.Type.MIDPOINT:\n            case google.ima.AdEvent.Type.COMPLETE:\n            case google.ima.AdEvent.Type.IMPRESSION:\n            case google.ima.AdEvent.Type.CLICK:\n                dispatchEvent(event.type);\n                break;\n\n            default:\n                break;\n        }\n    }\n\n    /**\n     * Any ad error handling comes through here\n     * @param {Event} event\n     */\n    onAdError(event) {\n        this.cancel();\n        this.player.debug.warn('Ads error', event);\n    }\n\n    /**\n     * Setup hooks for Plyr and window events. This ensures\n     * the mid- and post-roll launch at the correct time. And\n     * resize the advertisement when the player resizes\n     */\n    listeners() {\n        const { container } = this.player.elements;\n        let time;\n\n        // Add listeners to the required events\n        this.player.on('ended', () => {\n            this.loader.contentComplete();\n        });\n\n        this.player.on('seeking', () => {\n            time = this.player.currentTime;\n            return time;\n        });\n\n        this.player.on('seeked', () => {\n            const seekedTime = this.player.currentTime;\n\n            if (is.empty(this.cuePoints)) {\n                return;\n            }\n\n            this.cuePoints.forEach((cuePoint, index) => {\n                if (time < cuePoint && cuePoint < seekedTime) {\n                    this.manager.discardAdBreak();\n                    this.cuePoints.splice(index, 1);\n                }\n            });\n        });\n\n        // Listen to the resizing of the window. And resize ad accordingly\n        // TODO: eventually implement ResizeObserver\n        window.addEventListener('resize', () => {\n            if (this.manager) {\n                this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n            }\n        });\n    }\n\n    /**\n     * Initialize the adsManager and start playing advertisements\n     */\n    play() {\n        const { container } = this.player.elements;\n\n        if (!this.managerPromise) {\n            this.resumeContent();\n        }\n\n        // Play the requested advertisement whenever the adsManager is ready\n        this.managerPromise\n            .then(() => {\n                // Initialize the container. Must be done via a user action on mobile devices\n                this.elements.displayContainer.initialize();\n\n                try {\n                    if (!this.initialized) {\n                        // Initialize the ads manager. Ad rules playlist will start at this time\n                        this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n                        // Call play to start showing the ad. Single video and overlay ads will\n                        // start at this time; the call will be ignored for ad rules\n                        this.manager.start();\n                    }\n\n                    this.initialized = true;\n                } catch (adError) {\n                    // An error may be thrown if there was a problem with the\n                    // VAST response\n                    this.onAdError(adError);\n                }\n            })\n            .catch(() => {});\n    }\n\n    /**\n     * Resume our video\n     */\n    resumeContent() {\n        // Hide the advertisement container\n        this.elements.container.style.zIndex = '';\n\n        // Ad is stopped\n        this.playing = false;\n\n        // Play our video\n        if (this.player.currentTime < this.player.duration) {\n            this.player.play();\n        }\n    }\n\n    /**\n     * Pause our video\n     */\n    pauseContent() {\n        // Show the advertisement container\n        this.elements.container.style.zIndex = 3;\n\n        // Ad is playing.\n        this.playing = true;\n\n        // Pause our video.\n        this.player.pause();\n    }\n\n    /**\n     * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n     * allowed to call new ads based on google policies, as they interpret this as an accidental\n     * video requests. https://developers.google.com/interactive-\n     * media-ads/docs/sdks/android/faq#8\n     */\n    cancel() {\n        // Pause our video\n        if (this.initialized) {\n            this.resumeContent();\n        }\n\n        // Tell our instance that we're done for now\n        this.trigger('error');\n\n        // Re-create our adsManager\n        this.loadAds();\n    }\n\n    /**\n     * Re-create our adsManager\n     */\n    loadAds() {\n        // Tell our adsManager to go bye bye\n        this.managerPromise\n            .then(() => {\n                // Destroy our adsManager\n                if (this.manager) {\n                    this.manager.destroy();\n                }\n\n                // Re-set our adsManager promises\n                this.managerPromise = new Promise(resolve => {\n                    this.on('loaded', resolve);\n                    this.player.debug.log(this.manager);\n                });\n\n                // Now request some new advertisements\n                this.requestAds();\n            })\n            .catch(() => {});\n    }\n\n    /**\n     * Handles callbacks after an ad event was invoked\n     * @param {string} event - Event type\n     */\n    trigger(event, ...args) {\n        const handlers = this.events[event];\n\n        if (is.array(handlers)) {\n            handlers.forEach(handler => {\n                if (is.function(handler)) {\n                    handler.apply(this, args);\n                }\n            });\n        }\n    }\n\n    /**\n     * Add event listeners\n     * @param {string} event - Event type\n     * @param {function} callback - Callback for when event occurs\n     * @return {Ads}\n     */\n    on(event, callback) {\n        if (!is.array(this.events[event])) {\n            this.events[event] = [];\n        }\n\n        this.events[event].push(callback);\n\n        return this;\n    }\n\n    /**\n     * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n     * The advertisement has 12 seconds to get its things together. We stop this timer when the\n     * advertisement is playing, or when a user action is required to start, then we clear the\n     * timer on ad ready\n     * @param {number} time\n     * @param {string} from\n     */\n    startSafetyTimer(time, from) {\n        this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n        this.safetyTimer = setTimeout(() => {\n            this.cancel();\n            this.clearSafetyTimer('startSafetyTimer()');\n        }, time);\n    }\n\n    /**\n     * Clear our safety timer(s)\n     * @param {string} from\n     */\n    clearSafetyTimer(from) {\n        if (!is.nullOrUndefined(this.safetyTimer)) {\n            this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n            clearTimeout(this.safetyTimer);\n            this.safetyTimer = null;\n        }\n    }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './config/types';\nimport html5 from './html5';\nimport media from './media';\nimport support from './support';\nimport ui from './ui';\nimport { createElement, insertElement, removeElement } from './utils/elements';\nimport is from './utils/is';\nimport { getDeep } from './utils/objects';\n\nconst source = {\n    // Add elements to HTML5 media (source, tracks, etc)\n    insertElements(type, attributes) {\n        if (is.string(attributes)) {\n            insertElement(type, this.media, {\n                src: attributes,\n            });\n        } else if (is.array(attributes)) {\n            attributes.forEach(attribute => {\n                insertElement(type, this.media, attribute);\n            });\n        }\n    },\n\n    // Update source\n    // Sources are not checked for support so be careful\n    change(input) {\n        if (!getDeep(input, 'sources.length')) {\n            this.debug.warn('Invalid source format');\n            return;\n        }\n\n        // Cancel current network requests\n        html5.cancelRequests.call(this);\n\n        // Destroy instance and re-setup\n        this.destroy.call(\n            this,\n            () => {\n                // Reset quality options\n                this.options.quality = [];\n\n                // Remove elements\n                removeElement(this.media);\n                this.media = null;\n\n                // Reset class name\n                if (is.element(this.elements.container)) {\n                    this.elements.container.removeAttribute('class');\n                }\n\n                // Set the type and provider\n                const { sources, type } = input;\n                const [{ provider = providers.html5, src }] = sources;\n                const tagName = provider === 'html5' ? type : 'div';\n                const attributes = provider === 'html5' ? {} : { src };\n\n                Object.assign(this, {\n                    provider,\n                    type,\n                    // Check for support\n                    supported: support.check(type, provider, this.config.playsinline),\n                    // Create new element\n                    media: createElement(tagName, attributes),\n                });\n\n                // Inject the new element\n                this.elements.container.appendChild(this.media);\n\n                // Autoplay the new source?\n                if (is.boolean(input.autoplay)) {\n                    this.config.autoplay = input.autoplay;\n                }\n\n                // Set attributes for audio and video\n                if (this.isHTML5) {\n                    if (this.config.crossorigin) {\n                        this.media.setAttribute('crossorigin', '');\n                    }\n                    if (this.config.autoplay) {\n                        this.media.setAttribute('autoplay', '');\n                    }\n                    if (!is.empty(input.poster)) {\n                        this.poster = input.poster;\n                    }\n                    if (this.config.loop.active) {\n                        this.media.setAttribute('loop', '');\n                    }\n                    if (this.config.muted) {\n                        this.media.setAttribute('muted', '');\n                    }\n                    if (this.config.playsinline) {\n                        this.media.setAttribute('playsinline', '');\n                    }\n                }\n\n                // Restore class hook\n                ui.addStyleHook.call(this);\n\n                // Set new sources for html5\n                if (this.isHTML5) {\n                    source.insertElements.call(this, 'source', sources);\n                }\n\n                // Set video title\n                this.config.title = input.title;\n\n                // Set up from scratch\n                media.setup.call(this);\n\n                // HTML5 stuff\n                if (this.isHTML5) {\n                    // Setup captions\n                    if ('tracks' in input) {\n                        source.insertElements.call(this, 'track', input.tracks);\n                    }\n\n                    // Load HTML5 sources\n                    this.media.load();\n                }\n\n                // If HTML5 or embed but not fully supported, setupInterface and call ready now\n                if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n                    // Setup interface\n                    ui.build.call(this);\n                }\n\n                // Update the fullscreen support\n                this.fullscreen.update();\n            },\n            true,\n        );\n    },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.4.0\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport captions from './captions';\nimport defaults from './config/defaults';\nimport { getProviderByUrl, providers, types } from './config/types';\nimport Console from './console';\nimport controls from './controls';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport media from './media';\nimport Ads from './plugins/ads';\nimport source from './source';\nimport Storage from './storage';\nimport support from './support';\nimport ui from './ui';\nimport { closest } from './utils/arrays';\nimport { createElement, hasClass, removeElement, replaceElement, toggleClass, wrap } from './utils/elements';\nimport { off, on, once, triggerEvent, unbindListeners } from './utils/events';\nimport is from './utils/is';\nimport loadSprite from './utils/loadSprite';\nimport { cloneDeep, extend } from './utils/objects';\nimport { parseUrl } from './utils/urls';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n    constructor(target, options) {\n        this.timers = {};\n\n        // State\n        this.ready = false;\n        this.loading = false;\n        this.failed = false;\n\n        // Touch device\n        this.touch = support.touch;\n\n        // Set the media element\n        this.media = target;\n\n        // String selector passed\n        if (is.string(this.media)) {\n            this.media = document.querySelectorAll(this.media);\n        }\n\n        // jQuery, NodeList or Array passed, use first element\n        if ((window.jQuery && this.media instanceof jQuery) || is.nodeList(this.media) || is.array(this.media)) {\n            // eslint-disable-next-line\n            this.media = this.media[0];\n        }\n\n        // Set config\n        this.config = extend(\n            {},\n            defaults,\n            Plyr.defaults,\n            options || {},\n            (() => {\n                try {\n                    return JSON.parse(this.media.getAttribute('data-plyr-config'));\n                } catch (e) {\n                    return {};\n                }\n            })(),\n        );\n\n        // Elements cache\n        this.elements = {\n            container: null,\n            captions: null,\n            buttons: {},\n            display: {},\n            progress: {},\n            inputs: {},\n            settings: {\n                popup: null,\n                menu: null,\n                panels: {},\n                buttons: {},\n            },\n        };\n\n        // Captions\n        this.captions = {\n            active: null,\n            currentTrack: -1,\n            meta: new WeakMap(),\n        };\n\n        // Fullscreen\n        this.fullscreen = {\n            active: false,\n        };\n\n        // Options\n        this.options = {\n            speed: [],\n            quality: [],\n        };\n\n        // Debugging\n        // TODO: move to globals\n        this.debug = new Console(this.config.debug);\n\n        // Log config options and support\n        this.debug.log('Config', this.config);\n        this.debug.log('Support', support);\n\n        // We need an element to setup\n        if (is.nullOrUndefined(this.media) || !is.element(this.media)) {\n            this.debug.error('Setup failed: no suitable element passed');\n            return;\n        }\n\n        // Bail if the element is initialized\n        if (this.media.plyr) {\n            this.debug.warn('Target already setup');\n            return;\n        }\n\n        // Bail if not enabled\n        if (!this.config.enabled) {\n            this.debug.error('Setup failed: disabled by config');\n            return;\n        }\n\n        // Bail if disabled or no basic support\n        // You may want to disable certain UAs etc\n        if (!support.check().api) {\n            this.debug.error('Setup failed: no support');\n            return;\n        }\n\n        // Cache original element state for .destroy()\n        const clone = this.media.cloneNode(true);\n        clone.autoplay = false;\n        this.elements.original = clone;\n\n        // Set media type based on tag or data attribute\n        // Supported: video, audio, vimeo, youtube\n        const type = this.media.tagName.toLowerCase();\n\n        // Embed properties\n        let iframe = null;\n        let url = null;\n\n        // Different setup based on type\n        switch (type) {\n            case 'div':\n                // Find the frame\n                iframe = this.media.querySelector('iframe');\n\n                // <iframe> type\n                if (is.element(iframe)) {\n                    // Detect provider\n                    url = parseUrl(iframe.getAttribute('src'));\n                    this.provider = getProviderByUrl(url.toString());\n\n                    // Rework elements\n                    this.elements.container = this.media;\n                    this.media = iframe;\n\n                    // Reset classname\n                    this.elements.container.className = '';\n\n                    // Get attributes from URL and set config\n                    if (url.search.length) {\n                        const truthy = ['1', 'true'];\n\n                        if (truthy.includes(url.searchParams.get('autoplay'))) {\n                            this.config.autoplay = true;\n                        }\n                        if (truthy.includes(url.searchParams.get('loop'))) {\n                            this.config.loop.active = true;\n                        }\n\n                        // TODO: replace fullscreen.iosNative with this playsinline config option\n                        // YouTube requires the playsinline in the URL\n                        if (this.isYouTube) {\n                            this.config.playsinline = truthy.includes(url.searchParams.get('playsinline'));\n                            this.config.hl = url.searchParams.get('hl'); // TODO: Should this be setting language?\n                        } else {\n                            this.config.playsinline = true;\n                        }\n                    }\n                } else {\n                    // <div> with attributes\n                    this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n                    // Remove attribute\n                    this.media.removeAttribute(this.config.attributes.embed.provider);\n                }\n\n                // Unsupported or missing provider\n                if (is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n                    this.debug.error('Setup failed: Invalid provider');\n                    return;\n                }\n\n                // Audio will come later for external providers\n                this.type = types.video;\n\n                break;\n\n            case 'video':\n            case 'audio':\n                this.type = type;\n                this.provider = providers.html5;\n\n                // Get config from attributes\n                if (this.media.hasAttribute('crossorigin')) {\n                    this.config.crossorigin = true;\n                }\n                if (this.media.hasAttribute('autoplay')) {\n                    this.config.autoplay = true;\n                }\n                if (this.media.hasAttribute('playsinline') || this.media.hasAttribute('webkit-playsinline')) {\n                    this.config.playsinline = true;\n                }\n                if (this.media.hasAttribute('muted')) {\n                    this.config.muted = true;\n                }\n                if (this.media.hasAttribute('loop')) {\n                    this.config.loop.active = true;\n                }\n\n                break;\n\n            default:\n                this.debug.error('Setup failed: unsupported type');\n                return;\n        }\n\n        // Check for support again but with type\n        this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n        // If no support for even API, bail\n        if (!this.supported.api) {\n            this.debug.error('Setup failed: no support');\n            return;\n        }\n\n        this.eventListeners = [];\n\n        // Create listeners\n        this.listeners = new Listeners(this);\n\n        // Setup local storage for user settings\n        this.storage = new Storage(this);\n\n        // Store reference\n        this.media.plyr = this;\n\n        // Wrap media\n        if (!is.element(this.elements.container)) {\n            this.elements.container = createElement('div');\n            wrap(this.media, this.elements.container);\n        }\n\n        // Add style hook\n        ui.addStyleHook.call(this);\n\n        // Setup media\n        media.setup.call(this);\n\n        // Listen for events if debugging\n        if (this.config.debug) {\n            on.call(this, this.elements.container, this.config.events.join(' '), event => {\n                this.debug.log(`event: ${event.type}`);\n            });\n        }\n\n        // Setup interface\n        // If embed but not fully supported, build interface now to avoid flash of controls\n        if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n            ui.build.call(this);\n        }\n\n        // Container listeners\n        this.listeners.container();\n\n        // Global listeners\n        this.listeners.global();\n\n        // Setup fullscreen\n        this.fullscreen = new Fullscreen(this);\n\n        // Setup ads if provided\n        if (this.config.ads.enabled) {\n            this.ads = new Ads(this);\n        }\n\n        // Autoplay if required\n        if (this.config.autoplay) {\n            this.play();\n        }\n    }\n\n    // ---------------------------------------\n    // API\n    // ---------------------------------------\n\n    /**\n     * Types and provider helpers\n     */\n    get isHTML5() {\n        return Boolean(this.provider === providers.html5);\n    }\n\n    get isEmbed() {\n        return Boolean(this.isYouTube || this.isVimeo);\n    }\n\n    get isYouTube() {\n        return Boolean(this.provider === providers.youtube);\n    }\n\n    get isVimeo() {\n        return Boolean(this.provider === providers.vimeo);\n    }\n\n    get isVideo() {\n        return Boolean(this.type === types.video);\n    }\n\n    get isAudio() {\n        return Boolean(this.type === types.audio);\n    }\n\n    /**\n     * Play the media, or play the advertisement (if they are not blocked)\n     */\n    play() {\n        if (!is.function(this.media.play)) {\n            return null;\n        }\n\n        // Return the promise (for HTML5)\n        return this.media.play();\n    }\n\n    /**\n     * Pause the media\n     */\n    pause() {\n        if (!this.playing || !is.function(this.media.pause)) {\n            return;\n        }\n\n        this.media.pause();\n    }\n\n    /**\n     * Get playing state\n     */\n    get playing() {\n        return Boolean(this.ready && !this.paused && !this.ended);\n    }\n\n    /**\n     * Get paused state\n     */\n    get paused() {\n        return Boolean(this.media.paused);\n    }\n\n    /**\n     * Get stopped state\n     */\n    get stopped() {\n        return Boolean(this.paused && this.currentTime === 0);\n    }\n\n    /**\n     * Get ended state\n     */\n    get ended() {\n        return Boolean(this.media.ended);\n    }\n\n    /**\n     * Toggle playback based on current status\n     * @param {boolean} input\n     */\n    togglePlay(input) {\n        // Toggle based on current state if nothing passed\n        const toggle = is.boolean(input) ? input : !this.playing;\n\n        if (toggle) {\n            this.play();\n        } else {\n            this.pause();\n        }\n    }\n\n    /**\n     * Stop playback\n     */\n    stop() {\n        if (this.isHTML5) {\n            this.pause();\n            this.restart();\n        } else if (is.function(this.media.stop)) {\n            this.media.stop();\n        }\n    }\n\n    /**\n     * Restart playback\n     */\n    restart() {\n        this.currentTime = 0;\n    }\n\n    /**\n     * Rewind\n     * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n     */\n    rewind(seekTime) {\n        this.currentTime = this.currentTime - (is.number(seekTime) ? seekTime : this.config.seekTime);\n    }\n\n    /**\n     * Fast forward\n     * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n     */\n    forward(seekTime) {\n        this.currentTime = this.currentTime + (is.number(seekTime) ? seekTime : this.config.seekTime);\n    }\n\n    /**\n     * Seek to a time\n     * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n     */\n    set currentTime(input) {\n        // Bail if media duration isn't available yet\n        if (!this.duration) {\n            return;\n        }\n\n        // Validate input\n        const inputIsValid = is.number(input) && input > 0;\n\n        // Set\n        this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0;\n\n        // Logging\n        this.debug.log(`Seeking to ${this.currentTime} seconds`);\n    }\n\n    /**\n     * Get current time\n     */\n    get currentTime() {\n        return Number(this.media.currentTime);\n    }\n\n    /**\n     * Get buffered\n     */\n    get buffered() {\n        const { buffered } = this.media;\n\n        // YouTube / Vimeo return a float between 0-1\n        if (is.number(buffered)) {\n            return buffered;\n        }\n\n        // HTML5\n        // TODO: Handle buffered chunks of the media\n        // (i.e. seek to another section buffers only that section)\n        if (buffered && buffered.length && this.duration > 0) {\n            return buffered.end(0) / this.duration;\n        }\n\n        return 0;\n    }\n\n    /**\n     * Get seeking status\n     */\n    get seeking() {\n        return Boolean(this.media.seeking);\n    }\n\n    /**\n     * Get the duration of the current media\n     */\n    get duration() {\n        // Faux duration set via config\n        const fauxDuration = parseFloat(this.config.duration);\n\n        // Media duration can be NaN or Infinity before the media has loaded\n        const realDuration = (this.media || {}).duration;\n        const duration = !is.number(realDuration) || realDuration === Infinity ? 0 : realDuration;\n\n        // If config duration is funky, use regular duration\n        return fauxDuration || duration;\n    }\n\n    /**\n     * Set the player volume\n     * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n     */\n    set volume(value) {\n        let volume = value;\n        const max = 1;\n        const min = 0;\n\n        if (is.string(volume)) {\n            volume = Number(volume);\n        }\n\n        // Load volume from storage if no value specified\n        if (!is.number(volume)) {\n            volume = this.storage.get('volume');\n        }\n\n        // Use config if all else fails\n        if (!is.number(volume)) {\n            ({ volume } = this.config);\n        }\n\n        // Maximum is volumeMax\n        if (volume > max) {\n            volume = max;\n        }\n        // Minimum is volumeMin\n        if (volume < min) {\n            volume = min;\n        }\n\n        // Update config\n        this.config.volume = volume;\n\n        // Set the player volume\n        this.media.volume = volume;\n\n        // If muted, and we're increasing volume manually, reset muted state\n        if (!is.empty(value) && this.muted && volume > 0) {\n            this.muted = false;\n        }\n    }\n\n    /**\n     * Get the current player volume\n     */\n    get volume() {\n        return Number(this.media.volume);\n    }\n\n    /**\n     * Increase volume\n     * @param {boolean} step - How much to decrease by (between 0 and 1)\n     */\n    increaseVolume(step) {\n        const volume = this.media.muted ? 0 : this.volume;\n        this.volume = volume + (is.number(step) ? step : 0);\n    }\n\n    /**\n     * Decrease volume\n     * @param {boolean} step - How much to decrease by (between 0 and 1)\n     */\n    decreaseVolume(step) {\n        this.increaseVolume(-step);\n    }\n\n    /**\n     * Set muted state\n     * @param {boolean} mute\n     */\n    set muted(mute) {\n        let toggle = mute;\n\n        // Load muted state from storage\n        if (!is.boolean(toggle)) {\n            toggle = this.storage.get('muted');\n        }\n\n        // Use config if all else fails\n        if (!is.boolean(toggle)) {\n            toggle = this.config.muted;\n        }\n\n        // Update config\n        this.config.muted = toggle;\n\n        // Set mute on the player\n        this.media.muted = toggle;\n    }\n\n    /**\n     * Get current muted state\n     */\n    get muted() {\n        return Boolean(this.media.muted);\n    }\n\n    /**\n     * Check if the media has audio\n     */\n    get hasAudio() {\n        // Assume yes for all non HTML5 (as we can't tell...)\n        if (!this.isHTML5) {\n            return true;\n        }\n\n        if (this.isAudio) {\n            return true;\n        }\n\n        // Get audio tracks\n        return (\n            Boolean(this.media.mozHasAudio) ||\n            Boolean(this.media.webkitAudioDecodedByteCount) ||\n            Boolean(this.media.audioTracks && this.media.audioTracks.length)\n        );\n    }\n\n    /**\n     * Set playback speed\n     * @param {number} speed - the speed of playback (0.5-2.0)\n     */\n    set speed(input) {\n        let speed = null;\n\n        if (is.number(input)) {\n            speed = input;\n        }\n\n        if (!is.number(speed)) {\n            speed = this.storage.get('speed');\n        }\n\n        if (!is.number(speed)) {\n            speed = this.config.speed.selected;\n        }\n\n        // Set min/max\n        if (speed < 0.1) {\n            speed = 0.1;\n        }\n        if (speed > 2.0) {\n            speed = 2.0;\n        }\n\n        if (!this.config.speed.options.includes(speed)) {\n            this.debug.warn(`Unsupported speed (${speed})`);\n            return;\n        }\n\n        // Update config\n        this.config.speed.selected = speed;\n\n        // Set media speed\n        this.media.playbackRate = speed;\n    }\n\n    /**\n     * Get current playback speed\n     */\n    get speed() {\n        return Number(this.media.playbackRate);\n    }\n\n    /**\n     * Set playback quality\n     * Currently HTML5 & YouTube only\n     * @param {number} input - Quality level\n     */\n    set quality(input) {\n        const config = this.config.quality;\n        const options = this.options.quality;\n\n        if (!options.length) {\n            return;\n        }\n\n        let quality = [\n            !is.empty(input) && Number(input),\n            this.storage.get('quality'),\n            config.selected,\n            config.default,\n        ].find(is.number);\n\n        if (!options.includes(quality)) {\n            const value = closest(options, quality);\n            this.debug.warn(`Unsupported quality option: ${quality}, using ${value} instead`);\n            quality = value;\n        }\n\n        // Update config\n        config.selected = quality;\n\n        // Set quality\n        this.media.quality = quality;\n    }\n\n    /**\n     * Get current quality level\n     */\n    get quality() {\n        return this.media.quality;\n    }\n\n    /**\n     * Toggle loop\n     * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n     * @param {boolean} input - Whether to loop or not\n     */\n    set loop(input) {\n        const toggle = is.boolean(input) ? input : this.config.loop.active;\n        this.config.loop.active = toggle;\n        this.media.loop = toggle;\n\n        // Set default to be a true toggle\n        /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n        switch (type) {\n            case 'start':\n                if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n                    this.config.loop.end = null;\n                }\n                this.config.loop.start = this.currentTime;\n                // this.config.loop.indicator.start = this.elements.display.played.value;\n                break;\n\n            case 'end':\n                if (this.config.loop.start >= this.currentTime) {\n                    return this;\n                }\n                this.config.loop.end = this.currentTime;\n                // this.config.loop.indicator.end = this.elements.display.played.value;\n                break;\n\n            case 'all':\n                this.config.loop.start = 0;\n                this.config.loop.end = this.duration - 2;\n                this.config.loop.indicator.start = 0;\n                this.config.loop.indicator.end = 100;\n                break;\n\n            case 'toggle':\n                if (this.config.loop.active) {\n                    this.config.loop.start = 0;\n                    this.config.loop.end = null;\n                } else {\n                    this.config.loop.start = 0;\n                    this.config.loop.end = this.duration - 2;\n                }\n                break;\n\n            default:\n                this.config.loop.start = 0;\n                this.config.loop.end = null;\n                break;\n        } */\n    }\n\n    /**\n     * Get current loop state\n     */\n    get loop() {\n        return Boolean(this.media.loop);\n    }\n\n    /**\n     * Set new media source\n     * @param {object} input - The new source object (see docs)\n     */\n    set source(input) {\n        source.change.call(this, input);\n    }\n\n    /**\n     * Get current source\n     */\n    get source() {\n        return this.media.currentSrc;\n    }\n\n    /**\n     * Set the poster image for a video\n     * @param {input} - the URL for the new poster image\n     */\n    set poster(input) {\n        if (!this.isVideo) {\n            this.debug.warn('Poster can only be set for video');\n            return;\n        }\n\n        ui.setPoster.call(this, input, false).catch(() => {});\n    }\n\n    /**\n     * Get the current poster image\n     */\n    get poster() {\n        if (!this.isVideo) {\n            return null;\n        }\n\n        return this.media.getAttribute('poster');\n    }\n\n    /**\n     * Set the autoplay state\n     * @param {boolean} input - Whether to autoplay or not\n     */\n    set autoplay(input) {\n        const toggle = is.boolean(input) ? input : this.config.autoplay;\n        this.config.autoplay = toggle;\n    }\n\n    /**\n     * Get the current autoplay state\n     */\n    get autoplay() {\n        return Boolean(this.config.autoplay);\n    }\n\n    /**\n     * Toggle captions\n     * @param {boolean} input - Whether to enable captions\n     */\n    toggleCaptions(input) {\n        captions.toggle.call(this, input, false);\n    }\n\n    /**\n     * Set the caption track by index\n     * @param {number} - Caption index\n     */\n    set currentTrack(input) {\n        captions.set.call(this, input, false);\n    }\n\n    /**\n     * Get the current caption track index (-1 if disabled)\n     */\n    get currentTrack() {\n        const { toggled, currentTrack } = this.captions;\n        return toggled ? currentTrack : -1;\n    }\n\n    /**\n     * Set the wanted language for captions\n     * Since tracks can be added later it won't update the actual caption track until there is a matching track\n     * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n     */\n    set language(input) {\n        captions.setLanguage.call(this, input, false);\n    }\n\n    /**\n     * Get the current track's language\n     */\n    get language() {\n        return (captions.getCurrentTrack.call(this) || {}).language;\n    }\n\n    /**\n     * Toggle picture-in-picture playback on WebKit/MacOS\n     * TODO: update player with state, support, enabled\n     * TODO: detect outside changes\n     */\n    set pip(input) {\n        const states = {\n            pip: 'picture-in-picture',\n            inline: 'inline',\n        };\n\n        // Bail if no support\n        if (!support.pip) {\n            return;\n        }\n\n        // Toggle based on current state if not passed\n        const toggle = is.boolean(input) ? input : this.pip === states.inline;\n\n        // Toggle based on current state\n        this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n    }\n\n    /**\n     * Get the current picture-in-picture state\n     */\n    get pip() {\n        if (!support.pip) {\n            return null;\n        }\n\n        return this.media.webkitPresentationMode;\n    }\n\n    /**\n     * Trigger the airplay dialog\n     * TODO: update player with state, support, enabled\n     */\n    airplay() {\n        // Show dialog if supported\n        if (support.airplay) {\n            this.media.webkitShowPlaybackTargetPicker();\n        }\n    }\n\n    /**\n     * Toggle the player controls\n     * @param {boolean} [toggle] - Whether to show the controls\n     */\n    toggleControls(toggle) {\n        // Don't toggle if missing UI support or if it's audio\n        if (this.supported.ui && !this.isAudio) {\n            // Get state before change\n            const isHidden = hasClass(this.elements.container, this.config.classNames.hideControls);\n\n            // Negate the argument if not undefined since adding the class to hides the controls\n            const force = typeof toggle === 'undefined' ? undefined : !toggle;\n\n            // Apply and get updated state\n            const hiding = toggleClass(this.elements.container, this.config.classNames.hideControls, force);\n\n            // Close menu\n            if (hiding && this.config.controls.includes('settings') && !is.empty(this.config.settings)) {\n                controls.toggleMenu.call(this, false);\n            }\n\n            // Trigger event on change\n            if (hiding !== isHidden) {\n                const eventName = hiding ? 'controlshidden' : 'controlsshown';\n                triggerEvent.call(this, this.media, eventName);\n            }\n\n            return !hiding;\n        }\n\n        return false;\n    }\n\n    /**\n     * Add event listeners\n     * @param {string} event - Event type\n     * @param {function} callback - Callback for when event occurs\n     */\n    on(event, callback) {\n        on.call(this, this.elements.container, event, callback);\n    }\n\n    /**\n     * Add event listeners once\n     * @param {string} event - Event type\n     * @param {function} callback - Callback for when event occurs\n     */\n    once(event, callback) {\n        once.call(this, this.elements.container, event, callback);\n    }\n\n    /**\n     * Remove event listeners\n     * @param {string} event - Event type\n     * @param {function} callback - Callback for when event occurs\n     */\n    off(event, callback) {\n        off(this.elements.container, event, callback);\n    }\n\n    /**\n     * Destroy an instance\n     * Event listeners are removed when elements are removed\n     * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n     * @param {function} callback - Callback for when destroy is complete\n     * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n     */\n    destroy(callback, soft = false) {\n        if (!this.ready) {\n            return;\n        }\n\n        const done = () => {\n            // Reset overflow (incase destroyed while in fullscreen)\n            document.body.style.overflow = '';\n\n            // GC for embed\n            this.embed = null;\n\n            // If it's a soft destroy, make minimal changes\n            if (soft) {\n                if (Object.keys(this.elements).length) {\n                    // Remove elements\n                    removeElement(this.elements.buttons.play);\n                    removeElement(this.elements.captions);\n                    removeElement(this.elements.controls);\n                    removeElement(this.elements.wrapper);\n\n                    // Clear for GC\n                    this.elements.buttons.play = null;\n                    this.elements.captions = null;\n                    this.elements.controls = null;\n                    this.elements.wrapper = null;\n                }\n\n                // Callback\n                if (is.function(callback)) {\n                    callback();\n                }\n            } else {\n                // Unbind listeners\n                unbindListeners.call(this);\n\n                // Replace the container with the original element provided\n                replaceElement(this.elements.original, this.elements.container);\n\n                // Event\n                triggerEvent.call(this, this.elements.original, 'destroyed', true);\n\n                // Callback\n                if (is.function(callback)) {\n                    callback.call(this.elements.original);\n                }\n\n                // Reset state\n                this.ready = false;\n\n                // Clear for garbage collection\n                setTimeout(() => {\n                    this.elements = null;\n                    this.media = null;\n                }, 200);\n            }\n        };\n\n        // Stop playback\n        this.stop();\n\n        // Provider specific stuff\n        if (this.isHTML5) {\n            // Clear timeout\n            clearTimeout(this.timers.loading);\n\n            // Restore native video controls\n            ui.toggleNativeControls.call(this, true);\n\n            // Clean up\n            done();\n        } else if (this.isYouTube) {\n            // Clear timers\n            clearInterval(this.timers.buffering);\n            clearInterval(this.timers.playing);\n\n            // Destroy YouTube API\n            if (this.embed !== null && is.function(this.embed.destroy)) {\n                this.embed.destroy();\n            }\n\n            // Clean up\n            done();\n        } else if (this.isVimeo) {\n            // Destroy Vimeo API\n            // then clean up (wait, to prevent postmessage errors)\n            if (this.embed !== null) {\n                this.embed.unload().then(done);\n            }\n\n            // Vimeo does not always return\n            setTimeout(done, 200);\n        }\n    }\n\n    /**\n     * Check for support for a mime type (HTML5 only)\n     * @param {string} type - Mime type\n     */\n    supports(type) {\n        return support.mime.call(this, type);\n    }\n\n    /**\n     * Check for support\n     * @param {string} type - Player type (audio/video)\n     * @param {string} provider - Provider (html5/youtube/vimeo)\n     * @param {bool} inline - Where player has `playsinline` sttribute\n     */\n    static supported(type, provider, inline) {\n        return support.check(type, provider, inline);\n    }\n\n    /**\n     * Load an SVG sprite into the page\n     * @param {string} url - URL for the SVG sprite\n     * @param {string} [id] - Unique ID\n     */\n    static loadSprite(url, id) {\n        return loadSprite(url, id);\n    }\n\n    /**\n     * Setup multiple instances\n     * @param {*} selector\n     * @param {object} options\n     */\n    static setup(selector, options = {}) {\n        let targets = null;\n\n        if (is.string(selector)) {\n            targets = Array.from(document.querySelectorAll(selector));\n        } else if (is.nodeList(selector)) {\n            targets = Array.from(selector);\n        } else if (is.array(selector)) {\n            targets = selector.filter(is.element);\n        }\n\n        if (is.empty(targets)) {\n            return null;\n        }\n\n        return targets.map(t => new Plyr(t, options));\n    }\n}\n\nPlyr.defaults = cloneDeep(defaults);\n\nexport default Plyr;\n"]}