diff options
-rw-r--r-- | dist/plyr.js.map | 2 | ||||
-rw-r--r-- | dist/plyr.min.js.map | 2 | ||||
-rw-r--r-- | dist/plyr.polyfilled.js.map | 2 | ||||
-rw-r--r-- | dist/plyr.polyfilled.min.js.map | 2 | ||||
-rw-r--r-- | readme.md | 8 | ||||
-rw-r--r-- | src/js/plyr.js | 2 | ||||
-rw-r--r-- | src/js/plyr.polyfilled.js | 2 |
7 files changed, 10 insertions, 10 deletions
diff --git a/dist/plyr.js.map b/dist/plyr.js.map index 25d6de51..1ce766a7 100644 --- a/dist/plyr.js.map +++ b/dist/plyr.js.map @@ -1 +1 @@ -{"version":3,"sources":["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/objects.js","src/js/utils/strings.js","src/js/i18n.js","src/js/utils/arrays.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":["getConstructor","input","constructor","instanceOf","Boolean","isNullOrUndefined","isObject","Object","isNumber","Number","isNaN","isString","String","isBoolean","isFunction","Function","isArray","Array","isWeakMap","WeakMap","isNodeList","NodeList","isElement","Element","isTextNode","Text","isEvent","Event","isCue","window","TextTrackCue","VTTCue","isTrack","TextTrack","kind","isEmpty","length","keys","isUrl","URL","string","startsWith","hostname","e","nullOrUndefined","object","number","boolean","function","array","weakMap","nodeList","element","textNode","event","cue","track","url","empty","supportsPassiveListeners","supported","options","defineProperty","get","addEventListener","removeEventListener","toggleListener","callback","toggle","passive","capture","is","events","split","forEach","eventListeners","push","type","on","call","off","once","onceCallback","args","apply","triggerEvent","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","unbindListeners","item","ready","Promise","setTimeout","resolve","elements","container","then","wrap","wrapper","targets","from","reverse","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","setAttributes","attributes","entries","filter","value","key","setAttribute","createElement","text","document","innerText","insertAfter","target","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","start","charAt","class","id","toggleHidden","hidden","hide","hasAttribute","removeAttribute","toggleClass","force","method","classList","contains","hasClass","matches","prototype","match","querySelectorAll","includes","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","getElements","getElement","querySelector","getFocusElement","focused","activeElement","body","trapFocus","focusable","first","last","trap","keyCode","shiftKey","focus","preventDefault","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","find","style","undefined","repaint","offsetHeight","browser","isIE","documentMode","isWebkit","documentElement","test","navigator","userAgent","isIPhone","platform","isIos","defaultCodecs","support","audio","video","check","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","inputType","mediaType","isHTML5","media","canPlayType","err","textTracks","range","touch","transitions","reducedMotion","matchMedia","html5","getSources","sources","source","getAttribute","getQualityOptions","map","extend","player","set","currentTime","paused","preload","readyState","src","play","load","quality","cancelRequests","config","blankVideo","debug","log","cloneDeep","JSON","parse","stringify","getDeep","path","reduce","obj","shift","generateId","prefix","Math","floor","random","format","toString","i","getPercentage","current","max","toFixed","replaceAll","RegExp","toTitleCase","toUpperCase","substr","toLowerCase","toPascalCase","toCamelCase","slice","stripHTML","fragment","createDocumentFragment","innerHTML","firstChild","getHTML","i18n","seekTime","title","dedupe","indexOf","closest","prev","curr","abs","Storage","enabled","storage","store","localStorage","getItem","json","setItem","removeItem","fetch","responseType","reject","request","XMLHttpRequest","responseText","response","Error","status","open","send","loadSprite","hasId","isCached","exists","getElementById","update","data","insertAdjacentElement","useStorage","cached","content","result","catch","getHours","parseInt","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","iconUrl","location","cors","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","classNames","tooltip","error","warn","toggleNativeControls","createIcon","namespace","iconPath","iconPrefix","icon","createElementNS","role","use","setAttributeNS","createLabel","attr","universals","join","createBadge","badge","menu","createButton","buttonType","button","label","labelPressed","iconPressed","control","controlPressed","enumerable","pressed","createRange","min","step","autocomplete","updateRangeFill","createProgress","suffixKey","played","suffix","createTime","createMenuItem","list","checked","radio","name","faux","insertAdjacentHTML","forceHours","updateTimeDisplay","updateVolume","setRange","muted","updateProgress","setProgress","getElementsByTagName","nodeValue","buffered","percent","setProperty","updateSeekTooltip","tooltips","clientRect","getBoundingClientRect","visible","width","pageX","left","parseFloat","timeUpdate","invert","invertTime","seeking","durationUpdate","hasDuration","displayDuration","toggleTab","setting","tabs","setQualityMenu","panes","checkMenu","getBadge","sort","a","b","sorting","getLabel","updateSetting","pane","currentTrack","default","setCaptionsMenu","tracks","getTracks","toggled","language","unshift","bind","setSpeedMenu","speed","isVimeo","values","some","tab","toggleMenu","form","show","isMenuItem","isButton","stopPropagation","getTabSize","clone","position","opacity","scrollWidth","height","scrollHeight","showTab","isTab","size","restore","propertyName","create","tabindex","inner","home","back","inject","props","seektime","insertMethod","labels","parseUrl","safe","parser","href","buildUrlParams","params","URLSearchParams","setup","isVideo","isYouTube","protocol","createObjectURL","blob","languages","userLanguage","active","trackEvents","meta","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","embed","enableTextTrack","has","sortIsDefault","sorted","every","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","changed","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","global","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","end","all","reset","disabled","advertisement","qualityBadge","urls","vimeo","sdk","iframe","youtube","googleIMA","listeners","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","tabFocus","google","publisherId","providers","types","getProviderByUrl","noop","Console","console","onChange","toggleFallback","scrollPosition","x","scrollX","y","scrollY","scrollTo","overflow","Fullscreen","property","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","loadImage","minWidth","image","Image","handler","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","setTitle","setPoster","isEmbed","togglePoster","enable","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","Listeners","lastKey","handleKey","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","seekByKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","delay","hasAudio","initialized","managerPromise","isAudio","ended","proxyEvents","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showHomeTab","currentTarget","eventType","done","seekTo","webkitDirectionInvertedFromDevice","deltaX","deltaY","direction","sign","define","this","loadScript","loadjs","success","parseId","regex","$2","getAspectRatio","getRatio","w","h","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","padding","paddingBottom","offset","transform","byline","portrait","transparent","gesture","thumbnail_large","pathname","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","strippedCues","getPaused","frame","seconds","mapQualityUnit","qualities","hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","entry","mapQualityUnits","levels","level","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","items","snippet","currentId","posterSrc","playerVars","hl","rel","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","onPlaybackQualityChange","onPlaybackRateChange","instance","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","seeked","getAvailableQualityLevels","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","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","handlers","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","Date","now","AV_WIDTH","AV_HEIGHT","AV_CDIM2","base","insertElements","attribute","change","tagName","crossorigin","Plyr","failed","jQuery","original","search","truthy","searchParams","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","Infinity","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","states","inline","webkitPresentationMode","t"],"mappings":"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","file":"plyr.js","sourcesContent":["// ==========================================================================\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 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 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 target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n // Inject the new <element>\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 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.hasAttribute('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.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 null;\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// Get the focused element\nexport function getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\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 = getFocusElement();\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// 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(event => element.style[event] !== undefined);\n\n return is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element) {\n setTimeout(() => {\n toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\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 });\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// 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 './utils/is';\nimport { getDeep } from './utils/objects';\nimport { replaceAll } from './utils/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// 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// 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// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n createElement,\n emptyElement,\n getAttributesFromSelector,\n getElement,\n getElements,\n hasClass,\n matches,\n removeElement,\n setAttributes,\n toggleClass,\n toggleHidden,\n} from './utils/elements';\nimport { off, on } from './utils/events';\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(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\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 // Toggle classname when pressed property is set\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 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: `plyr__time ${attributes.class}`,\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 // Create a settings menu item\n createMenuItem({ value, list, type, title, badge = null, checked = false }) {\n const item = createElement('li');\n\n const label = createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = createElement(\n 'input',\n extend(getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\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}%`);\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 toggleTab(setting, toggle) {\n toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n setQualityMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\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.toggleTab.call(this, type, toggle);\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 // Empty the menu\n emptyElement(list);\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 // 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}×`;\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 // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[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('ul');\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.tabs[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(`input[value=\"${value}\"]`);\n\n if (is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n toggleHidden(this.elements.settings.tabs.loop, false);\n toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.loop.options);\n controls.toggleTab.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 // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n const tracks = captions.getTracks.call(this);\n\n // Toggle the pane and tab\n controls.toggleTab.call(this, type, tracks.length);\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 (!tracks.length) {\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 // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\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.toggleTab.call(this, type, toggle);\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 list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n emptyElement(list);\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 { tabs } = this.elements.settings;\n const visible = !is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!is.element(form) || !is.element(button)) {\n return;\n }\n\n const show = is.boolean(event) ? event : is.element(form) && form.hasAttribute('hidden');\n\n if (is.event(event)) {\n const isMenuItem = is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form 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 && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (is.element(form)) {\n toggleHidden(form, !show);\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\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 // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!is.element(pane)) {\n return;\n }\n\n // Are we targeting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\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.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || !['width', 'height'].includes(e.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 current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n toggleHidden(pane, false);\n\n const tabs = getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (is.empty(this.config.controls)) {\n return null;\n }\n\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 // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\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 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 menu = createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = createElement('div');\n\n const home = createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = 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 id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\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 button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\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 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 (is.string(this.config.controls) || is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\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 // 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 i18n from './i18n';\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 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 languages = dedupe(\n Array.from(navigator.languages || navigator.language || navigator.userLanguage).map(language => language.split('-')[0]),\n );\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: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\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 'qualitychange',\n 'qualityrequested',\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 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 if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\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 i18n from './i18n';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\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 browser from './utils/browser';\nimport { getElement, getElements, getFocusElement, 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\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\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 this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\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 // 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 = getFocusElement();\n if (\n is.element(focused) &&\n (focused !== this.player.elements.inputs.seek &&\n matches(focused, this.player.config.selectors.editable))\n ) {\n return;\n }\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 this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.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 (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.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 this.player.touch = true;\n\n // Add touch class\n toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n toggleListener.call(this.player, window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n toggleListener.call(this.player, document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n once.call(this.player, document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n on.call(this.player, this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n on.call(this.player, this.player.elements.container, 'focusout', event => {\n toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n // Add classname to tabbed elements\n on.call(this.player, this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n toggleClass(getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n this.player,\n this.player.elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (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(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n },\n );\n }\n\n // Listen for media events\n media() {\n // Time change on media\n on.call(this.player, this.player.media, 'timeupdate seeking seeked', event =>\n controls.timeUpdate.call(this.player, event),\n );\n\n // Display duration\n on.call(this.player, this.player.media, 'durationchange loadeddata loadedmetadata', event =>\n controls.durationUpdate.call(this.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(this.player, this.player.media, 'canplay', () => {\n toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n on.call(this.player, this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n on.call(this.player, this.player.media, 'progress playing seeking seeked', event =>\n controls.updateProgress.call(this.player, event),\n );\n\n // Handle volume changes\n on.call(this.player, this.player.media, 'volumechange', event =>\n controls.updateVolume.call(this.player, event),\n );\n\n // Handle play/pause\n on.call(this.player, this.player.media, 'playing play pause ended emptied timeupdate', event =>\n ui.checkPlaying.call(this.player, event),\n );\n\n // Loading state\n on.call(this.player, this.player.media, 'waiting canplay seeked playing', event =>\n ui.checkLoading.call(this.player, event),\n );\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(this.player, this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(this.player, `.${this.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(this.player, wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n on.call(\n this.player,\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(this.player, this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n on.call(this.player, this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n on.call(this.player, this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n on.call(this.player, this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = this.player.config.events.concat(['keyup', 'keydown']).join(' ');\n on.call(this.player, this.player.media, proxyEvents, event => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n triggerEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.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(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const bind = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n this.player,\n element,\n type,\n event => proxy(event, defaultHandler, customHandlerKey),\n passive && !hasCustomHandler,\n );\n };\n\n // Play/pause toggle\n if (this.player.elements.buttons.play) {\n Array.from(this.player.elements.buttons.play).forEach(button => {\n bind(button, 'click', this.player.togglePlay, 'play');\n });\n }\n\n // Pause\n bind(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n bind(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n bind(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n bind(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n bind(this.player.elements.buttons.captions, 'click', () => this.player.toggleCaptions());\n\n // Fullscreen toggle\n bind(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n bind(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n bind(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n bind(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n bind(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.currentTrack = Number(event.target.value);\n showHomeTab();\n },\n 'language',\n );\n } else if (matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n bind(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n bind(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n const code = event.keyCode ? event.keyCode : event.which;\n const eventType = event.type;\n\n if ((eventType === 'keydown' || eventType === 'keyup') && (code !== 39 && code !== 37)) {\n return;\n }\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\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('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n bind(\n this.player.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 this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !is.element(this.player.elements.display.duration)) {\n bind(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n bind(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(getElements.call(this.player, 'input[type=\"range\"]')).forEach(element => {\n bind(element, 'input', event => controls.updateRangeFill.call(this.player, event.target));\n });\n }\n\n // Seek tooltip\n bind(this.player.elements.progress, 'mouseenter mouseleave mousemove', event =>\n controls.updateSeekTooltip.call(this.player, event),\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n bind(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n bind(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Focus in/out on controls\n bind(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\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 // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n bind(\n this.player.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 this.player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = this.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 controls from '../controls';\nimport ui from '../ui';\nimport { dedupe } from '../utils/arrays';\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// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n const qualities = {\n hd2160: 2160,\n hd1440: 1440,\n hd1080: 1080,\n hd720: 720,\n large: 480,\n medium: 360,\n small: 240,\n tiny: 144,\n };\n\n const entry = Object.entries(qualities).find(entry => entry.includes(input));\n\n if (entry) {\n // Get the match corresponding to the input\n return entry.find(value => value !== input);\n }\n\n return 'default';\n}\n\nfunction mapQualityUnits(levels) {\n if (is.empty(levels)) {\n return levels;\n }\n\n return dedupe(levels.map(level => mapQualityUnit(level)));\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 onPlaybackQualityChange() {\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\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 // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n instance.setPlaybackQuality(mapQualityUnit(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 // Get quality\n controls.setQualityMenu.call(\n player,\n mapQualityUnits(instance.getAvailableQualityLevels()),\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 i18n from '../i18n';\nimport { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\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 // 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 // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\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.3.22\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 buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\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');\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')) {\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 this.ads = new Ads(this);\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 // Trigger request event\n triggerEvent.call(this, this.media, 'qualityrequested', false, { quality });\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 // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n triggerEvent.call(this, this.media, eventName);\n }\n return !hiding;\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"]}
\ No newline at end of file +{"version":3,"sources":["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/objects.js","src/js/utils/strings.js","src/js/i18n.js","src/js/utils/arrays.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":["getConstructor","input","constructor","instanceOf","Boolean","isNullOrUndefined","isObject","Object","isNumber","Number","isNaN","isString","String","isBoolean","isFunction","Function","isArray","Array","isWeakMap","WeakMap","isNodeList","NodeList","isElement","Element","isTextNode","Text","isEvent","Event","isCue","window","TextTrackCue","VTTCue","isTrack","TextTrack","kind","isEmpty","length","keys","isUrl","URL","string","startsWith","hostname","e","nullOrUndefined","object","number","boolean","function","array","weakMap","nodeList","element","textNode","event","cue","track","url","empty","supportsPassiveListeners","supported","options","defineProperty","get","addEventListener","removeEventListener","toggleListener","callback","toggle","passive","capture","is","events","split","forEach","eventListeners","push","type","on","call","off","once","onceCallback","args","apply","triggerEvent","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","unbindListeners","item","ready","Promise","setTimeout","resolve","elements","container","then","wrap","wrapper","targets","from","reverse","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","setAttributes","attributes","entries","filter","value","key","setAttribute","createElement","text","document","innerText","insertAfter","target","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","start","charAt","class","id","toggleHidden","hidden","hide","hasAttribute","removeAttribute","toggleClass","force","method","classList","contains","hasClass","matches","prototype","match","querySelectorAll","includes","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","getElements","getElement","querySelector","getFocusElement","focused","activeElement","body","trapFocus","focusable","first","last","trap","keyCode","shiftKey","focus","preventDefault","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","find","style","undefined","repaint","offsetHeight","browser","isIE","documentMode","isWebkit","documentElement","test","navigator","userAgent","isIPhone","platform","isIos","defaultCodecs","support","audio","video","check","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","inputType","mediaType","isHTML5","media","canPlayType","err","textTracks","range","touch","transitions","reducedMotion","matchMedia","html5","getSources","sources","source","getAttribute","getQualityOptions","map","extend","player","set","currentTime","paused","preload","readyState","src","play","load","quality","cancelRequests","config","blankVideo","debug","log","cloneDeep","JSON","parse","stringify","getDeep","path","reduce","obj","shift","generateId","prefix","Math","floor","random","format","toString","i","getPercentage","current","max","toFixed","replaceAll","RegExp","toTitleCase","toUpperCase","substr","toLowerCase","toPascalCase","toCamelCase","slice","stripHTML","fragment","createDocumentFragment","innerHTML","firstChild","getHTML","i18n","seekTime","title","dedupe","indexOf","closest","prev","curr","abs","Storage","enabled","storage","store","localStorage","getItem","json","setItem","removeItem","fetch","responseType","reject","request","XMLHttpRequest","responseText","response","Error","status","open","send","loadSprite","hasId","isCached","exists","getElementById","update","data","insertAdjacentElement","useStorage","cached","content","result","catch","getHours","parseInt","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","iconUrl","location","cors","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","classNames","tooltip","error","warn","toggleNativeControls","createIcon","namespace","iconPath","iconPrefix","icon","createElementNS","role","use","setAttributeNS","createLabel","attr","universals","join","createBadge","badge","menu","createButton","buttonType","button","label","labelPressed","iconPressed","control","controlPressed","enumerable","pressed","createRange","min","step","autocomplete","updateRangeFill","createProgress","suffixKey","played","suffix","createTime","createMenuItem","list","checked","radio","name","faux","insertAdjacentHTML","forceHours","updateTimeDisplay","updateVolume","setRange","muted","updateProgress","setProgress","getElementsByTagName","nodeValue","buffered","percent","setProperty","updateSeekTooltip","tooltips","clientRect","getBoundingClientRect","visible","width","pageX","left","parseFloat","timeUpdate","invert","invertTime","seeking","durationUpdate","hasDuration","displayDuration","toggleTab","setting","tabs","setQualityMenu","panes","checkMenu","getBadge","sort","a","b","sorting","getLabel","updateSetting","pane","currentTrack","default","setCaptionsMenu","tracks","getTracks","toggled","language","unshift","bind","setSpeedMenu","speed","isVimeo","values","some","tab","toggleMenu","form","show","isMenuItem","isButton","stopPropagation","getTabSize","clone","position","opacity","scrollWidth","height","scrollHeight","showTab","isTab","size","restore","propertyName","create","tabindex","inner","home","back","inject","props","seektime","insertMethod","labels","parseUrl","safe","parser","href","buildUrlParams","params","URLSearchParams","setup","isVideo","isYouTube","protocol","createObjectURL","blob","languages","userLanguage","active","trackEvents","meta","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","embed","enableTextTrack","has","sortIsDefault","sorted","every","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","changed","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","global","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","end","all","reset","disabled","advertisement","qualityBadge","urls","vimeo","sdk","iframe","youtube","googleIMA","listeners","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","tabFocus","google","publisherId","providers","types","getProviderByUrl","noop","Console","console","onChange","toggleFallback","scrollPosition","x","scrollX","y","scrollY","scrollTo","overflow","Fullscreen","property","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","loadImage","minWidth","image","Image","handler","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","setTitle","setPoster","isEmbed","togglePoster","enable","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","Listeners","lastKey","handleKey","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","seekByKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","delay","hasAudio","initialized","managerPromise","isAudio","ended","proxyEvents","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showHomeTab","currentTarget","eventType","done","seekTo","webkitDirectionInvertedFromDevice","deltaX","deltaY","direction","sign","define","this","loadScript","loadjs","success","parseId","regex","$2","getAspectRatio","getRatio","w","h","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","padding","paddingBottom","offset","transform","byline","portrait","transparent","gesture","thumbnail_large","pathname","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","strippedCues","getPaused","frame","seconds","mapQualityUnit","qualities","hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","entry","mapQualityUnits","levels","level","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","items","snippet","currentId","posterSrc","playerVars","hl","rel","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","onPlaybackQualityChange","onPlaybackRateChange","instance","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","seeked","getAvailableQualityLevels","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","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","handlers","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","Date","now","AV_WIDTH","AV_HEIGHT","AV_CDIM2","base","insertElements","attribute","change","tagName","crossorigin","Plyr","failed","jQuery","original","search","truthy","searchParams","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","Infinity","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","states","inline","webkitPresentationMode","t"],"mappings":";;;;;;IAAA;IACA;IACA;;IAEA,IAAMA,iBAAiB,SAAjBA,cAAiB;IAAA,WAAUC,UAAU,IAAV,IAAkB,OAAOA,KAAP,KAAiB,WAAnC,GAAiDA,MAAMC,WAAvD,GAAqE,IAA/E;IAAA,CAAvB;IACA,IAAMC,aAAa,SAAbA,UAAa,CAACF,KAAD,EAAQC,WAAR;IAAA,WAAwBE,QAAQH,SAASC,WAAT,IAAwBD,iBAAiBC,WAAjD,CAAxB;IAAA,CAAnB;IACA,IAAMG,oBAAoB,SAApBA,iBAAoB;IAAA,WAASJ,UAAU,IAAV,IAAkB,OAAOA,KAAP,KAAiB,WAA5C;IAAA,CAA1B;IACA,IAAMK,WAAW,SAAXA,QAAW;IAAA,WAASN,eAAeC,KAAf,MAA0BM,MAAnC;IAAA,CAAjB;IACA,IAAMC,WAAW,SAAXA,QAAW;IAAA,WAASR,eAAeC,KAAf,MAA0BQ,MAA1B,IAAoC,CAACA,OAAOC,KAAP,CAAaT,KAAb,CAA9C;IAAA,CAAjB;IACA,IAAMU,WAAW,SAAXA,QAAW;IAAA,WAASX,eAAeC,KAAf,MAA0BW,MAAnC;IAAA,CAAjB;IACA,IAAMC,YAAY,SAAZA,SAAY;IAAA,WAASb,eAAeC,KAAf,MAA0BG,OAAnC;IAAA,CAAlB;IACA,IAAMU,aAAa,SAAbA,UAAa;IAAA,WAASd,eAAeC,KAAf,MAA0Bc,QAAnC;IAAA,CAAnB;IACA,IAAMC,UAAU,SAAVA,OAAU;IAAA,WAASC,MAAMD,OAAN,CAAcf,KAAd,CAAT;IAAA,CAAhB;IACA,IAAMiB,YAAY,SAAZA,SAAY;IAAA,WAASf,WAAWF,KAAX,EAAkBkB,OAAlB,CAAT;IAAA,CAAlB;IACA,IAAMC,aAAa,SAAbA,UAAa;IAAA,WAASjB,WAAWF,KAAX,EAAkBoB,QAAlB,CAAT;IAAA,CAAnB;IACA,IAAMC,YAAY,SAAZA,SAAY;IAAA,WAASnB,WAAWF,KAAX,EAAkBsB,OAAlB,CAAT;IAAA,CAAlB;IACA,IAAMC,aAAa,SAAbA,UAAa;IAAA,WAASxB,eAAeC,KAAf,MAA0BwB,IAAnC;IAAA,CAAnB;IACA,IAAMC,UAAU,SAAVA,OAAU;IAAA,WAASvB,WAAWF,KAAX,EAAkB0B,KAAlB,CAAT;IAAA,CAAhB;IACA,IAAMC,QAAQ,SAARA,KAAQ;IAAA,WAASzB,WAAWF,KAAX,EAAkB4B,OAAOC,YAAzB,KAA0C3B,WAAWF,KAAX,EAAkB4B,OAAOE,MAAzB,CAAnD;IAAA,CAAd;IACA,IAAMC,UAAU,SAAVA,OAAU;IAAA,WAAS7B,WAAWF,KAAX,EAAkBgC,SAAlB,KAAiC,CAAC5B,kBAAkBJ,KAAlB,CAAD,IAA6BU,SAASV,MAAMiC,IAAf,CAAvE;IAAA,CAAhB;;IAEA,IAAMC,UAAU,SAAVA,OAAU;IAAA,WACZ9B,kBAAkBJ,KAAlB,KACC,CAACU,SAASV,KAAT,KAAmBe,QAAQf,KAAR,CAAnB,IAAqCmB,WAAWnB,KAAX,CAAtC,KAA4D,CAACA,MAAMmC,MADpE,IAEC9B,SAASL,KAAT,KAAmB,CAACM,OAAO8B,IAAP,CAAYpC,KAAZ,EAAmBmC,MAH5B;IAAA,CAAhB;;IAKA,IAAME,QAAQ,SAARA,KAAQ,QAAS;IACnB;IACA,QAAInC,WAAWF,KAAX,EAAkB4B,OAAOU,GAAzB,CAAJ,EAAmC;IAC/B,eAAO,IAAP;IACH;;IAED;IACA,QAAIC,SAASvC,KAAb;IACA,QAAI,CAACA,MAAMwC,UAAN,CAAiB,SAAjB,CAAD,IAAgC,CAACxC,MAAMwC,UAAN,CAAiB,UAAjB,CAArC,EAAmE;IAC/DD,6BAAmBvC,KAAnB;IACH;;IAED,QAAI;IACA,eAAO,CAACkC,QAAQ,IAAII,GAAJ,CAAQC,MAAR,EAAgBE,QAAxB,CAAR;IACH,KAFD,CAEE,OAAOC,CAAP,EAAU;IACR,eAAO,KAAP;IACH;IACJ,CAjBD;;AAmBA,aAAe;IACXC,qBAAiBvC,iBADN;IAEXwC,YAAQvC,QAFG;IAGXwC,YAAQtC,QAHG;IAIXgC,YAAQ7B,QAJG;IAKXoC,aAASlC,SALE;IAMXmC,cAAUlC,UANC;IAOXmC,WAAOjC,OAPI;IAQXkC,aAAShC,SARE;IASXiC,cAAU/B,UATC;IAUXgC,aAAS9B,SAVE;IAWX+B,cAAU7B,UAXC;IAYX8B,WAAO5B,OAZI;IAaX6B,SAAK3B,KAbM;IAcX4B,WAAOxB,OAdI;IAeXyB,SAAKnB,KAfM;IAgBXoB,WAAOvB;IAhBI,CAAf;;IC7CA;AACA;IAKA;IACA;IACA;IACA,IAAMwB,2BAA4B,YAAM;IACpC;IACA,QAAIC,YAAY,KAAhB;IACA,QAAI;IACA,YAAMC,UAAUtD,OAAOuD,cAAP,CAAsB,EAAtB,EAA0B,SAA1B,EAAqC;IACjDC,eADiD,iBAC3C;IACFH,4BAAY,IAAZ;IACA,uBAAO,IAAP;IACH;IAJgD,SAArC,CAAhB;IAMA/B,eAAOmC,gBAAP,CAAwB,MAAxB,EAAgC,IAAhC,EAAsCH,OAAtC;IACAhC,eAAOoC,mBAAP,CAA2B,MAA3B,EAAmC,IAAnC,EAAyCJ,OAAzC;IACH,KATD,CASE,OAAOlB,CAAP,EAAU;IACR;IACH;;IAED,WAAOiB,SAAP;IACH,CAjBgC,EAAjC;;IAmBA;AACA,IAAO,SAASM,cAAT,CAAwBd,OAAxB,EAAiCE,KAAjC,EAAwCa,QAAxC,EAAmG;IAAA,QAAjDC,MAAiD,uEAAxC,KAAwC;;IAAA;;IAAA,QAAjCC,OAAiC,uEAAvB,IAAuB;IAAA,QAAjBC,OAAiB,uEAAP,KAAO;;IACtG;IACA,QAAI,CAAClB,OAAD,IAAY,EAAE,sBAAsBA,OAAxB,CAAZ,IAAgDmB,GAAGb,KAAH,CAASJ,KAAT,CAAhD,IAAmE,CAACiB,GAAGvB,QAAH,CAAYmB,QAAZ,CAAxE,EAA+F;IAC3F;IACH;;IAED;IACA,QAAMK,SAASlB,MAAMmB,KAAN,CAAY,GAAZ,CAAf;;IAEA;IACA;IACA,QAAIZ,UAAUS,OAAd;;IAEA;IACA,QAAIX,wBAAJ,EAA8B;IAC1BE,kBAAU;IACN;IACAQ,4BAFM;IAGN;IACAC;IAJM,SAAV;IAMH;;IAED;IACAE,WAAOE,OAAP,CAAe,gBAAQ;IACnB,YAAI,SAAQ,MAAKC,cAAb,IAA+BP,MAAnC,EAA2C;IACvC;IACA,kBAAKO,cAAL,CAAoBC,IAApB,CAAyB,EAAExB,gBAAF,EAAWyB,UAAX,EAAiBV,kBAAjB,EAA2BN,gBAA3B,EAAzB;IACH;;IAEDT,gBAAQgB,SAAS,kBAAT,GAA8B,qBAAtC,EAA6DS,IAA7D,EAAmEV,QAAnE,EAA6EN,OAA7E;IACH,KAPD;IAQH;;IAED;AACA,IAAO,SAASiB,EAAT,CAAY1B,OAAZ,EAA6E;IAAA,QAAxDoB,MAAwD,uEAA/C,EAA+C;IAAA,QAA3CL,QAA2C;IAAA,QAAjCE,OAAiC,uEAAvB,IAAuB;IAAA,QAAjBC,OAAiB,uEAAP,KAAO;;IAChFJ,mBAAea,IAAf,CAAoB,IAApB,EAA0B3B,OAA1B,EAAmCoB,MAAnC,EAA2CL,QAA3C,EAAqD,IAArD,EAA2DE,OAA3D,EAAoEC,OAApE;IACH;;IAED;AACA,IAAO,SAASU,GAAT,CAAa5B,OAAb,EAA8E;IAAA,QAAxDoB,MAAwD,uEAA/C,EAA+C;IAAA,QAA3CL,QAA2C;IAAA,QAAjCE,OAAiC,uEAAvB,IAAuB;IAAA,QAAjBC,OAAiB,uEAAP,KAAO;;IACjFJ,mBAAea,IAAf,CAAoB,IAApB,EAA0B3B,OAA1B,EAAmCoB,MAAnC,EAA2CL,QAA3C,EAAqD,KAArD,EAA4DE,OAA5D,EAAqEC,OAArE;IACH;;IAED;AACA,IAAO,SAASW,IAAT,CAAc7B,OAAd,EAA+E;IAAA,QAAxDoB,MAAwD,uEAA/C,EAA+C;IAAA,QAA3CL,QAA2C;IAAA,QAAjCE,OAAiC,uEAAvB,IAAuB;IAAA,QAAjBC,OAAiB,uEAAP,KAAO;;IAClF,aAASY,YAAT,GAA+B;IAC3BF,YAAI5B,OAAJ,EAAaoB,MAAb,EAAqBU,YAArB,EAAmCb,OAAnC,EAA4CC,OAA5C;;IAD2B,0CAANa,IAAM;IAANA,gBAAM;IAAA;;IAE3BhB,iBAASiB,KAAT,CAAe,IAAf,EAAqBD,IAArB;IACH;;IAEDjB,mBAAea,IAAf,CAAoB,IAApB,EAA0B3B,OAA1B,EAAmCoB,MAAnC,EAA2CU,YAA3C,EAAyD,IAAzD,EAA+Db,OAA/D,EAAwEC,OAAxE;IACH;;IAED;AACA,IAAO,SAASe,YAAT,CAAsBjC,OAAtB,EAAwE;IAAA,QAAzCyB,IAAyC,uEAAlC,EAAkC;IAAA,QAA9BS,OAA8B,uEAApB,KAAoB;IAAA,QAAbC,MAAa,uEAAJ,EAAI;;IAC3E;IACA,QAAI,CAAChB,GAAGnB,OAAH,CAAWA,OAAX,CAAD,IAAwBmB,GAAGb,KAAH,CAASmB,IAAT,CAA5B,EAA4C;IACxC;IACH;;IAED;IACA,QAAMvB,QAAQ,IAAIkC,WAAJ,CAAgBX,IAAhB,EAAsB;IAChCS,wBADgC;IAEhCC,gBAAQhF,OAAOkF,MAAP,CAAc,EAAd,EAAkBF,MAAlB,EAA0B;IAC9BG,kBAAM;IADwB,SAA1B;IAFwB,KAAtB,CAAd;;IAOA;IACAtC,YAAQuC,aAAR,CAAsBrC,KAAtB;IACH;;IAED;AACA,IAAO,SAASsC,eAAT,GAA2B;IAC9B,QAAI,QAAQ,KAAKjB,cAAjB,EAAiC;IAC7B,aAAKA,cAAL,CAAoBD,OAApB,CAA4B,gBAAQ;IAAA,gBACxBtB,OADwB,GACayC,IADb,CACxBzC,OADwB;IAAA,gBACfyB,IADe,GACagB,IADb,CACfhB,IADe;IAAA,gBACTV,QADS,GACa0B,IADb,CACT1B,QADS;IAAA,gBACCN,OADD,GACagC,IADb,CACChC,OADD;;IAEhCT,oBAAQa,mBAAR,CAA4BY,IAA5B,EAAkCV,QAAlC,EAA4CN,OAA5C;IACH,SAHD;;IAKA,aAAKc,cAAL,GAAsB,EAAtB;IACH;IACJ;;IAED;AACA,IAAO,SAASmB,KAAT,GAAiB;IAAA;;IACpB,WAAO,IAAIC,OAAJ,CACH;IAAA,eAAY,OAAKD,KAAL,GAAaE,WAAWC,OAAX,EAAoB,CAApB,CAAb,GAAsCnB,GAAGC,IAAH,CAAQ,MAAR,EAAc,OAAKmB,QAAL,CAAcC,SAA5B,EAAuC,OAAvC,EAAgDF,OAAhD,CAAlD;IAAA,KADG,EAELG,IAFK,CAEA,YAAM,EAFN,CAAP;IAGH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ICvHD;AACA;IAMA;AACA,IAAO,SAASC,IAAT,CAAcH,QAAd,EAAwBI,OAAxB,EAAiC;IACpC;IACA,QAAMC,UAAUL,SAAS9D,MAAT,GAAkB8D,QAAlB,GAA6B,CAACA,QAAD,CAA7C;;IAEA;IACA;IACAjF,UAAMuF,IAAN,CAAWD,OAAX,EACKE,OADL,GAEK/B,OAFL,CAEa,UAACtB,OAAD,EAAUsD,KAAV,EAAoB;IACzB,YAAMC,QAAQD,QAAQ,CAAR,GAAYJ,QAAQM,SAAR,CAAkB,IAAlB,CAAZ,GAAsCN,OAApD;;IAEA;IACA,YAAMO,SAASzD,QAAQ0D,UAAvB;IACA,YAAMC,UAAU3D,QAAQ4D,WAAxB;;IAEA;IACA;IACAL,cAAMM,WAAN,CAAkB7D,OAAlB;;IAEA;IACA;IACA;IACA,YAAI2D,OAAJ,EAAa;IACTF,mBAAOK,YAAP,CAAoBP,KAApB,EAA2BI,OAA3B;IACH,SAFD,MAEO;IACHF,mBAAOI,WAAP,CAAmBN,KAAnB;IACH;IACJ,KArBL;IAsBH;;IAED;AACA,IAAO,SAASQ,aAAT,CAAuB/D,OAAvB,EAAgCgE,UAAhC,EAA4C;IAC/C,QAAI,CAAC7C,GAAGnB,OAAH,CAAWA,OAAX,CAAD,IAAwBmB,GAAGb,KAAH,CAAS0D,UAAT,CAA5B,EAAkD;IAC9C;IACH;;IAED;IACA;IACA7G,WAAO8G,OAAP,CAAeD,UAAf,EACKE,MADL,CACY;IAAA;IAAA,YAAIC,KAAJ;;IAAA,eAAe,CAAChD,GAAG3B,eAAH,CAAmB2E,KAAnB,CAAhB;IAAA,KADZ,EAEK7C,OAFL,CAEa;IAAA;IAAA,YAAE8C,GAAF;IAAA,YAAOD,KAAP;;IAAA,eAAkBnE,QAAQqE,YAAR,CAAqBD,GAArB,EAA0BD,KAA1B,CAAlB;IAAA,KAFb;IAGH;;IAED;AACA,IAAO,SAASG,aAAT,CAAuB7C,IAAvB,EAA6BuC,UAA7B,EAAyCO,IAAzC,EAA+C;IAClD;IACA,QAAMvE,UAAUwE,SAASF,aAAT,CAAuB7C,IAAvB,CAAhB;;IAEA;IACA,QAAIN,GAAG1B,MAAH,CAAUuE,UAAV,CAAJ,EAA2B;IACvBD,sBAAc/D,OAAd,EAAuBgE,UAAvB;IACH;;IAED;IACA,QAAI7C,GAAG/B,MAAH,CAAUmF,IAAV,CAAJ,EAAqB;IACjBvE,gBAAQyE,SAAR,GAAoBF,IAApB;IACH;;IAED;IACA,WAAOvE,OAAP;IACH;;IAED;AACA,IAAO,SAAS0E,WAAT,CAAqB1E,OAArB,EAA8B2E,MAA9B,EAAsC;IACzCA,WAAOjB,UAAP,CAAkBI,YAAlB,CAA+B9D,OAA/B,EAAwC2E,OAAOf,WAA/C;IACH;;IAED;AACA,IAAO,SAASgB,aAAT,CAAuBnD,IAAvB,EAA6BgC,MAA7B,EAAqCO,UAArC,EAAiDO,IAAjD,EAAuD;IAC1D;IACAd,WAAOI,WAAP,CAAmBS,cAAc7C,IAAd,EAAoBuC,UAApB,EAAgCO,IAAhC,CAAnB;IACH;;IAED;AACA,IAAO,SAASM,aAAT,CAAuB7E,OAAvB,EAAgC;IACnC,QAAImB,GAAGpB,QAAH,CAAYC,OAAZ,KAAwBmB,GAAGtB,KAAH,CAASG,OAAT,CAA5B,EAA+C;IAC3CnC,cAAMuF,IAAN,CAAWpD,OAAX,EAAoBsB,OAApB,CAA4BuD,aAA5B;IACA;IACH;;IAED,QAAI,CAAC1D,GAAGnB,OAAH,CAAWA,OAAX,CAAD,IAAwB,CAACmB,GAAGnB,OAAH,CAAWA,QAAQ0D,UAAnB,CAA7B,EAA6D;IACzD;IACH;;IAED1D,YAAQ0D,UAAR,CAAmBoB,WAAnB,CAA+B9E,OAA/B;IACH;;IAED;AACA,IAAO,SAAS+E,YAAT,CAAsB/E,OAAtB,EAA+B;IAAA,QAC5BhB,MAD4B,GACjBgB,QAAQgF,UADS,CAC5BhG,MAD4B;;;IAGlC,WAAOA,SAAS,CAAhB,EAAmB;IACfgB,gBAAQ8E,WAAR,CAAoB9E,QAAQiF,SAA5B;IACAjG,kBAAU,CAAV;IACH;IACJ;;IAED;AACA,IAAO,SAASkG,cAAT,CAAwBC,QAAxB,EAAkCC,QAAlC,EAA4C;IAC/C,QAAI,CAACjE,GAAGnB,OAAH,CAAWoF,QAAX,CAAD,IAAyB,CAACjE,GAAGnB,OAAH,CAAWoF,SAAS1B,UAApB,CAA1B,IAA6D,CAACvC,GAAGnB,OAAH,CAAWmF,QAAX,CAAlE,EAAwF;IACpF,eAAO,IAAP;IACH;;IAEDC,aAAS1B,UAAT,CAAoB2B,YAApB,CAAiCF,QAAjC,EAA2CC,QAA3C;;IAEA,WAAOD,QAAP;IACH;;IAED;AACA,IAAO,SAASG,yBAAT,CAAmCC,GAAnC,EAAwCC,kBAAxC,EAA4D;IAC/D;IACA;IACA;IACA;;IAEA,QAAI,CAACrE,GAAG/B,MAAH,CAAUmG,GAAV,CAAD,IAAmBpE,GAAGb,KAAH,CAASiF,GAAT,CAAvB,EAAsC;IAClC,eAAO,EAAP;IACH;;IAED,QAAMvB,aAAa,EAAnB;IACA,QAAMyB,WAAWD,kBAAjB;;IAEAD,QAAIlE,KAAJ,CAAU,GAAV,EAAeC,OAAf,CAAuB,aAAK;IACxB;IACA,YAAMoE,WAAWC,EAAEC,IAAF,EAAjB;IACA,YAAMC,YAAYH,SAASI,OAAT,CAAiB,GAAjB,EAAsB,EAAtB,CAAlB;IACA,YAAMC,WAAWL,SAASI,OAAT,CAAiB,QAAjB,EAA2B,EAA3B,CAAjB;;IAEA;IACA,YAAME,QAAQD,SAAS1E,KAAT,CAAe,GAAf,CAAd;IACA,YAAM+C,MAAM4B,MAAM,CAAN,CAAZ;IACA,YAAM7B,QAAQ6B,MAAMhH,MAAN,GAAe,CAAf,GAAmBgH,MAAM,CAAN,EAASF,OAAT,CAAiB,OAAjB,EAA0B,EAA1B,CAAnB,GAAmD,EAAjE;;IAEA;IACA,YAAMG,QAAQP,SAASQ,MAAT,CAAgB,CAAhB,CAAd;;IAEA,gBAAQD,KAAR;IACI,iBAAK,GAAL;IACI;IACA,oBAAI9E,GAAG1B,MAAH,CAAUgG,QAAV,KAAuBtE,GAAG/B,MAAH,CAAUqG,SAASU,KAAnB,CAA3B,EAAsD;IAClDV,6BAASU,KAAT,UAAsBN,SAAtB;IACH;;IAED7B,2BAAWmC,KAAX,GAAmBN,SAAnB;IACA;;IAEJ,iBAAK,GAAL;IACI;IACA7B,2BAAWoC,EAAX,GAAgBV,SAASI,OAAT,CAAiB,GAAjB,EAAsB,EAAtB,CAAhB;IACA;;IAEJ,iBAAK,GAAL;IACI;IACA9B,2BAAWI,GAAX,IAAkBD,KAAlB;;IAEA;;IAEJ;IACI;IAtBR;IAwBH,KAtCD;;IAwCA,WAAOH,UAAP;IACH;;IAED;AACA,IAAO,SAASqC,YAAT,CAAsBrG,OAAtB,EAA+BsG,MAA/B,EAAuC;IAC1C,QAAI,CAACnF,GAAGnB,OAAH,CAAWA,OAAX,CAAL,EAA0B;IACtB;IACH;;IAED,QAAIuG,OAAOD,MAAX;;IAEA,QAAI,CAACnF,GAAGxB,OAAH,CAAW4G,IAAX,CAAL,EAAuB;IACnBA,eAAO,CAACvG,QAAQwG,YAAR,CAAqB,QAArB,CAAR;IACH;;IAED,QAAID,IAAJ,EAAU;IACNvG,gBAAQqE,YAAR,CAAqB,QAArB,EAA+B,EAA/B;IACH,KAFD,MAEO;IACHrE,gBAAQyG,eAAR,CAAwB,QAAxB;IACH;IACJ;;IAED;AACA,IAAO,SAASC,WAAT,CAAqB1G,OAArB,EAA8B6F,SAA9B,EAAyCc,KAAzC,EAAgD;IACnD,QAAIxF,GAAGnB,OAAH,CAAWA,OAAX,CAAJ,EAAyB;IACrB,YAAI4G,SAAS,QAAb;IACA,YAAI,OAAOD,KAAP,KAAiB,WAArB,EAAkC;IAC9BC,qBAASD,QAAQ,KAAR,GAAgB,QAAzB;IACH;;IAED3G,gBAAQ6G,SAAR,CAAkBD,MAAlB,EAA0Bf,SAA1B;IACA,eAAO7F,QAAQ6G,SAAR,CAAkBC,QAAlB,CAA2BjB,SAA3B,CAAP;IACH;;IAED,WAAO,IAAP;IACH;;IAED;AACA,IAAO,SAASkB,QAAT,CAAkB/G,OAAlB,EAA2B6F,SAA3B,EAAsC;IACzC,WAAO1E,GAAGnB,OAAH,CAAWA,OAAX,KAAuBA,QAAQ6G,SAAR,CAAkBC,QAAlB,CAA2BjB,SAA3B,CAA9B;IACH;;IAED;AACA,IAAO,SAASmB,OAAT,CAAiBhH,OAAjB,EAA0B0F,QAA1B,EAAoC;IACvC,QAAMuB,YAAY,EAAE9I,gBAAF,EAAlB;;IAEA,aAAS+I,KAAT,GAAiB;IACb,eAAOrJ,MAAMuF,IAAN,CAAWoB,SAAS2C,gBAAT,CAA0BzB,QAA1B,CAAX,EAAgD0B,QAAhD,CAAyD,IAAzD,CAAP;IACH;;IAED,QAAMJ,UACFC,UAAUD,OAAV,IACAC,UAAUI,qBADV,IAEAJ,UAAUK,kBAFV,IAGAL,UAAUM,iBAHV,IAIAL,KALJ;;IAOA,WAAOF,QAAQrF,IAAR,CAAa3B,OAAb,EAAsB0F,QAAtB,CAAP;IACH;;IAED;AACA,IAAO,SAAS8B,WAAT,CAAqB9B,QAArB,EAA+B;IAClC,WAAO,KAAK5C,QAAL,CAAcC,SAAd,CAAwBoE,gBAAxB,CAAyCzB,QAAzC,CAAP;IACH;;IAED;AACA,IAAO,SAAS+B,UAAT,CAAoB/B,QAApB,EAA8B;IACjC,WAAO,KAAK5C,QAAL,CAAcC,SAAd,CAAwB2E,aAAxB,CAAsChC,QAAtC,CAAP;IACH;;IAED;AACA,IAAO,SAASiC,eAAT,GAA2B;IAC9B,QAAIC,UAAUpD,SAASqD,aAAvB;;IAEA,QAAI,CAACD,OAAD,IAAYA,YAAYpD,SAASsD,IAArC,EAA2C;IACvCF,kBAAU,IAAV;IACH,KAFD,MAEO;IACHA,kBAAUpD,SAASkD,aAAT,CAAuB,QAAvB,CAAV;IACH;;IAED,WAAOE,OAAP;IACH;;IAED;AACA,IAAO,SAASG,SAAT,GAAmD;IAAA,QAAhC/H,OAAgC,uEAAtB,IAAsB;IAAA,QAAhBgB,MAAgB,uEAAP,KAAO;;IACtD,QAAI,CAACG,GAAGnB,OAAH,CAAWA,OAAX,CAAL,EAA0B;IACtB;IACH;;IAED,QAAMgI,YAAYR,YAAY7F,IAAZ,CAAiB,IAAjB,EAAuB,yDAAvB,CAAlB;IACA,QAAMsG,QAAQD,UAAU,CAAV,CAAd;IACA,QAAME,OAAOF,UAAUA,UAAUhJ,MAAV,GAAmB,CAA7B,CAAb;;IAEA,QAAMmJ,OAAO,SAAPA,IAAO,QAAS;IAClB;IACA,YAAIjI,MAAMkE,GAAN,KAAc,KAAd,IAAuBlE,MAAMkI,OAAN,KAAkB,CAA7C,EAAgD;IAC5C;IACH;;IAED;IACA,YAAMR,UAAUD,iBAAhB;;IAEA,YAAIC,YAAYM,IAAZ,IAAoB,CAAChI,MAAMmI,QAA/B,EAAyC;IACrC;IACAJ,kBAAMK,KAAN;IACApI,kBAAMqI,cAAN;IACH,SAJD,MAIO,IAAIX,YAAYK,KAAZ,IAAqB/H,MAAMmI,QAA/B,EAAyC;IAC5C;IACAH,iBAAKI,KAAL;IACApI,kBAAMqI,cAAN;IACH;IACJ,KAlBD;;IAoBAzH,mBAAea,IAAf,CAAoB,IAApB,EAA0B,KAAKmB,QAAL,CAAcC,SAAxC,EAAmD,SAAnD,EAA8DoF,IAA9D,EAAoEnH,MAApE,EAA4E,KAA5E;IACH;;IC5RD;AACA;AAMA,IAAO,IAAMwH,qBAAsB,YAAM;IACrC,QAAMxI,UAAUwE,SAASF,aAAT,CAAuB,MAAvB,CAAhB;;IAEA,QAAMlD,SAAS;IACXqH,0BAAkB,qBADP;IAEXC,uBAAe,eAFJ;IAGXC,qBAAa,+BAHF;IAIXC,oBAAY;IAJD,KAAf;;IAOA,QAAMnH,OAAOtE,OAAO8B,IAAP,CAAYmC,MAAZ,EAAoByH,IAApB,CAAyB;IAAA,eAAS7I,QAAQ8I,KAAR,CAAc5I,KAAd,MAAyB6I,SAAlC;IAAA,KAAzB,CAAb;;IAEA,WAAO5H,GAAG/B,MAAH,CAAUqC,IAAV,IAAkBL,OAAOK,IAAP,CAAlB,GAAiC,KAAxC;IACH,CAbiC,EAA3B;;IAeP;AACA,IAAO,SAASuH,OAAT,CAAiBhJ,OAAjB,EAA0B;IAC7B4C,eAAW,YAAM;IACbyD,qBAAarG,OAAb,EAAsB,IAAtB;IACAA,gBAAQiJ,YAAR,CAFa;IAGb5C,qBAAarG,OAAb,EAAsB,KAAtB;IACH,KAJD,EAIG,CAJH;IAKH;;IC7BD;IACA;IACA;IACA;;IAEA,IAAMkJ,UAAU;IACZC,wBAAqB,AAAS,CAAC,CAAC3E,SAAS4E,YAD7B;IAEZC,cAAU,sBAAsB7E,SAAS8E,eAAT,CAAyBR,KAA/C,IAAwD,CAAC,OAAOS,IAAP,CAAYC,UAAUC,SAAtB,CAFvD;IAGZC,cAAU,kBAAkBH,IAAlB,CAAuBC,UAAUG,QAAjC,CAHE;IAIZC,WAAO,uBAAuBL,IAAvB,CAA4BC,UAAUG,QAAtC;IAJK,CAAhB;;ICLA;AACA;IAQA;IACA,IAAME,gBAAgB;IAClB,iBAAa,QADK;IAElB,iBAAa,GAFK;IAGlB,kBAAc,aAHI;IAIlB,iBAAa,wBAJK;IAKlB,iBAAa;IALK,CAAtB;;IAQA;IACA,IAAMC,UAAU;IACZ;IACAC,WAAO,iBAAiBvF,SAASF,aAAT,CAAuB,OAAvB,CAFZ;IAGZ0F,WAAO,iBAAiBxF,SAASF,aAAT,CAAuB,OAAvB,CAHZ;;IAKZ;IACA;IACA2F,SAPY,iBAONxI,IAPM,EAOAyI,QAPA,EAOUC,WAPV,EAOuB;IAC/B,YAAMC,gBAAgBlB,QAAQQ,QAAR,IAAoBS,WAApB,IAAmCL,QAAQK,WAAjE;IACA,YAAME,MAAMP,QAAQrI,IAAR,KAAiByI,aAAa,OAA1C;IACA,YAAMI,KAAKD,OAAOP,QAAQS,UAAf,KAA8B9I,SAAS,OAAT,IAAoB,CAACyH,QAAQQ,QAA7B,IAAyCU,aAAvE,CAAX;;IAEA,eAAO;IACHC,oBADG;IAEHC;IAFG,SAAP;IAIH,KAhBW;;;IAkBZ;IACA;IACAE,SAAM;IAAA,eAAM,CAACtB,QAAQQ,QAAT,IAAqBvI,GAAGvB,QAAH,CAAY0E,cAAc,OAAd,EAAuBmG,yBAAnC,CAA3B;IAAA,KAAD,EApBO;;IAsBZ;IACA;IACAC,aAASvJ,GAAGvB,QAAH,CAAYnB,OAAOkM,qCAAnB,CAxBG;;IA0BZ;IACA;IACAR,iBAAa,iBAAiB3F,SAASF,aAAT,CAAuB,OAAvB,CA5BlB;;IA8BZ;IACA;IACA;IACAsG,QAjCY,gBAiCPC,SAjCO,EAiCI;IAAA,+BACQA,UAAUxJ,KAAV,CAAgB,GAAhB,CADR;IAAA;IAAA,YACLyJ,SADK;;IAEZ,YAAI,CAAC,KAAKC,OAAN,IAAiBD,cAAc,KAAKrJ,IAAxC,EAA8C;IAC1C,mBAAO,KAAP;IACH;;IAED,YAAIA,aAAJ;IACA,YAAIoJ,aAAaA,UAAUzD,QAAV,CAAmB,SAAnB,CAAjB,EAAgD;IAC5C;IACA3F,mBAAOoJ,SAAP;IACH,SAHD,MAGO,IAAIA,cAAc,YAAlB,EAAgC;IACnC;IACApJ,mBAAO,aAAP;IACH,SAHM,MAGA,IAAIoJ,aAAahB,aAAjB,EAAgC;IACnC;IACApI,mBAAUoJ,SAAV,kBAAgChB,cAAcgB,SAAd,CAAhC;IACH;;IAED,YAAI;IACA,mBAAO7N,QAAQyE,QAAQ,KAAKuJ,KAAL,CAAWC,WAAX,CAAuBxJ,IAAvB,EAA6BqE,OAA7B,CAAqC,IAArC,EAA2C,EAA3C,CAAhB,CAAP;IACH,SAFD,CAEE,OAAOoF,GAAP,EAAY;IACV,mBAAO,KAAP;IACH;IACJ,KAxDW;;;IA0DZ;IACAC,gBAAY,gBAAgB3G,SAASF,aAAT,CAAuB,OAAvB,CA3DhB;;IA6DZ;IACAiG,gBAAa,YAAM;IACf,YAAMa,QAAQ5G,SAASF,aAAT,CAAuB,OAAvB,CAAd;IACA8G,cAAM3J,IAAN,GAAa,OAAb;IACA,eAAO2J,MAAM3J,IAAN,KAAe,OAAtB;IACH,KAJW,EA9DA;;IAoEZ;IACA;IACA4J,WAAO,kBAAkB7G,SAAS8E,eAtEtB;;IAwEZ;IACAgC,iBAAa9C,uBAAuB,KAzExB;;IA2EZ;IACA;IACA+C,mBAAe,gBAAgB9M,MAAhB,IAA0BA,OAAO+M,UAAP,CAAkB,0BAAlB,EAA8CxE;IA7E3E,CAAhB;;ICnBA;AACA;IAOA,IAAMyE,QAAQ;IACVC,cADU,wBACG;IAAA;;IACT,YAAI,CAAC,KAAKX,OAAV,EAAmB;IACf,mBAAO,EAAP;IACH;;IAED,YAAMY,UAAU9N,MAAMuF,IAAN,CAAW,KAAK4H,KAAL,CAAW7D,gBAAX,CAA4B,QAA5B,CAAX,CAAhB;;IAEA;IACA,eAAOwE,QAAQzH,MAAR,CAAe;IAAA,mBAAU4F,QAAQc,IAAR,CAAajJ,IAAb,CAAkB,KAAlB,EAAwBiK,OAAOC,YAAP,CAAoB,MAApB,CAAxB,CAAV;IAAA,SAAf,CAAP;IACH,KAVS;;;IAYV;IACAC,qBAbU,+BAaU;IAChB;IACA,eAAOL,MAAMC,UAAN,CACF/J,IADE,CACG,IADH,EAEFoK,GAFE,CAEE;IAAA,mBAAU1O,OAAOuO,OAAOC,YAAP,CAAoB,MAApB,CAAP,CAAV;IAAA,SAFF,EAGF3H,MAHE,CAGKlH,OAHL,CAAP;IAIH,KAnBS;IAqBVgP,UArBU,oBAqBD;IACL,YAAI,CAAC,KAAKjB,OAAV,EAAmB;IACf;IACH;;IAED,YAAMkB,SAAS,IAAf;;IAEA;IACA9O,eAAOuD,cAAP,CAAsBuL,OAAOjB,KAA7B,EAAoC,SAApC,EAA+C;IAC3CrK,eAD2C,iBACrC;IACF;IACA,oBAAMgL,UAAUF,MAAMC,UAAN,CAAiB/J,IAAjB,CAAsBsK,MAAtB,CAAhB;IACA,oBAAML,SAASD,QAAQ9C,IAAR,CAAa;IAAA,2BAAU+C,OAAOC,YAAP,CAAoB,KAApB,MAA+BI,OAAOL,MAAhD;IAAA,iBAAb,CAAf;;IAEA;IACA,uBAAOA,UAAUvO,OAAOuO,OAAOC,YAAP,CAAoB,MAApB,CAAP,CAAjB;IACH,aAR0C;IAS3CK,eAT2C,eASvCrP,KATuC,EAShC;IACP;IACA,oBAAM8O,UAAUF,MAAMC,UAAN,CAAiB/J,IAAjB,CAAsBsK,MAAtB,CAAhB;;IAEA;IACA,oBAAML,SAASD,QAAQ9C,IAAR,CAAa;IAAA,2BAAUxL,OAAOuO,OAAOC,YAAP,CAAoB,MAApB,CAAP,MAAwChP,KAAlD;IAAA,iBAAb,CAAf;;IAEA;IACA,oBAAI,CAAC+O,MAAL,EAAa;IACT;IACH;;IAED;IAZO,oCAa8CK,OAAOjB,KAbrD;IAAA,oBAaCmB,WAbD,iBAaCA,WAbD;IAAA,oBAacC,MAbd,iBAacA,MAbd;IAAA,oBAasBC,OAbtB,iBAasBA,OAbtB;IAAA,oBAa+BC,UAb/B,iBAa+BA,UAb/B;;IAeP;;IACAL,uBAAOjB,KAAP,CAAauB,GAAb,GAAmBX,OAAOC,YAAP,CAAoB,KAApB,CAAnB;;IAEA;IACA,oBAAIQ,YAAY,MAAZ,IAAsBC,UAA1B,EAAsC;IAClC;IACAL,2BAAOpK,IAAP,CAAY,gBAAZ,EAA8B,YAAM;IAChCoK,+BAAOE,WAAP,GAAqBA,WAArB;;IAEA;IACA,4BAAI,CAACC,MAAL,EAAa;IACTH,mCAAOO,IAAP;IACH;IACJ,qBAPD;;IASA;IACAP,2BAAOjB,KAAP,CAAayB,IAAb;IACH;;IAED;IACAxK,6BAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,eAAxC,EAAyD,KAAzD,EAAgE;IAC5D0B,6BAAS7P;IADmD,iBAAhE;IAGH;IA/C0C,SAA/C;IAiDH,KA9ES;;;IAgFV;IACA;IACA8P,kBAlFU,4BAkFO;IACb,YAAI,CAAC,KAAK5B,OAAV,EAAmB;IACf;IACH;;IAED;IACAlG,sBAAc4G,MAAMC,UAAN,CAAiB/J,IAAjB,CAAsB,IAAtB,CAAd;;IAEA;IACA;IACA;IACA,aAAKqJ,KAAL,CAAW3G,YAAX,CAAwB,KAAxB,EAA+B,KAAKuI,MAAL,CAAYC,UAA3C;;IAEA;IACA;IACA;IACA,aAAK7B,KAAL,CAAWyB,IAAX;;IAEA;IACA,aAAKK,KAAL,CAAWC,GAAX,CAAe,4BAAf;IACH;IAtGS,CAAd;;ICRA;AACA;IAKA;AACA,IAAO,SAASC,SAAT,CAAmBvN,MAAnB,EAA2B;IAC9B,WAAOwN,KAAKC,KAAL,CAAWD,KAAKE,SAAL,CAAe1N,MAAf,CAAX,CAAP;IACH;;IAED;AACA,IAAO,SAAS2N,OAAT,CAAiB3N,MAAjB,EAAyB4N,IAAzB,EAA+B;IAClC,WAAOA,KAAKhM,KAAL,CAAW,GAAX,EAAgBiM,MAAhB,CAAuB,UAACC,GAAD,EAAMnJ,GAAN;IAAA,eAAcmJ,OAAOA,IAAInJ,GAAJ,CAArB;IAAA,KAAvB,EAAsD3E,MAAtD,CAAP;IACH;;IAED;AACA,IAAO,SAASuM,MAAT,GAAyC;IAAA,QAAzBrH,MAAyB,uEAAhB,EAAgB;;IAAA,sCAATgH,OAAS;IAATA,eAAS;IAAA;;IAC5C,QAAI,CAACA,QAAQ3M,MAAb,EAAqB;IACjB,eAAO2F,MAAP;IACH;;IAED,QAAMiH,SAASD,QAAQ6B,KAAR,EAAf;;IAEA,QAAI,CAACrM,GAAG1B,MAAH,CAAUmM,MAAV,CAAL,EAAwB;IACpB,eAAOjH,MAAP;IACH;;IAEDxH,WAAO8B,IAAP,CAAY2M,MAAZ,EAAoBtK,OAApB,CAA4B,eAAO;IAC/B,YAAIH,GAAG1B,MAAH,CAAUmM,OAAOxH,GAAP,CAAV,CAAJ,EAA4B;IACxB,gBAAI,CAACjH,OAAO8B,IAAP,CAAY0F,MAAZ,EAAoByC,QAApB,CAA6BhD,GAA7B,CAAL,EAAwC;IACpCjH,uBAAOkF,MAAP,CAAcsC,MAAd,qBAAyBP,GAAzB,EAA+B,EAA/B;IACH;;IAED4H,mBAAOrH,OAAOP,GAAP,CAAP,EAAoBwH,OAAOxH,GAAP,CAApB;IACH,SAND,MAMO;IACHjH,mBAAOkF,MAAP,CAAcsC,MAAd,qBAAyBP,GAAzB,EAA+BwH,OAAOxH,GAAP,CAA/B;IACH;IACJ,KAVD;;IAYA,WAAO4H,yBAAOrH,MAAP,SAAkBgH,OAAlB,EAAP;IACH;;ICzCD;AACA;IAKA;AACA,IAAO,SAAS8B,UAAT,CAAoBC,MAApB,EAA4B;IAC/B,WAAUA,MAAV,SAAoBC,KAAKC,KAAL,CAAWD,KAAKE,MAAL,KAAgB,KAA3B,CAApB;IACH;;IAED;AACA,IAAO,SAASC,MAAT,CAAgBjR,KAAhB,EAAgC;IAAA,sCAANkF,IAAM;IAANA,YAAM;IAAA;;IACnC,QAAIZ,GAAGb,KAAH,CAASzD,KAAT,CAAJ,EAAqB;IACjB,eAAOA,KAAP;IACH;;IAED,WAAOA,MAAMkR,QAAN,GAAiBjI,OAAjB,CAAyB,UAAzB,EAAqC,UAACoB,KAAD,EAAQ8G,CAAR;IAAA,eAAcjM,KAAKiM,CAAL,EAAQD,QAAR,EAAd;IAAA,KAArC,CAAP;IACH;;IAED;AACA,IAAO,SAASE,aAAT,CAAuBC,OAAvB,EAAgCC,GAAhC,EAAqC;IACxC,QAAID,YAAY,CAAZ,IAAiBC,QAAQ,CAAzB,IAA8B9Q,OAAOC,KAAP,CAAa4Q,OAAb,CAA9B,IAAuD7Q,OAAOC,KAAP,CAAa6Q,GAAb,CAA3D,EAA8E;IAC1E,eAAO,CAAP;IACH;;IAED,WAAO,CAACD,UAAUC,GAAV,GAAgB,GAAjB,EAAsBC,OAAtB,CAA8B,CAA9B,CAAP;IACH;;IAED;AACA,IAAO,SAASC,UAAT,GAAyD;IAAA,QAArCxR,KAAqC,uEAA7B,EAA6B;IAAA,QAAzBgM,IAAyB,uEAAlB,EAAkB;IAAA,QAAd/C,OAAc,uEAAJ,EAAI;;IAC5D,WAAOjJ,MAAMiJ,OAAN,CACH,IAAIwI,MAAJ,CAAWzF,KAAKkF,QAAL,GAAgBjI,OAAhB,CAAwB,2BAAxB,EAAqD,MAArD,CAAX,EAAyE,GAAzE,CADG,EAEHA,QAAQiI,QAAR,EAFG,CAAP;IAIH;;IAED;AACA,IAAO,SAASQ,WAAT,GAAiC;IAAA,QAAZ1R,KAAY,uEAAJ,EAAI;;IACpC,WAAOA,MAAMkR,QAAN,GAAiBjI,OAAjB,CAAyB,QAAzB,EAAmC;IAAA,eAAQvB,KAAK2B,MAAL,CAAY,CAAZ,EAAesI,WAAf,KAA+BjK,KAAKkK,MAAL,CAAY,CAAZ,EAAeC,WAAf,EAAvC;IAAA,KAAnC,CAAP;IACH;;IAED;AACA,IAAO,SAASC,YAAT,GAAkC;IAAA,QAAZ9R,KAAY,uEAAJ,EAAI;;IACrC,QAAIuC,SAASvC,MAAMkR,QAAN,EAAb;;IAEA;IACA3O,aAASiP,WAAWjP,MAAX,EAAmB,GAAnB,EAAwB,GAAxB,CAAT;;IAEA;IACAA,aAASiP,WAAWjP,MAAX,EAAmB,GAAnB,EAAwB,GAAxB,CAAT;;IAEA;IACAA,aAASmP,YAAYnP,MAAZ,CAAT;;IAEA;IACA,WAAOiP,WAAWjP,MAAX,EAAmB,GAAnB,EAAwB,EAAxB,CAAP;IACH;;IAED;AACA,IAAO,SAASwP,WAAT,GAAiC;IAAA,QAAZ/R,KAAY,uEAAJ,EAAI;;IACpC,QAAIuC,SAASvC,MAAMkR,QAAN,EAAb;;IAEA;IACA3O,aAASuP,aAAavP,MAAb,CAAT;;IAEA;IACA,WAAOA,OAAO8G,MAAP,CAAc,CAAd,EAAiBwI,WAAjB,KAAiCtP,OAAOyP,KAAP,CAAa,CAAb,CAAxC;IACH;;IAED;AACA,IAAO,SAASC,SAAT,CAAmBlD,MAAnB,EAA2B;IAC9B,QAAMmD,WAAWvK,SAASwK,sBAAT,EAAjB;IACA,QAAMhP,UAAUwE,SAASF,aAAT,CAAuB,KAAvB,CAAhB;IACAyK,aAASlL,WAAT,CAAqB7D,OAArB;IACAA,YAAQiP,SAAR,GAAoBrD,MAApB;IACA,WAAOmD,SAASG,UAAT,CAAoBzK,SAA3B;IACH;;IAED;AACA,IAAO,SAAS0K,OAAT,CAAiBnP,OAAjB,EAA0B;IAC7B,QAAMkD,UAAUsB,SAASF,aAAT,CAAuB,KAAvB,CAAhB;IACApB,YAAQW,WAAR,CAAoB7D,OAApB;IACA,WAAOkD,QAAQ+L,SAAf;IACH;;ICpFD;AACA;IAOA,IAAMG,OAAO;IACTzO,OADS,oBACkB;IAAA,YAAvByD,GAAuB,uEAAjB,EAAiB;IAAA,YAAbwI,MAAa,uEAAJ,EAAI;;IACvB,YAAIzL,GAAGb,KAAH,CAAS8D,GAAT,KAAiBjD,GAAGb,KAAH,CAASsM,MAAT,CAArB,EAAuC;IACnC,mBAAO,EAAP;IACH;;IAED,YAAIxN,SAASgO,QAAQR,OAAOwC,IAAf,EAAqBhL,GAArB,CAAb;;IAEA,YAAIjD,GAAGb,KAAH,CAASlB,MAAT,CAAJ,EAAsB;IAClB,mBAAO,EAAP;IACH;;IAED,YAAM0G,UAAU;IACZ,0BAAc8G,OAAOyC,QADT;IAEZ,uBAAWzC,OAAO0C;IAFN,SAAhB;;IAKAnS,eAAO8G,OAAP,CAAe6B,OAAf,EAAwBxE,OAAxB,CAAgC,gBAAkB;IAAA;IAAA,gBAAhB8C,GAAgB;IAAA,gBAAXD,KAAW;;IAC9C/E,qBAASiP,WAAWjP,MAAX,EAAmBgF,GAAnB,EAAwBD,KAAxB,CAAT;IACH,SAFD;;IAIA,eAAO/E,MAAP;IACH;IAtBQ,CAAb;;ICRA;AACA;IAKA;AACA,IAAO,SAASmQ,MAAT,CAAgB1P,KAAhB,EAAuB;IAC1B,QAAI,CAACsB,GAAGtB,KAAH,CAASA,KAAT,CAAL,EAAsB;IAClB,eAAOA,KAAP;IACH;;IAED,WAAOA,MAAMqE,MAAN,CAAa,UAACzB,IAAD,EAAOa,KAAP;IAAA,eAAiBzD,MAAM2P,OAAN,CAAc/M,IAAd,MAAwBa,KAAzC;IAAA,KAAb,CAAP;IACH;;IAED;AACA,IAAO,SAASmM,OAAT,CAAiB5P,KAAjB,EAAwBsE,KAAxB,EAA+B;IAClC,QAAI,CAAChD,GAAGtB,KAAH,CAASA,KAAT,CAAD,IAAoB,CAACA,MAAMb,MAA/B,EAAuC;IACnC,eAAO,IAAP;IACH;;IAED,WAAOa,MAAMyN,MAAN,CAAa,UAACoC,IAAD,EAAOC,IAAP;IAAA,eAAiBhC,KAAKiC,GAAL,CAASD,OAAOxL,KAAhB,IAAyBwJ,KAAKiC,GAAL,CAASF,OAAOvL,KAAhB,CAAzB,GAAkDwL,IAAlD,GAAyDD,IAA1E;IAAA,KAAb,CAAP;IACH;;ICtBD;AACA;QAMMG;IACF,qBAAY5D,MAAZ,EAAoB;IAAA;;IAChB,aAAK6D,OAAL,GAAe7D,OAAOW,MAAP,CAAcmD,OAAd,CAAsBD,OAArC;IACA,aAAK1L,GAAL,GAAW6H,OAAOW,MAAP,CAAcmD,OAAd,CAAsB3L,GAAjC;IACH;;IAED;;;;;mCAoBIA,KAAK;IACL,gBAAI,CAACyL,QAAQrP,SAAT,IAAsB,CAAC,KAAKsP,OAAhC,EAAyC;IACrC,uBAAO,IAAP;IACH;;IAED,gBAAME,QAAQvR,OAAOwR,YAAP,CAAoBC,OAApB,CAA4B,KAAK9L,GAAjC,CAAd;;IAEA,gBAAIjD,GAAGb,KAAH,CAAS0P,KAAT,CAAJ,EAAqB;IACjB,uBAAO,IAAP;IACH;;IAED,gBAAMG,OAAOlD,KAAKC,KAAL,CAAW8C,KAAX,CAAb;;IAEA,mBAAO7O,GAAG/B,MAAH,CAAUgF,GAAV,KAAkBA,IAAIpF,MAAtB,GAA+BmR,KAAK/L,GAAL,CAA/B,GAA2C+L,IAAlD;IACH;;;mCAEG1Q,QAAQ;IACR;IACA,gBAAI,CAACoQ,QAAQrP,SAAT,IAAsB,CAAC,KAAKsP,OAAhC,EAAyC;IACrC;IACH;;IAED;IACA,gBAAI,CAAC3O,GAAG1B,MAAH,CAAUA,MAAV,CAAL,EAAwB;IACpB;IACH;;IAED;IACA,gBAAIsQ,UAAU,KAAKpP,GAAL,EAAd;;IAEA;IACA,gBAAIQ,GAAGb,KAAH,CAASyP,OAAT,CAAJ,EAAuB;IACnBA,0BAAU,EAAV;IACH;;IAED;IACA/D,mBAAO+D,OAAP,EAAgBtQ,MAAhB;;IAEA;IACAhB,mBAAOwR,YAAP,CAAoBG,OAApB,CAA4B,KAAKhM,GAAjC,EAAsC6I,KAAKE,SAAL,CAAe4C,OAAf,CAAtC;IACH;;;mCA3DsB;IACnB,gBAAI;IACA,oBAAI,EAAE,kBAAkBtR,MAApB,CAAJ,EAAiC;IAC7B,2BAAO,KAAP;IACH;;IAED,oBAAM8K,OAAO,SAAb;;IAEA;IACA;IACA9K,uBAAOwR,YAAP,CAAoBG,OAApB,CAA4B7G,IAA5B,EAAkCA,IAAlC;IACA9K,uBAAOwR,YAAP,CAAoBI,UAApB,CAA+B9G,IAA/B;;IAEA,uBAAO,IAAP;IACH,aAbD,CAaE,OAAOhK,CAAP,EAAU;IACR,uBAAO,KAAP;IACH;IACJ;;;;;IC/BL;IACA;IACA;IACA;;AAEA,IAAe,SAAS+Q,KAAT,CAAejQ,GAAf,EAA2C;IAAA,QAAvBkQ,YAAuB,uEAAR,MAAQ;;IACtD,WAAO,IAAI5N,OAAJ,CAAY,UAACE,OAAD,EAAU2N,MAAV,EAAqB;IACpC,YAAI;IACA,gBAAMC,UAAU,IAAIC,cAAJ,EAAhB;;IAEA;IACA,gBAAI,EAAE,qBAAqBD,OAAvB,CAAJ,EAAqC;IACjC;IACH;;IAEDA,oBAAQ7P,gBAAR,CAAyB,MAAzB,EAAiC,YAAM;IACnC,oBAAI2P,iBAAiB,MAArB,EAA6B;IACzB,wBAAI;IACA1N,gCAAQoK,KAAKC,KAAL,CAAWuD,QAAQE,YAAnB,CAAR;IACH,qBAFD,CAEE,OAAOpR,CAAP,EAAU;IACRsD,gCAAQ4N,QAAQE,YAAhB;IACH;IACJ,iBAND,MAMO;IACH9N,4BAAQ4N,QAAQG,QAAhB;IACH;IACJ,aAVD;;IAYAH,oBAAQ7P,gBAAR,CAAyB,OAAzB,EAAkC,YAAM;IACpC,sBAAM,IAAIiQ,KAAJ,CAAUJ,QAAQK,MAAlB,CAAN;IACH,aAFD;;IAIAL,oBAAQM,IAAR,CAAa,KAAb,EAAoB1Q,GAApB,EAAyB,IAAzB;;IAEA;IACAoQ,oBAAQF,YAAR,GAAuBA,YAAvB;;IAEAE,oBAAQO,IAAR;IACH,SA9BD,CA8BE,OAAOzR,CAAP,EAAU;IACRiR,mBAAOjR,CAAP;IACH;IACJ,KAlCM,CAAP;IAmCH;;ICzCD;AACA;IAOA;AACA,IAAe,SAAS0R,UAAT,CAAoB5Q,GAApB,EAAyB+F,EAAzB,EAA6B;IACxC,QAAI,CAACjF,GAAG/B,MAAH,CAAUiB,GAAV,CAAL,EAAqB;IACjB;IACH;;IAED,QAAMqN,SAAS,OAAf;IACA,QAAMwD,QAAQ/P,GAAG/B,MAAH,CAAUgH,EAAV,CAAd;IACA,QAAI+K,WAAW,KAAf;;IAEA,QAAMC,SAAS,SAATA,MAAS;IAAA,eAAM5M,SAAS6M,cAAT,CAAwBjL,EAAxB,MAAgC,IAAtC;IAAA,KAAf;;IAEA,QAAMkL,SAAS,SAATA,MAAS,CAACvO,SAAD,EAAYwO,IAAZ,EAAqB;IAChCxO,kBAAUkM,SAAV,GAAsBsC,IAAtB;;IAEA;IACA,YAAIL,SAASE,QAAb,EAAuB;IACnB;IACH;;IAED;IACA5M,iBAASsD,IAAT,CAAc0J,qBAAd,CAAoC,YAApC,EAAkDzO,SAAlD;IACH,KAVD;;IAYA;IACA,QAAI,CAACmO,KAAD,IAAU,CAACE,QAAf,EAAyB;IACrB,YAAMK,aAAa5B,QAAQrP,SAA3B;;IAEA;IACA,YAAMuC,YAAYyB,SAASF,aAAT,CAAuB,KAAvB,CAAlB;IACAvB,kBAAUsB,YAAV,CAAuB,QAAvB,EAAiC,EAAjC;;IAEA,YAAI6M,KAAJ,EAAW;IACPnO,sBAAUsB,YAAV,CAAuB,IAAvB,EAA6B+B,EAA7B;IACH;;IAED;IACA,YAAIqL,UAAJ,EAAgB;IACZ,gBAAMC,SAASjT,OAAOwR,YAAP,CAAoBC,OAApB,CAA+BxC,MAA/B,SAAyCtH,EAAzC,CAAf;IACA+K,uBAAWO,WAAW,IAAtB;;IAEA,gBAAIP,QAAJ,EAAc;IACV,oBAAMI,OAAOtE,KAAKC,KAAL,CAAWwE,MAAX,CAAb;IACAJ,uBAAOvO,SAAP,EAAkBwO,KAAKI,OAAvB;IACH;IACJ;;IAED;IACArB,cAAMjQ,GAAN,EACK2C,IADL,CACU,kBAAU;IACZ,gBAAI7B,GAAGb,KAAH,CAASsR,MAAT,CAAJ,EAAsB;IAClB;IACH;;IAED,gBAAIH,UAAJ,EAAgB;IACZhT,uBAAOwR,YAAP,CAAoBG,OAApB,CACO1C,MADP,SACiBtH,EADjB,EAEI6G,KAAKE,SAAL,CAAe;IACXwE,6BAASC;IADE,iBAAf,CAFJ;IAMH;;IAEDN,mBAAOvO,SAAP,EAAkB6O,MAAlB;IACH,SAhBL,EAiBKC,KAjBL,CAiBW,YAAM,EAjBjB;IAkBH;IACJ;;IC3ED;AACA;IAKA;AACA,IAAO,IAAMC,WAAW,SAAXA,QAAW;IAAA,WAASC,SAAU5N,QAAQ,EAAR,GAAa,EAAd,GAAoB,EAA7B,EAAiC,EAAjC,CAAT;IAAA,CAAjB;AACP,IAAO,IAAM6N,aAAa,SAAbA,UAAa;IAAA,WAASD,SAAU5N,QAAQ,EAAT,GAAe,EAAxB,EAA4B,EAA5B,CAAT;IAAA,CAAnB;AACP,IAAO,IAAM8N,aAAa,SAAbA,UAAa;IAAA,WAASF,SAAS5N,QAAQ,EAAjB,EAAqB,EAArB,CAAT;IAAA,CAAnB;;IAEP;AACA,IAAO,SAAS+N,UAAT,GAAsE;IAAA,QAAlDC,IAAkD,uEAA3C,CAA2C;IAAA,QAAxCC,YAAwC,uEAAzB,KAAyB;IAAA,QAAlBC,QAAkB,uEAAP,KAAO;;IACzE;IACA,QAAI,CAAClR,GAAGzB,MAAH,CAAUyS,IAAV,CAAL,EAAsB;IAClB,eAAOD,WAAW,IAAX,EAAiBE,YAAjB,EAA+BC,QAA/B,CAAP;IACH;;IAED;IACA,QAAMvE,SAAS,SAATA,MAAS;IAAA,eAAS,OAAI3J,KAAJ,EAAY0K,KAAZ,CAAkB,CAAC,CAAnB,CAAT;IAAA,KAAf;;IAEA;IACA,QAAIyD,QAAQR,SAASK,IAAT,CAAZ;IACA,QAAMI,OAAOP,WAAWG,IAAX,CAAb;IACA,QAAMK,OAAOP,WAAWE,IAAX,CAAb;;IAEA;IACA,QAAIC,gBAAgBE,QAAQ,CAA5B,EAA+B;IAC3BA,gBAAWA,KAAX;IACH,KAFD,MAEO;IACHA,gBAAQ,EAAR;IACH;;IAED;IACA,iBAAUD,YAAYF,OAAO,CAAnB,GAAuB,GAAvB,GAA6B,EAAvC,IAA4CG,KAA5C,GAAoDxE,OAAOyE,IAAP,CAApD,SAAoEzE,OAAO0E,IAAP,CAApE;IACH;;ICnCD;AACA;IA8BA;IACA,IAAMC,WAAW;IACb;IACAC,cAFa,wBAEA;IACT,YAAMrS,MAAM,IAAIlB,GAAJ,CAAQ,KAAKyN,MAAL,CAAY+F,OAApB,EAA6BlU,OAAOmU,QAApC,CAAZ;IACA,YAAMC,OAAOxS,IAAIyS,IAAJ,KAAarU,OAAOmU,QAAP,CAAgBE,IAA7B,IAAsC5J,QAAQC,IAAR,IAAgB,CAAC1K,OAAOsU,aAA3E;;IAEA,eAAO;IACH1S,iBAAK,KAAKuM,MAAL,CAAY+F,OADd;IAEHE;IAFG,SAAP;IAIH,KAVY;;;IAYb;IACAG,gBAba,0BAaE;IACX,YAAI;IACA,iBAAKlQ,QAAL,CAAc2P,QAAd,GAAyBhL,WAAW9F,IAAX,CAAgB,IAAhB,EAAsB,KAAKiL,MAAL,CAAYqG,SAAZ,CAAsBR,QAAtB,CAA+BvP,OAArD,CAAzB;;IAEA;IACA,iBAAKJ,QAAL,CAAcoQ,OAAd,GAAwB;IACpB1G,sBAAMhF,YAAY7F,IAAZ,CAAiB,IAAjB,EAAuB,KAAKiL,MAAL,CAAYqG,SAAZ,CAAsBC,OAAtB,CAA8B1G,IAArD,CADc;IAEpB2G,uBAAO1L,WAAW9F,IAAX,CAAgB,IAAhB,EAAsB,KAAKiL,MAAL,CAAYqG,SAAZ,CAAsBC,OAAtB,CAA8BC,KAApD,CAFa;IAGpBC,yBAAS3L,WAAW9F,IAAX,CAAgB,IAAhB,EAAsB,KAAKiL,MAAL,CAAYqG,SAAZ,CAAsBC,OAAtB,CAA8BE,OAApD,CAHW;IAIpBC,wBAAQ5L,WAAW9F,IAAX,CAAgB,IAAhB,EAAsB,KAAKiL,MAAL,CAAYqG,SAAZ,CAAsBC,OAAtB,CAA8BG,MAApD,CAJY;IAKpBC,6BAAa7L,WAAW9F,IAAX,CAAgB,IAAhB,EAAsB,KAAKiL,MAAL,CAAYqG,SAAZ,CAAsBC,OAAtB,CAA8BI,WAApD,CALO;IAMpBC,sBAAM9L,WAAW9F,IAAX,CAAgB,IAAhB,EAAsB,KAAKiL,MAAL,CAAYqG,SAAZ,CAAsBC,OAAtB,CAA8BK,IAApD,CANc;IAOpB/I,qBAAK/C,WAAW9F,IAAX,CAAgB,IAAhB,EAAsB,KAAKiL,MAAL,CAAYqG,SAAZ,CAAsBC,OAAtB,CAA8B1I,GAApD,CAPe;IAQpBE,yBAASjD,WAAW9F,IAAX,CAAgB,IAAhB,EAAsB,KAAKiL,MAAL,CAAYqG,SAAZ,CAAsBC,OAAtB,CAA8BxI,OAApD,CARW;IASpB8I,0BAAU/L,WAAW9F,IAAX,CAAgB,IAAhB,EAAsB,KAAKiL,MAAL,CAAYqG,SAAZ,CAAsBC,OAAtB,CAA8BM,QAApD,CATU;IAUpBC,0BAAUhM,WAAW9F,IAAX,CAAgB,IAAhB,EAAsB,KAAKiL,MAAL,CAAYqG,SAAZ,CAAsBC,OAAtB,CAA8BO,QAApD,CAVU;IAWpBC,4BAAYjM,WAAW9F,IAAX,CAAgB,IAAhB,EAAsB,KAAKiL,MAAL,CAAYqG,SAAZ,CAAsBC,OAAtB,CAA8BQ,UAApD;IAXQ,aAAxB;;IAcA;IACA,iBAAK5Q,QAAL,CAAc6Q,QAAd,GAAyBlM,WAAW9F,IAAX,CAAgB,IAAhB,EAAsB,KAAKiL,MAAL,CAAYqG,SAAZ,CAAsBU,QAA5C,CAAzB;;IAEA;IACA,iBAAK7Q,QAAL,CAAc8Q,MAAd,GAAuB;IACnBC,sBAAMpM,WAAW9F,IAAX,CAAgB,IAAhB,EAAsB,KAAKiL,MAAL,CAAYqG,SAAZ,CAAsBW,MAAtB,CAA6BC,IAAnD,CADa;IAEnBC,wBAAQrM,WAAW9F,IAAX,CAAgB,IAAhB,EAAsB,KAAKiL,MAAL,CAAYqG,SAAZ,CAAsBW,MAAtB,CAA6BE,MAAnD;IAFW,aAAvB;;IAKA;IACA,iBAAKhR,QAAL,CAAciR,OAAd,GAAwB;IACpBC,wBAAQvM,WAAW9F,IAAX,CAAgB,IAAhB,EAAsB,KAAKiL,MAAL,CAAYqG,SAAZ,CAAsBc,OAAtB,CAA8BC,MAApD,CADY;IAEpB7H,6BAAa1E,WAAW9F,IAAX,CAAgB,IAAhB,EAAsB,KAAKiL,MAAL,CAAYqG,SAAZ,CAAsBc,OAAtB,CAA8B5H,WAApD,CAFO;IAGpB8H,0BAAUxM,WAAW9F,IAAX,CAAgB,IAAhB,EAAsB,KAAKiL,MAAL,CAAYqG,SAAZ,CAAsBc,OAAtB,CAA8BE,QAApD;IAHU,aAAxB;;IAMA;IACA,gBAAI9S,GAAGnB,OAAH,CAAW,KAAK8C,QAAL,CAAc6Q,QAAzB,CAAJ,EAAwC;IACpC,qBAAK7Q,QAAL,CAAciR,OAAd,CAAsBG,WAAtB,GAAoC,KAAKpR,QAAL,CAAc6Q,QAAd,CAAuBjM,aAAvB,OAC5B,KAAKkF,MAAL,CAAYuH,UAAZ,CAAuBC,OADK,CAApC;IAGH;;IAED,mBAAO,IAAP;IACH,SA1CD,CA0CE,OAAOC,KAAP,EAAc;IACZ;IACA,iBAAKvH,KAAL,CAAWwH,IAAX,CAAgB,iEAAhB,EAAmFD,KAAnF;;IAEA;IACA,iBAAKE,oBAAL,CAA0B,IAA1B;;IAEA,mBAAO,KAAP;IACH;IACJ,KAjEY;;;IAmEb;IACAC,cApEa,sBAoEF/S,IApEE,EAoEIuC,UApEJ,EAoEgB;IACzB,YAAMyQ,YAAY,4BAAlB;IACA,YAAM9B,UAAUF,SAASC,UAAT,CAAoB/Q,IAApB,CAAyB,IAAzB,CAAhB;IACA,YAAM+S,YAAc,CAAC/B,QAAQE,IAAT,GAAgBF,QAAQtS,GAAxB,GAA8B,EAA5C,UAAkD,KAAKuM,MAAL,CAAY+H,UAApE;;IAEA;IACA,YAAMC,OAAOpQ,SAASqQ,eAAT,CAAyBJ,SAAzB,EAAoC,KAApC,CAAb;IACA1Q,sBACI6Q,IADJ,EAEI5I,OAAOhI,UAAP,EAAmB;IACf8Q,kBAAM,cADS;IAEf9M,uBAAW;IAFI,SAAnB,CAFJ;;IAQA;IACA,YAAM+M,MAAMvQ,SAASqQ,eAAT,CAAyBJ,SAAzB,EAAoC,KAApC,CAAZ;IACA,YAAMpH,OAAUqH,QAAV,SAAsBjT,IAA5B;;IAEA;IACA;IACA;IACA,YAAI,UAAUsT,GAAd,EAAmB;IACfA,gBAAIC,cAAJ,CAAmB,8BAAnB,EAAmD,MAAnD,EAA2D3H,IAA3D;IACH,SAFD,MAEO;IACH0H,gBAAIC,cAAJ,CAAmB,8BAAnB,EAAmD,YAAnD,EAAiE3H,IAAjE;IACH;;IAED;IACAuH,aAAK/Q,WAAL,CAAiBkR,GAAjB;;IAEA,eAAOH,IAAP;IACH,KApGY;;;IAsGb;IACAK,eAvGa,uBAuGDxT,IAvGC,EAuGgB;IAAA,YAAXyT,IAAW,uEAAJ,EAAI;;IACzB;IACA,YAAMC,aAAa;IACf3K,iBAAK,KADU;IAEfE,qBAAS;IAFM,SAAnB;IAIA,YAAMnG,OAAO4Q,WAAW1T,IAAX,KAAoB2N,KAAKzO,GAAL,CAASc,IAAT,EAAe,KAAKmL,MAApB,CAAjC;;IAEA,YAAM5I,aAAa7G,OAAOkF,MAAP,CAAc,EAAd,EAAkB6S,IAAlB,EAAwB;IACvC/O,mBAAO,CAAC+O,KAAK/O,KAAN,EAAa,KAAKyG,MAAL,CAAYuH,UAAZ,CAAuB7N,MAApC,EAA4CpC,MAA5C,CAAmDlH,OAAnD,EAA4DoY,IAA5D,CAAiE,GAAjE;IADgC,SAAxB,CAAnB;IAGA,eAAO9Q,cAAc,MAAd,EAAsBN,UAAtB,EAAkCO,IAAlC,CAAP;IACH,KAnHY;;;IAqHb;IACA8Q,eAtHa,uBAsHD9Q,IAtHC,EAsHK;IACd,YAAIpD,GAAGb,KAAH,CAASiE,IAAT,CAAJ,EAAoB;IAChB,mBAAO,IAAP;IACH;;IAED,YAAM+Q,QAAQhR,cAAc,MAAd,EAAsB;IAChC6B,mBAAO,KAAKyG,MAAL,CAAYuH,UAAZ,CAAuBoB,IAAvB,CAA4BpR;IADH,SAAtB,CAAd;;IAIAmR,cAAMzR,WAAN,CACIS,cACI,MADJ,EAEI;IACI6B,mBAAO,KAAKyG,MAAL,CAAYuH,UAAZ,CAAuBoB,IAAvB,CAA4BD;IADvC,SAFJ,EAKI/Q,IALJ,CADJ;;IAUA,eAAO+Q,KAAP;IACH,KA1IY;;;IA4Ib;IACAE,gBA7Ia,wBA6IAC,UA7IA,EA6IYP,IA7IZ,EA6IkB;IAC3B,YAAMQ,SAASpR,cAAc,QAAd,CAAf;IACA,YAAMN,aAAa7G,OAAOkF,MAAP,CAAc,EAAd,EAAkB6S,IAAlB,CAAnB;IACA,YAAIzT,OAAOmN,YAAY6G,UAAZ,CAAX;;IAEA,YAAIzU,SAAS,KAAb;IACA,YAAI2U,cAAJ;IACA,YAAIf,aAAJ;IACA,YAAIgB,qBAAJ;IACA,YAAIC,oBAAJ;;IAEA,YAAI,EAAE,UAAU7R,UAAZ,CAAJ,EAA6B;IACzBA,uBAAWvC,IAAX,GAAkB,QAAlB;IACH;;IAED,YAAI,WAAWuC,UAAf,EAA2B;IACvB,gBAAI,CAACA,WAAWmC,KAAX,CAAiBiB,QAAjB,CAA0B,KAAKwF,MAAL,CAAYuH,UAAZ,CAAuB2B,OAAjD,CAAL,EAAgE;IAC5D9R,2BAAWmC,KAAX,UAAwB,KAAKyG,MAAL,CAAYuH,UAAZ,CAAuB2B,OAA/C;IACH;IACJ,SAJD,MAIO;IACH9R,uBAAWmC,KAAX,GAAmB,KAAKyG,MAAL,CAAYuH,UAAZ,CAAuB2B,OAA1C;IACH;;IAED;IACA,gBAAQL,UAAR;IACI,iBAAK,MAAL;IACIzU,yBAAS,IAAT;IACA2U,wBAAQ,MAAR;IACAC,+BAAe,OAAf;IACAhB,uBAAO,MAAP;IACAiB,8BAAc,OAAd;IACA;;IAEJ,iBAAK,MAAL;IACI7U,yBAAS,IAAT;IACA2U,wBAAQ,MAAR;IACAC,+BAAe,QAAf;IACAhB,uBAAO,QAAP;IACAiB,8BAAc,OAAd;IACA;;IAEJ,iBAAK,UAAL;IACI7U,yBAAS,IAAT;IACA2U,wBAAQ,gBAAR;IACAC,+BAAe,iBAAf;IACAhB,uBAAO,cAAP;IACAiB,8BAAc,aAAd;IACA;;IAEJ,iBAAK,YAAL;IACI7U,yBAAS,IAAT;IACA2U,wBAAQ,iBAAR;IACAC,+BAAe,gBAAf;IACAhB,uBAAO,kBAAP;IACAiB,8BAAc,iBAAd;IACA;;IAEJ,iBAAK,YAAL;IACI7R,2BAAWmC,KAAX,UAAwB,KAAKyG,MAAL,CAAYuH,UAAZ,CAAuB2B,OAA/C;IACArU,uBAAO,MAAP;IACAkU,wBAAQ,MAAR;IACAf,uBAAO,MAAP;IACA;;IAEJ;IACIe,wBAAQlU,IAAR;IACAmT,uBAAOa,UAAP;IA1CR;;IA6CA;IACA,YAAIzU,MAAJ,EAAY;IACR;IACA0U,mBAAO7R,WAAP,CAAmB4O,SAAS+B,UAAT,CAAoB7S,IAApB,CAAyB,IAAzB,EAA+BkU,WAA/B,EAA4C,EAAE1P,OAAO,eAAT,EAA5C,CAAnB;IACAuP,mBAAO7R,WAAP,CAAmB4O,SAAS+B,UAAT,CAAoB7S,IAApB,CAAyB,IAAzB,EAA+BiT,IAA/B,EAAqC,EAAEzO,OAAO,mBAAT,EAArC,CAAnB;;IAEA;IACAuP,mBAAO7R,WAAP,CAAmB4O,SAASwC,WAAT,CAAqBtT,IAArB,CAA0B,IAA1B,EAAgCiU,YAAhC,EAA8C,EAAEzP,OAAO,gBAAT,EAA9C,CAAnB;IACAuP,mBAAO7R,WAAP,CAAmB4O,SAASwC,WAAT,CAAqBtT,IAArB,CAA0B,IAA1B,EAAgCgU,KAAhC,EAAuC,EAAExP,OAAO,oBAAT,EAAvC,CAAnB;IACH,SARD,MAQO;IACHuP,mBAAO7R,WAAP,CAAmB4O,SAAS+B,UAAT,CAAoB7S,IAApB,CAAyB,IAAzB,EAA+BiT,IAA/B,CAAnB;IACAc,mBAAO7R,WAAP,CAAmB4O,SAASwC,WAAT,CAAqBtT,IAArB,CAA0B,IAA1B,EAAgCgU,KAAhC,CAAnB;IACH;;IAED;IACA3J,eAAOhI,UAAP,EAAmBsB,0BAA0B,KAAKsH,MAAL,CAAYqG,SAAZ,CAAsBC,OAAtB,CAA8BzR,IAA9B,CAA1B,EAA+DuC,UAA/D,CAAnB;;IAEAD,sBAAc2R,MAAd,EAAsB1R,UAAtB;;IAEA;IACA,YAAIvC,SAAS,MAAb,EAAqB;IACjB,gBAAI,CAACN,GAAGtB,KAAH,CAAS,KAAKiD,QAAL,CAAcoQ,OAAd,CAAsBzR,IAAtB,CAAT,CAAL,EAA4C;IACxC,qBAAKqB,QAAL,CAAcoQ,OAAd,CAAsBzR,IAAtB,IAA8B,EAA9B;IACH;;IAED,iBAAKqB,QAAL,CAAcoQ,OAAd,CAAsBzR,IAAtB,EAA4BD,IAA5B,CAAiCkU,MAAjC;IACH,SAND,MAMO;IACH,iBAAK5S,QAAL,CAAcoQ,OAAd,CAAsBzR,IAAtB,IAA8BiU,MAA9B;IACH;;IAED;IACA,YAAM7P,YAAY,KAAK+G,MAAL,CAAYuH,UAAZ,CAAuB4B,cAAzC;IACA5Y,eAAOuD,cAAP,CAAsBgV,MAAtB,EAA8B,SAA9B,EAAyC;IACrCM,wBAAY,IADyB;IAErCrV,eAFqC,oBAE/B;IACF,uBAAOoG,SAAS2O,MAAT,EAAiB7P,SAAjB,CAAP;IACH,aAJoC;IAKrCqG,eALqC,oBAKhB;IAAA,oBAAjB+J,OAAiB,uEAAP,KAAO;;IACjBvP,4BAAYgP,MAAZ,EAAoB7P,SAApB,EAA+BoQ,OAA/B;IACH;IAPoC,SAAzC;;IAUA,eAAOP,MAAP;IACH,KA7PY;;;IA+Pb;IACAQ,eAhQa,uBAgQDzU,IAhQC,EAgQKuC,UAhQL,EAgQiB;IAC1B;IACA,YAAMnH,QAAQyH,cACV,OADU,EAEV0H,OACI1G,0BAA0B,KAAKsH,MAAL,CAAYqG,SAAZ,CAAsBW,MAAtB,CAA6BnS,IAA7B,CAA1B,CADJ,EAEI;IACIA,kBAAM,OADV;IAEI0U,iBAAK,CAFT;IAGIhI,iBAAK,GAHT;IAIIiI,kBAAM,IAJV;IAKIjS,mBAAO,CALX;IAMIkS,0BAAc,KANlB;IAOI;IACAvB,kBAAM,QARV;IASI,0BAAc1F,KAAKzO,GAAL,CAASc,IAAT,EAAe,KAAKmL,MAApB,CATlB;IAUI,6BAAiB,CAVrB;IAWI,6BAAiB,GAXrB;IAYI,6BAAiB;IAZrB,SAFJ,EAgBI5I,UAhBJ,CAFU,CAAd;;IAsBA,aAAKlB,QAAL,CAAc8Q,MAAd,CAAqBnS,IAArB,IAA6B5E,KAA7B;;IAEA;IACA4V,iBAAS6D,eAAT,CAAyB3U,IAAzB,CAA8B,IAA9B,EAAoC9E,KAApC;;IAEA,eAAOA,KAAP;IACH,KA9RY;;;IAgSb;IACA0Z,kBAjSa,0BAiSE9U,IAjSF,EAiSQuC,UAjSR,EAiSoB;IAC7B,YAAM2P,WAAWrP,cACb,UADa,EAEb0H,OACI1G,0BAA0B,KAAKsH,MAAL,CAAYqG,SAAZ,CAAsBc,OAAtB,CAA8BtS,IAA9B,CAA1B,CADJ,EAEI;IACI0U,iBAAK,CADT;IAEIhI,iBAAK,GAFT;IAGIhK,mBAAO,CAHX;IAII2Q,kBAAM,cAJV;IAKI,2BAAe;IALnB,SAFJ,EASI9Q,UATJ,CAFa,CAAjB;;IAeA;IACA,YAAIvC,SAAS,QAAb,EAAuB;IACnBkS,qBAAS9P,WAAT,CAAqBS,cAAc,MAAd,EAAsB,IAAtB,EAA4B,GAA5B,CAArB;;IAEA,gBAAMkS,YAAY;IACdC,wBAAQ,QADM;IAEdzC,wBAAQ;IAFM,cAGhBvS,IAHgB,CAAlB;IAIA,gBAAMiV,SAASF,YAAYpH,KAAKzO,GAAL,CAAS6V,SAAT,EAAoB,KAAK5J,MAAzB,CAAZ,GAA+C,EAA9D;;IAEA+G,qBAASlP,SAAT,UAA0BiS,OAAOhI,WAAP,EAA1B;IACH;;IAED,aAAK5L,QAAL,CAAciR,OAAd,CAAsBtS,IAAtB,IAA8BkS,QAA9B;;IAEA,eAAOA,QAAP;IACH,KAjUY;;;IAmUb;IACAgD,cApUa,sBAoUFlV,IApUE,EAoUI;IACb,YAAMuC,aAAasB,0BAA0B,KAAKsH,MAAL,CAAYqG,SAAZ,CAAsBc,OAAtB,CAA8BtS,IAA9B,CAA1B,CAAnB;;IAEA,YAAMsB,YAAYuB,cACd,KADc,EAEd0H,OAAOhI,UAAP,EAAmB;IACfmC,mCAAqBnC,WAAWmC,KADjB;IAEf,0BAAciJ,KAAKzO,GAAL,CAASc,IAAT,EAAe,KAAKmL,MAApB;IAFC,SAAnB,CAFc,EAMd,OANc,CAAlB;;IASA;IACA,aAAK9J,QAAL,CAAciR,OAAd,CAAsBtS,IAAtB,IAA8BsB,SAA9B;;IAEA,eAAOA,SAAP;IACH,KApVY;;;IAsVb;IACA6T,kBAvVa,gCAuV+D;IAAA,YAA3DzS,KAA2D,QAA3DA,KAA2D;IAAA,YAApD0S,IAAoD,QAApDA,IAAoD;IAAA,YAA9CpV,IAA8C,QAA9CA,IAA8C;IAAA,YAAxC6N,KAAwC,QAAxCA,KAAwC;IAAA,8BAAjCgG,KAAiC;IAAA,YAAjCA,KAAiC,8BAAzB,IAAyB;IAAA,gCAAnBwB,OAAmB;IAAA,YAAnBA,OAAmB,gCAAT,KAAS;;IACxE,YAAMrU,OAAO6B,cAAc,IAAd,CAAb;;IAEA,YAAMqR,QAAQrR,cAAc,OAAd,EAAuB;IACjC6B,mBAAO,KAAKyG,MAAL,CAAYuH,UAAZ,CAAuB2B;IADG,SAAvB,CAAd;;IAIA,YAAMiB,QAAQzS,cACV,OADU,EAEV0H,OAAO1G,0BAA0B,KAAKsH,MAAL,CAAYqG,SAAZ,CAAsBW,MAAtB,CAA6BnS,IAA7B,CAA1B,CAAP,EAAsE;IAClEA,kBAAM,OAD4D;IAElEuV,4BAAcvV,IAFoD;IAGlE0C,wBAHkE;IAIlE2S,4BAJkE;IAKlE3Q,mBAAO;IAL2D,SAAtE,CAFU,CAAd;;IAWA,YAAM8Q,OAAO3S,cAAc,MAAd,EAAsB,EAAEgC,QAAQ,EAAV,EAAtB,CAAb;;IAEAqP,cAAM9R,WAAN,CAAkBkT,KAAlB;IACApB,cAAM9R,WAAN,CAAkBoT,IAAlB;IACAtB,cAAMuB,kBAAN,CAAyB,WAAzB,EAAsC5H,KAAtC;;IAEA,YAAInO,GAAGnB,OAAH,CAAWsV,KAAX,CAAJ,EAAuB;IACnBK,kBAAM9R,WAAN,CAAkByR,KAAlB;IACH;;IAED7S,aAAKoB,WAAL,CAAiB8R,KAAjB;IACAkB,aAAKhT,WAAL,CAAiBpB,IAAjB;IACH,KArXY;;;IAuXb;IACAyP,cAxXa,2BAwX0B;IAAA,YAA5BC,IAA4B,uEAArB,CAAqB;IAAA,YAAlBE,QAAkB,uEAAP,KAAO;;IACnC;IACA,YAAI,CAAClR,GAAGzB,MAAH,CAAUyS,IAAV,CAAL,EAAsB;IAClB,mBAAOA,IAAP;IACH;;IAED;IACA,YAAMgF,aAAarF,SAAS,KAAKmC,QAAd,IAA0B,CAA7C;;IAEA,eAAO/B,WAAWC,IAAX,EAAiBgF,UAAjB,EAA6B9E,QAA7B,CAAP;IACH,KAlYY;;;IAoYb;IACA+E,qBArYa,+BAqYgD;IAAA,YAA3CzS,MAA2C,uEAAlC,IAAkC;IAAA,YAA5BwN,IAA4B,uEAArB,CAAqB;IAAA,YAAlBE,QAAkB,uEAAP,KAAO;;IACzD;IACA,YAAI,CAAClR,GAAGnB,OAAH,CAAW2E,MAAX,CAAD,IAAuB,CAACxD,GAAGzB,MAAH,CAAUyS,IAAV,CAA5B,EAA6C;IACzC;IACH;;IAED;IACAxN,eAAOF,SAAP,GAAmBgO,SAASP,UAAT,CAAoBC,IAApB,EAA0BE,QAA1B,CAAnB;IACH,KA7YY;;;IA+Yb;IACAgF,gBAhZa,0BAgZE;IACX,YAAI,CAAC,KAAK7W,SAAL,CAAe8J,EAApB,EAAwB;IACpB;IACH;;IAED;IACA,YAAInJ,GAAGnB,OAAH,CAAW,KAAK8C,QAAL,CAAc8Q,MAAd,CAAqBE,MAAhC,CAAJ,EAA6C;IACzCrB,qBAAS6E,QAAT,CAAkB3V,IAAlB,CAAuB,IAAvB,EAA6B,KAAKmB,QAAL,CAAc8Q,MAAd,CAAqBE,MAAlD,EAA0D,KAAKyD,KAAL,GAAa,CAAb,GAAiB,KAAKzD,MAAhF;IACH;;IAED;IACA,YAAI3S,GAAGnB,OAAH,CAAW,KAAK8C,QAAL,CAAcoQ,OAAd,CAAsBK,IAAjC,CAAJ,EAA4C;IACxC,iBAAKzQ,QAAL,CAAcoQ,OAAd,CAAsBK,IAAtB,CAA2B0C,OAA3B,GAAqC,KAAKsB,KAAL,IAAc,KAAKzD,MAAL,KAAgB,CAAnE;IACH;IACJ,KA9ZY;;;IAgab;IACAwD,YAjaa,oBAiaJ3S,MAjaI,EAiae;IAAA,YAAXR,KAAW,uEAAH,CAAG;;IACxB,YAAI,CAAChD,GAAGnB,OAAH,CAAW2E,MAAX,CAAL,EAAyB;IACrB;IACH;;IAED;IACAA,eAAOR,KAAP,GAAeA,KAAf;;IAEA;IACAsO,iBAAS6D,eAAT,CAAyB3U,IAAzB,CAA8B,IAA9B,EAAoCgD,MAApC;IACH,KA3aY;;;IA6ab;IACA6S,kBA9aa,0BA8aEtX,KA9aF,EA8aS;IAAA;;IAClB,YAAI,CAAC,KAAKM,SAAL,CAAe8J,EAAhB,IAAsB,CAACnJ,GAAGjB,KAAH,CAASA,KAAT,CAA3B,EAA4C;IACxC;IACH;;IAED,YAAIiE,QAAQ,CAAZ;;IAEA,YAAMsT,cAAc,SAAdA,WAAc,CAAC9S,MAAD,EAAS9H,KAAT,EAAmB;IACnC,gBAAMsH,QAAQhD,GAAGzB,MAAH,CAAU7C,KAAV,IAAmBA,KAAnB,GAA2B,CAAzC;IACA,gBAAM8W,WAAWxS,GAAGnB,OAAH,CAAW2E,MAAX,IAAqBA,MAArB,GAA8B,MAAK7B,QAAL,CAAciR,OAAd,CAAsBC,MAArE;;IAEA;IACA,gBAAI7S,GAAGnB,OAAH,CAAW2T,QAAX,CAAJ,EAA0B;IACtBA,yBAASxP,KAAT,GAAiBA,KAAjB;;IAEA;IACA,oBAAMwR,QAAQhC,SAAS+D,oBAAT,CAA8B,MAA9B,EAAsC,CAAtC,CAAd;IACA,oBAAIvW,GAAGnB,OAAH,CAAW2V,KAAX,CAAJ,EAAuB;IACnBA,0BAAM3Q,UAAN,CAAiB,CAAjB,EAAoB2S,SAApB,GAAgCxT,KAAhC;IACH;IACJ;IACJ,SAdD;;IAgBA,YAAIjE,KAAJ,EAAW;IACP,oBAAQA,MAAMuB,IAAd;IACI;IACA,qBAAK,YAAL;IACA,qBAAK,SAAL;IACA,qBAAK,QAAL;IACI0C,4BAAQ8J,cAAc,KAAK9B,WAAnB,EAAgC,KAAK8H,QAArC,CAAR;;IAEA;IACA,wBAAI/T,MAAMuB,IAAN,KAAe,YAAnB,EAAiC;IAC7BgR,iCAAS6E,QAAT,CAAkB3V,IAAlB,CAAuB,IAAvB,EAA6B,KAAKmB,QAAL,CAAc8Q,MAAd,CAAqBC,IAAlD,EAAwD1P,KAAxD;IACH;;IAED;;IAEJ;IACA,qBAAK,SAAL;IACA,qBAAK,UAAL;IACIsT,gCAAY,KAAK3U,QAAL,CAAciR,OAAd,CAAsBC,MAAlC,EAA0C,KAAK4D,QAAL,GAAgB,GAA1D;;IAEA;;IAEJ;IACI;IAtBR;IAwBH;IACJ,KA/dY;;;IAieb;IACAtB,mBAlea,2BAkeG3R,MAleH,EAkeW;IACpB;IACA,YAAMyG,QAAQjK,GAAGjB,KAAH,CAASyE,MAAT,IAAmBA,OAAOA,MAA1B,GAAmCA,MAAjD;;IAEA;IACA,YAAI,CAACxD,GAAGnB,OAAH,CAAWoL,KAAX,CAAD,IAAsBA,MAAMS,YAAN,CAAmB,MAAnB,MAA+B,OAAzD,EAAkE;IAC9D;IACH;;IAED;IACA,YAAI7E,QAAQoE,KAAR,EAAe,KAAKwB,MAAL,CAAYqG,SAAZ,CAAsBW,MAAtB,CAA6BC,IAA5C,CAAJ,EAAuD;IACnDzI,kBAAM/G,YAAN,CAAmB,eAAnB,EAAoC,KAAK8H,WAAzC;IACA,gBAAMA,cAAcsG,SAASP,UAAT,CAAoB,KAAK/F,WAAzB,CAApB;IACA,gBAAM8H,WAAWxB,SAASP,UAAT,CAAoB,KAAK+B,QAAzB,CAAjB;IACA,gBAAMnG,YAASsB,KAAKzO,GAAL,CAAS,WAAT,EAAsB,KAAKiM,MAA3B,CAAf;IACAxB,kBAAM/G,YAAN,CACI,gBADJ,EAEIyJ,UAAOhI,OAAP,CAAe,eAAf,EAAgCqG,WAAhC,EAA6CrG,OAA7C,CAAqD,YAArD,EAAmEmO,QAAnE,CAFJ;IAIH,SATD,MASO,IAAIjN,QAAQoE,KAAR,EAAe,KAAKwB,MAAL,CAAYqG,SAAZ,CAAsBW,MAAtB,CAA6BE,MAA5C,CAAJ,EAAyD;IAC5D,gBAAM+D,UAAUzM,MAAMjH,KAAN,GAAc,GAA9B;IACAiH,kBAAM/G,YAAN,CAAmB,eAAnB,EAAoCwT,OAApC;IACAzM,kBAAM/G,YAAN,CAAmB,gBAAnB,EAAwCwT,OAAxC;IACH,SAJM,MAIA;IACHzM,kBAAM/G,YAAN,CAAmB,eAAnB,EAAoC+G,MAAMjH,KAA1C;IACH;;IAED;IACA,YAAI,CAAC+E,QAAQG,QAAb,EAAuB;IACnB;IACH;;IAED;IACA+B,cAAMtC,KAAN,CAAYgP,WAAZ,CAAwB,SAAxB,EAAsC1M,MAAMjH,KAAN,GAAciH,MAAM+C,GAApB,GAA0B,GAAhE;IACH,KApgBY;;;IAsgBb;IACA4J,qBAvgBa,6BAugBK7X,KAvgBL,EAugBY;IAAA;;IACrB;IACA,YACI,CAAC,KAAK0M,MAAL,CAAYoL,QAAZ,CAAqBnE,IAAtB,IACA,CAAC1S,GAAGnB,OAAH,CAAW,KAAK8C,QAAL,CAAc8Q,MAAd,CAAqBC,IAAhC,CADD,IAEA,CAAC1S,GAAGnB,OAAH,CAAW,KAAK8C,QAAL,CAAciR,OAAd,CAAsBG,WAAjC,CAFD,IAGA,KAAKD,QAAL,KAAkB,CAJtB,EAKE;IACE;IACH;;IAED;IACA,YAAI4D,UAAU,CAAd;IACA,YAAMI,aAAa,KAAKnV,QAAL,CAAc6Q,QAAd,CAAuBuE,qBAAvB,EAAnB;IACA,YAAMC,UAAa,KAAKvL,MAAL,CAAYuH,UAAZ,CAAuBC,OAApC,cAAN;;IAEA,YAAMpT,SAAS,yBAAU;IACrB0F,wBAAY,OAAK5D,QAAL,CAAciR,OAAd,CAAsBG,WAAlC,EAA+CiE,OAA/C,EAAwDnX,OAAxD;IACH,SAFD;;IAIA;IACA,YAAI,KAAKqK,KAAT,EAAgB;IACZrK,mBAAO,KAAP;IACA;IACH;;IAED;IACA,YAAIG,GAAGjB,KAAH,CAASA,KAAT,CAAJ,EAAqB;IACjB2X,sBAAU,MAAMI,WAAWG,KAAjB,IAA0BlY,MAAMmY,KAAN,GAAcJ,WAAWK,IAAnD,CAAV;IACH,SAFD,MAEO,IAAIvR,SAAS,KAAKjE,QAAL,CAAciR,OAAd,CAAsBG,WAA/B,EAA4CiE,OAA5C,CAAJ,EAA0D;IAC7DN,sBAAUU,WAAW,KAAKzV,QAAL,CAAciR,OAAd,CAAsBG,WAAtB,CAAkCpL,KAAlC,CAAwCwP,IAAnD,EAAyD,EAAzD,CAAV;IACH,SAFM,MAEA;IACH;IACH;;IAED;IACA,YAAIT,UAAU,CAAd,EAAiB;IACbA,sBAAU,CAAV;IACH,SAFD,MAEO,IAAIA,UAAU,GAAd,EAAmB;IACtBA,sBAAU,GAAV;IACH;;IAED;IACApF,iBAAS2E,iBAAT,CAA2BzV,IAA3B,CAAgC,IAAhC,EAAsC,KAAKmB,QAAL,CAAciR,OAAd,CAAsBG,WAA5D,EAAyE,KAAKD,QAAL,GAAgB,GAAhB,GAAsB4D,OAA/F;;IAEA;IACA,aAAK/U,QAAL,CAAciR,OAAd,CAAsBG,WAAtB,CAAkCpL,KAAlC,CAAwCwP,IAAxC,GAAkDT,OAAlD;;IAEA;IACA;IACA,YAAI1W,GAAGjB,KAAH,CAASA,KAAT,KAAmB,CAAC,YAAD,EAAe,YAAf,EAA6BkH,QAA7B,CAAsClH,MAAMuB,IAA5C,CAAvB,EAA0E;IACtET,mBAAOd,MAAMuB,IAAN,KAAe,YAAtB;IACH;IACJ,KA5jBY;;;IA8jBb;IACA+W,cA/jBa,sBA+jBFtY,KA/jBE,EA+jBK;IACd;IACA,YAAMuY,SAAS,CAACtX,GAAGnB,OAAH,CAAW,KAAK8C,QAAL,CAAciR,OAAd,CAAsBE,QAAjC,CAAD,IAA+C,KAAKrH,MAAL,CAAY8L,UAA1E;;IAEA;IACAjG,iBAAS2E,iBAAT,CAA2BzV,IAA3B,CACI,IADJ,EAEI,KAAKmB,QAAL,CAAciR,OAAd,CAAsB5H,WAF1B,EAGIsM,SAAS,KAAKxE,QAAL,GAAgB,KAAK9H,WAA9B,GAA4C,KAAKA,WAHrD,EAIIsM,MAJJ;;IAOA;IACA,YAAIvY,SAASA,MAAMuB,IAAN,KAAe,YAAxB,IAAwC,KAAKuJ,KAAL,CAAW2N,OAAvD,EAAgE;IAC5D;IACH;;IAED;IACAlG,iBAAS+E,cAAT,CAAwB7V,IAAxB,CAA6B,IAA7B,EAAmCzB,KAAnC;IACH,KAllBY;;;IAolBb;IACA0Y,kBArlBa,4BAqlBI;IACb;IACA,YAAI,CAAC,KAAKpY,SAAL,CAAe8J,EAAhB,IAAuB,CAAC,KAAKsC,MAAL,CAAY8L,UAAb,IAA2B,KAAKvM,WAA3D,EAAyE;IACrE;IACH;;IAED;IACA;IACA;IACA;IACA,YAAI,KAAK8H,QAAL,aAAiB,CAAjB,EAAoB,EAApB,CAAJ,EAA4B;IACxB5N,yBAAa,KAAKvD,QAAL,CAAciR,OAAd,CAAsB5H,WAAnC,EAAgD,IAAhD;IACA9F,yBAAa,KAAKvD,QAAL,CAAc6Q,QAA3B,EAAqC,IAArC;IACA;IACH;;IAED;IACA,YAAIxS,GAAGnB,OAAH,CAAW,KAAK8C,QAAL,CAAc8Q,MAAd,CAAqBC,IAAhC,CAAJ,EAA2C;IACvC,iBAAK/Q,QAAL,CAAc8Q,MAAd,CAAqBC,IAArB,CAA0BxP,YAA1B,CAAuC,eAAvC,EAAwD,KAAK4P,QAA7D;IACH;;IAED;IACA,YAAM4E,cAAc1X,GAAGnB,OAAH,CAAW,KAAK8C,QAAL,CAAciR,OAAd,CAAsBE,QAAjC,CAApB;;IAEA;IACA,YAAI,CAAC4E,WAAD,IAAgB,KAAKjM,MAAL,CAAYkM,eAA5B,IAA+C,KAAK1M,MAAxD,EAAgE;IAC5DqG,qBAAS2E,iBAAT,CAA2BzV,IAA3B,CAAgC,IAAhC,EAAsC,KAAKmB,QAAL,CAAciR,OAAd,CAAsB5H,WAA5D,EAAyE,KAAK8H,QAA9E;IACH;;IAED;IACA,YAAI4E,WAAJ,EAAiB;IACbpG,qBAAS2E,iBAAT,CAA2BzV,IAA3B,CAAgC,IAAhC,EAAsC,KAAKmB,QAAL,CAAciR,OAAd,CAAsBE,QAA5D,EAAsE,KAAKA,QAA3E;IACH;;IAED;IACAxB,iBAASsF,iBAAT,CAA2BpW,IAA3B,CAAgC,IAAhC;IACH,KAznBY;;;IA2nBb;IACAoX,aA5nBa,qBA4nBHC,OA5nBG,EA4nBMhY,MA5nBN,EA4nBc;IACvBqF,qBAAa,KAAKvD,QAAL,CAAc0Q,QAAd,CAAuByF,IAAvB,CAA4BD,OAA5B,CAAb,EAAmD,CAAChY,MAApD;IACH,KA9nBY;;;IAgoBb;IACAkY,kBAjoBa,0BAioBEzY,OAjoBF,EAioBW;IAAA;;IACpB;IACA,YAAI,CAACU,GAAGnB,OAAH,CAAW,KAAK8C,QAAL,CAAc0Q,QAAd,CAAuB2F,KAAvB,CAA6BzM,OAAxC,CAAL,EAAuD;IACnD;IACH;;IAED,YAAMjL,OAAO,SAAb;IACA,YAAMoV,OAAO,KAAK/T,QAAL,CAAc0Q,QAAd,CAAuB2F,KAAvB,CAA6BzM,OAA7B,CAAqChF,aAArC,CAAmD,IAAnD,CAAb;;IAEA;IACA,YAAIvG,GAAGtB,KAAH,CAASY,OAAT,CAAJ,EAAuB;IACnB,iBAAKA,OAAL,CAAaiM,OAAb,GAAuB6C,OAAO9O,OAAP,EAAgByD,MAAhB,CAAuB;IAAA,uBAAW,OAAK0I,MAAL,CAAYF,OAAZ,CAAoBjM,OAApB,CAA4B2G,QAA5B,CAAqCsF,OAArC,CAAX;IAAA,aAAvB,CAAvB;IACH;;IAED;IACA,YAAM1L,SAAS,CAACG,GAAGb,KAAH,CAAS,KAAKG,OAAL,CAAaiM,OAAtB,CAAD,IAAmC,KAAKjM,OAAL,CAAaiM,OAAb,CAAqB1N,MAArB,GAA8B,CAAhF;IACAyT,iBAASsG,SAAT,CAAmBpX,IAAnB,CAAwB,IAAxB,EAA8BF,IAA9B,EAAoCT,MAApC;;IAEA;IACAyR,iBAAS2G,SAAT,CAAmBzX,IAAnB,CAAwB,IAAxB;;IAEA;IACA,YAAI,CAACX,MAAL,EAAa;IACT;IACH;;IAED;IACA+D,qBAAa8R,IAAb;;IAEA;IACA,YAAMwC,WAAW,SAAXA,QAAW,UAAW;IACxB,gBAAM1D,QAAQvG,KAAKzO,GAAL,mBAAyB+L,OAAzB,EAAoC,OAAKE,MAAzC,CAAd;;IAEA,gBAAI,CAAC+I,MAAM3W,MAAX,EAAmB;IACf,uBAAO,IAAP;IACH;;IAED,mBAAOyT,SAAS4C,WAAT,CAAqB1T,IAArB,CAA0B,MAA1B,EAAgCgU,KAAhC,CAAP;IACH,SARD;;IAUA;IACA,aAAKlV,OAAL,CAAaiM,OAAb,CACK4M,IADL,CACU,UAACC,CAAD,EAAIC,CAAJ,EAAU;IACZ,gBAAMC,UAAU,OAAK7M,MAAL,CAAYF,OAAZ,CAAoBjM,OAApC;IACA,mBAAOgZ,QAAQjK,OAAR,CAAgB+J,CAAhB,IAAqBE,QAAQjK,OAAR,CAAgBgK,CAAhB,CAArB,GAA0C,CAA1C,GAA8C,CAAC,CAAtD;IACH,SAJL,EAKKlY,OALL,CAKa,mBAAW;IAChBmR,qBAASmE,cAAT,CAAwBjV,IAAxB,CAA6B,MAA7B,EAAmC;IAC/BwC,uBAAOuI,OADwB;IAE/BmK,0BAF+B;IAG/BpV,0BAH+B;IAI/B6N,uBAAOmD,SAASiH,QAAT,CAAkB/X,IAAlB,CAAuB,MAAvB,EAA6B,SAA7B,EAAwC+K,OAAxC,CAJwB;IAK/B4I,uBAAO+D,SAAS3M,OAAT;IALwB,aAAnC;IAOH,SAbL;;IAeA+F,iBAASkH,aAAT,CAAuBhY,IAAvB,CAA4B,IAA5B,EAAkCF,IAAlC,EAAwCoV,IAAxC;IACH,KA1rBY;;;IA4rBb;IACA6C,YA7rBa,oBA6rBJV,OA7rBI,EA6rBK7U,KA7rBL,EA6rBY;IACrB,gBAAQ6U,OAAR;IACI,iBAAK,OAAL;IACI,uBAAO7U,UAAU,CAAV,GAAciL,KAAKzO,GAAL,CAAS,QAAT,EAAmB,KAAKiM,MAAxB,CAAd,GAAmDzI,KAAnD,YAAP;;IAEJ,iBAAK,SAAL;IACI,oBAAIhD,GAAGzB,MAAH,CAAUyE,KAAV,CAAJ,EAAsB;IAClB,wBAAMwR,QAAQvG,KAAKzO,GAAL,mBAAyBwD,KAAzB,EAAkC,KAAKyI,MAAvC,CAAd;;IAEA,wBAAI,CAAC+I,MAAM3W,MAAX,EAAmB;IACf,+BAAUmF,KAAV;IACH;;IAED,2BAAOwR,KAAP;IACH;;IAED,uBAAOpH,YAAYpK,KAAZ,CAAP;;IAEJ,iBAAK,UAAL;IACI,uBAAOsP,SAASiG,QAAT,CAAkB/X,IAAlB,CAAuB,IAAvB,CAAP;;IAEJ;IACI,uBAAO,IAAP;IArBR;IAuBH,KArtBY;;;IAutBb;IACAgY,iBAxtBa,yBAwtBCX,OAxtBD,EAwtBUjW,SAxtBV,EAwtBqBlG,KAxtBrB,EAwtB4B;IACrC,YAAM+c,OAAO,KAAK9W,QAAL,CAAc0Q,QAAd,CAAuB2F,KAAvB,CAA6BH,OAA7B,CAAb;IACA,YAAI7U,QAAQ,IAAZ;IACA,YAAI0S,OAAO9T,SAAX;;IAEA,YAAIiW,YAAY,UAAhB,EAA4B;IACxB7U,oBAAQ,KAAK0V,YAAb;IACH,SAFD,MAEO;IACH1V,oBAAQ,CAAChD,GAAGb,KAAH,CAASzD,KAAT,CAAD,GAAmBA,KAAnB,GAA2B,KAAKmc,OAAL,CAAnC;;IAEA;IACA,gBAAI7X,GAAGb,KAAH,CAAS6D,KAAT,CAAJ,EAAqB;IACjBA,wBAAQ,KAAKyI,MAAL,CAAYoM,OAAZ,EAAqBc,OAA7B;IACH;;IAED;IACA,gBAAI,CAAC3Y,GAAGb,KAAH,CAAS,KAAKG,OAAL,CAAauY,OAAb,CAAT,CAAD,IAAoC,CAAC,KAAKvY,OAAL,CAAauY,OAAb,EAAsB5R,QAAtB,CAA+BjD,KAA/B,CAAzC,EAAgF;IAC5E,qBAAK2I,KAAL,CAAWwH,IAAX,6BAAyCnQ,KAAzC,eAAuD6U,OAAvD;IACA;IACH;;IAED;IACA,gBAAI,CAAC,KAAKpM,MAAL,CAAYoM,OAAZ,EAAqBvY,OAArB,CAA6B2G,QAA7B,CAAsCjD,KAAtC,CAAL,EAAmD;IAC/C,qBAAK2I,KAAL,CAAWwH,IAAX,0BAAsCnQ,KAAtC,eAAoD6U,OAApD;IACA;IACH;IACJ;;IAED;IACA,YAAI,CAAC7X,GAAGnB,OAAH,CAAW6W,IAAX,CAAL,EAAuB;IACnBA,mBAAO+C,QAAQA,KAAKlS,aAAL,CAAmB,IAAnB,CAAf;IACH;;IAED;IACA,YAAI,CAACvG,GAAGnB,OAAH,CAAW6W,IAAX,CAAL,EAAuB;IACnB;IACH;;IAED;IACA,YAAMlB,QAAQ,KAAK7S,QAAL,CAAc0Q,QAAd,CAAuByF,IAAvB,CAA4BD,OAA5B,EAAqCtR,aAArC,OAAuD,KAAKkF,MAAL,CAAYuH,UAAZ,CAAuBoB,IAAvB,CAA4BpR,KAAnF,CAAd;IACAwR,cAAM1G,SAAN,GAAkBwD,SAASiH,QAAT,CAAkB/X,IAAlB,CAAuB,IAAvB,EAA6BqX,OAA7B,EAAsC7U,KAAtC,CAAlB;;IAEA;IACA,YAAMQ,SAASkS,QAAQA,KAAKnP,aAAL,mBAAmCvD,KAAnC,QAAvB;;IAEA,YAAIhD,GAAGnB,OAAH,CAAW2E,MAAX,CAAJ,EAAwB;IACpBA,mBAAOmS,OAAP,GAAiB,IAAjB;IACH;IACJ,KAxwBY;;;IA0wBb;IACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2CA;IACA;;IAEA;IACAiD,mBA1zBa,6BA0zBK;IAAA;;IACd;IACA,YAAMtY,OAAO,UAAb;IACA,YAAMoV,OAAO,KAAK/T,QAAL,CAAc0Q,QAAd,CAAuB2F,KAAvB,CAA6B1F,QAA7B,CAAsC/L,aAAtC,CAAoD,IAApD,CAAb;IACA,YAAMsS,SAASvG,SAASwG,SAAT,CAAmBtY,IAAnB,CAAwB,IAAxB,CAAf;;IAEA;IACA8Q,iBAASsG,SAAT,CAAmBpX,IAAnB,CAAwB,IAAxB,EAA8BF,IAA9B,EAAoCuY,OAAOhb,MAA3C;;IAEA;IACA+F,qBAAa8R,IAAb;;IAEA;IACApE,iBAAS2G,SAAT,CAAmBzX,IAAnB,CAAwB,IAAxB;;IAEA;IACA,YAAI,CAACqY,OAAOhb,MAAZ,EAAoB;IAChB;IACH;;IAED;IACA,YAAMyB,UAAUuZ,OAAOjO,GAAP,CAAW,UAAC3L,KAAD,EAAQ+D,KAAR;IAAA,mBAAmB;IAC1CA,4BAD0C;IAE1C2S,yBAAS,OAAKrD,QAAL,CAAcyG,OAAd,IAAyB,OAAKL,YAAL,KAAsB1V,KAFd;IAG1CmL,uBAAOmE,SAASiG,QAAT,CAAkB/X,IAAlB,CAAuB,MAAvB,EAA6BvB,KAA7B,CAHmC;IAI1CkV,uBAAOlV,MAAM+Z,QAAN,IAAkB1H,SAAS4C,WAAT,CAAqB1T,IAArB,CAA0B,MAA1B,EAAgCvB,MAAM+Z,QAAN,CAAe3L,WAAf,EAAhC,CAJiB;IAK1CqI,0BAL0C;IAM1CpV,sBAAM;IANoC,aAAnB;IAAA,SAAX,CAAhB;;IASA;IACAhB,gBAAQ2Z,OAAR,CAAgB;IACZjW,mBAAO,CAAC,CADI;IAEZ2S,qBAAS,CAAC,KAAKrD,QAAL,CAAcyG,OAFZ;IAGZ5K,mBAAOF,KAAKzO,GAAL,CAAS,UAAT,EAAqB,KAAKiM,MAA1B,CAHK;IAIZiK,sBAJY;IAKZpV,kBAAM;IALM,SAAhB;;IAQA;IACAhB,gBAAQa,OAAR,CAAgBmR,SAASmE,cAAT,CAAwByD,IAAxB,CAA6B,IAA7B,CAAhB;;IAEA5H,iBAASkH,aAAT,CAAuBhY,IAAvB,CAA4B,IAA5B,EAAkCF,IAAlC,EAAwCoV,IAAxC;IACH,KAr2BY;;;IAu2Bb;IACAyD,gBAx2Ba,wBAw2BA7Z,OAx2BA,EAw2BS;IAAA;;IAClB;IACA,YAAI,CAAC,KAAKmM,MAAL,CAAY6F,QAAZ,CAAqBrL,QAArB,CAA8B,UAA9B,CAAD,IAA8C,CAAC,KAAKwF,MAAL,CAAY4G,QAAZ,CAAqBpM,QAArB,CAA8B,OAA9B,CAAnD,EAA2F;IACvF;IACH;;IAED;IACA,YAAI,CAACjG,GAAGnB,OAAH,CAAW,KAAK8C,QAAL,CAAc0Q,QAAd,CAAuB2F,KAAvB,CAA6BoB,KAAxC,CAAL,EAAqD;IACjD;IACH;;IAED,YAAM9Y,OAAO,OAAb;;IAEA;IACA,YAAIN,GAAGtB,KAAH,CAASY,OAAT,CAAJ,EAAuB;IACnB,iBAAKA,OAAL,CAAa8Z,KAAb,GAAqB9Z,OAArB;IACH,SAFD,MAEO,IAAI,KAAKsK,OAAL,IAAgB,KAAKyP,OAAzB,EAAkC;IACrC,iBAAK/Z,OAAL,CAAa8Z,KAAb,GAAqB,CAAC,GAAD,EAAM,IAAN,EAAY,CAAZ,EAAe,IAAf,EAAqB,GAArB,EAA0B,IAA1B,EAAgC,CAAhC,CAArB;IACH;;IAED;IACA,aAAK9Z,OAAL,CAAa8Z,KAAb,GAAqB,KAAK9Z,OAAL,CAAa8Z,KAAb,CAAmBrW,MAAnB,CAA0B;IAAA,mBAAS,OAAK0I,MAAL,CAAY2N,KAAZ,CAAkB9Z,OAAlB,CAA0B2G,QAA1B,CAAmCmT,KAAnC,CAAT;IAAA,SAA1B,CAArB;;IAEA;IACA,YAAMvZ,SAAS,CAACG,GAAGb,KAAH,CAAS,KAAKG,OAAL,CAAa8Z,KAAtB,CAAD,IAAiC,KAAK9Z,OAAL,CAAa8Z,KAAb,CAAmBvb,MAAnB,GAA4B,CAA5E;IACAyT,iBAASsG,SAAT,CAAmBpX,IAAnB,CAAwB,IAAxB,EAA8BF,IAA9B,EAAoCT,MAApC;;IAEA;IACAyR,iBAAS2G,SAAT,CAAmBzX,IAAnB,CAAwB,IAAxB;;IAEA;IACA,YAAI,CAACX,MAAL,EAAa;IACT;IACH;;IAED;IACA,YAAM6V,OAAO,KAAK/T,QAAL,CAAc0Q,QAAd,CAAuB2F,KAAvB,CAA6BoB,KAA7B,CAAmC7S,aAAnC,CAAiD,IAAjD,CAAb;;IAEA;IACA3C,qBAAa8R,IAAb;;IAEA;IACA,aAAKpW,OAAL,CAAa8Z,KAAb,CAAmBjZ,OAAnB,CAA2B,iBAAS;IAChCmR,qBAASmE,cAAT,CAAwBjV,IAAxB,CAA6B,MAA7B,EAAmC;IAC/BwC,uBAAOoW,KADwB;IAE/B1D,0BAF+B;IAG/BpV,0BAH+B;IAI/B6N,uBAAOmD,SAASiH,QAAT,CAAkB/X,IAAlB,CAAuB,MAAvB,EAA6B,OAA7B,EAAsC4Y,KAAtC;IAJwB,aAAnC;IAMH,SAPD;;IASA9H,iBAASkH,aAAT,CAAuBhY,IAAvB,CAA4B,IAA5B,EAAkCF,IAAlC,EAAwCoV,IAAxC;IACH,KA55BY;;;IA85Bb;IACAuC,aA/5Ba,uBA+5BD;IAAA,YACAH,IADA,GACS,KAAKnW,QAAL,CAAc0Q,QADvB,CACAyF,IADA;;IAER,YAAMd,UAAU,CAAChX,GAAGb,KAAH,CAAS2Y,IAAT,CAAD,IAAmB9b,OAAOsd,MAAP,CAAcxB,IAAd,EAAoByB,IAApB,CAAyB;IAAA,mBAAO,CAACC,IAAIrU,MAAZ;IAAA,SAAzB,CAAnC;;IAEAD,qBAAa,KAAKvD,QAAL,CAAc0Q,QAAd,CAAuB+B,IAApC,EAA0C,CAAC4C,OAA3C;IACH,KAp6BY;;;IAs6Bb;IACAyC,cAv6Ba,sBAu6BF1a,KAv6BE,EAu6BK;IAAA,YACN2a,IADM,GACG,KAAK/X,QAAL,CAAc0Q,QADjB,CACNqH,IADM;;IAEd,YAAMnF,SAAS,KAAK5S,QAAL,CAAcoQ,OAAd,CAAsBM,QAArC;;IAEA;IACA,YAAI,CAACrS,GAAGnB,OAAH,CAAW6a,IAAX,CAAD,IAAqB,CAAC1Z,GAAGnB,OAAH,CAAW0V,MAAX,CAA1B,EAA8C;IAC1C;IACH;;IAED,YAAMoF,OAAO3Z,GAAGxB,OAAH,CAAWO,KAAX,IAAoBA,KAApB,GAA4BiB,GAAGnB,OAAH,CAAW6a,IAAX,KAAoBA,KAAKrU,YAAL,CAAkB,QAAlB,CAA7D;;IAEA,YAAIrF,GAAGjB,KAAH,CAASA,KAAT,CAAJ,EAAqB;IACjB,gBAAM6a,aAAa5Z,GAAGnB,OAAH,CAAW6a,IAAX,KAAoBA,KAAK/T,QAAL,CAAc5G,MAAMyE,MAApB,CAAvC;IACA,gBAAMqW,WAAW9a,MAAMyE,MAAN,KAAiB,KAAK7B,QAAL,CAAcoQ,OAAd,CAAsBM,QAAxD;;IAEA;IACA;IACA;IACA,gBAAIuH,cAAe,CAACA,UAAD,IAAe,CAACC,QAAhB,IAA4BF,IAA/C,EAAsD;IAClD;IACH;;IAED;IACA,gBAAIE,QAAJ,EAAc;IACV9a,sBAAM+a,eAAN;IACH;IACJ;;IAED;IACA,YAAI9Z,GAAGnB,OAAH,CAAW0V,MAAX,CAAJ,EAAwB;IACpBA,mBAAOrR,YAAP,CAAoB,eAApB,EAAqCyW,IAArC;IACH;;IAED,YAAI3Z,GAAGnB,OAAH,CAAW6a,IAAX,CAAJ,EAAsB;IAClBxU,yBAAawU,IAAb,EAAmB,CAACC,IAApB;IACApU,wBAAY,KAAK5D,QAAL,CAAcC,SAA1B,EAAqC,KAAK6J,MAAL,CAAYuH,UAAZ,CAAuBoB,IAAvB,CAA4BxE,IAAjE,EAAuE+J,IAAvE;;IAEA,gBAAIA,IAAJ,EAAU;IACND,qBAAKpU,eAAL,CAAqB,UAArB;IACH,aAFD,MAEO;IACHoU,qBAAKxW,YAAL,CAAkB,UAAlB,EAA8B,CAAC,CAA/B;IACH;IACJ;IACJ,KAl9BY;;;IAo9Bb;IACA6W,cAr9Ba,sBAq9BFP,GAr9BE,EAq9BG;IACZ,YAAMQ,QAAQR,IAAInX,SAAJ,CAAc,IAAd,CAAd;IACA2X,cAAMrS,KAAN,CAAYsS,QAAZ,GAAuB,UAAvB;IACAD,cAAMrS,KAAN,CAAYuS,OAAZ,GAAsB,CAAtB;IACAF,cAAM1U,eAAN,CAAsB,QAAtB;;IAEA;IACA5I,cAAMuF,IAAN,CAAW+X,MAAMhU,gBAAN,CAAuB,aAAvB,CAAX,EAAkD7F,OAAlD,CAA0D,iBAAS;IAC/D,gBAAM0V,OAAOna,MAAMgP,YAAN,CAAmB,MAAnB,CAAb;IACAhP,kBAAMwH,YAAN,CAAmB,MAAnB,EAA8B2S,IAA9B;IACH,SAHD;;IAKA;IACA2D,YAAIjX,UAAJ,CAAeG,WAAf,CAA2BsX,KAA3B;;IAEA;IACA,YAAM/C,QAAQ+C,MAAMG,WAApB;IACA,YAAMC,SAASJ,MAAMK,YAArB;;IAEA;IACA3W,sBAAcsW,KAAd;;IAEA,eAAO;IACH/C,wBADG;IAEHmD;IAFG,SAAP;IAIH,KA/+BY;;;IAi/Bb;IACAE,WAl/Ba,qBAk/BQ;IAAA;;IAAA,YAAb9W,MAAa,uEAAJ,EAAI;IAAA,YACT4Q,IADS,GACA,KAAKzS,QAAL,CAAc0Q,QADd,CACT+B,IADS;;IAEjB,YAAMqE,OAAOpV,SAAS6M,cAAT,CAAwB1M,MAAxB,CAAb;;IAEA;IACA,YAAI,CAACxD,GAAGnB,OAAH,CAAW4Z,IAAX,CAAL,EAAuB;IACnB;IACH;;IAED;IACA,YAAM8B,QAAQ9B,KAAK/N,YAAL,CAAkB,MAAlB,MAA8B,UAA5C;IACA,YAAI,CAAC6P,KAAL,EAAY;IACR;IACH;;IAED;IACA;IACA,YAAMxN,UAAUqH,KAAK7N,aAAL,CAAmB,iCAAnB,CAAhB;IACA,YAAM3E,YAAYmL,QAAQxK,UAA1B;;IAEA;IACA7F,cAAMuF,IAAN,CAAWmS,KAAKpO,gBAAL,sBAAyC+G,QAAQrC,YAAR,CAAqB,IAArB,CAAzC,QAAX,EAAqFvK,OAArF,CAA6F,kBAAU;IACnGN,mBAAOqD,YAAP,CAAoB,eAApB,EAAqC,KAArC;IACH,SAFD;;IAIA;IACA,YAAIyF,QAAQwB,WAAR,IAAuB,CAACxB,QAAQyB,aAApC,EAAmD;IAC/C;IACAxI,sBAAU+F,KAAV,CAAgBsP,KAAhB,GAA2BlK,QAAQoN,WAAnC;IACAvY,sBAAU+F,KAAV,CAAgByS,MAAhB,GAA4BrN,QAAQsN,YAApC;;IAEA;IACA,gBAAMG,OAAOlJ,SAASyI,UAAT,CAAoBvZ,IAApB,CAAyB,IAAzB,EAA+BiY,IAA/B,CAAb;;IAEA;IACA,gBAAMgC,UAAU,SAAVA,OAAU,IAAK;IACjB;IACA,oBAAIrc,EAAEoF,MAAF,KAAa5B,SAAb,IAA0B,CAAC,CAAC,OAAD,EAAU,QAAV,EAAoBqE,QAApB,CAA6B7H,EAAEsc,YAA/B,CAA/B,EAA6E;IACzE;IACH;;IAED;IACA9Y,0BAAU+F,KAAV,CAAgBsP,KAAhB,GAAwB,EAAxB;IACArV,0BAAU+F,KAAV,CAAgByS,MAAhB,GAAyB,EAAzB;;IAEA;IACA3Z,oBAAID,IAAJ,CAAS,MAAT,EAAeoB,SAAf,EAA0ByF,kBAA1B,EAA8CoT,OAA9C;IACH,aAZD;;IAcA;IACAla,eAAGC,IAAH,CAAQ,IAAR,EAAcoB,SAAd,EAAyByF,kBAAzB,EAA6CoT,OAA7C;;IAEA;IACA7Y,sBAAU+F,KAAV,CAAgBsP,KAAhB,GAA2BuD,KAAKvD,KAAhC;IACArV,sBAAU+F,KAAV,CAAgByS,MAAhB,GAA4BI,KAAKJ,MAAjC;IACH;;IAED;IACAlV,qBAAa6H,OAAb,EAAsB,IAAtB;IACAA,gBAAQ7J,YAAR,CAAqB,UAArB,EAAiC,CAAC,CAAlC;;IAEA;IACAgC,qBAAauT,IAAb,EAAmB,KAAnB;;IAEA,YAAMX,OAAOzR,YAAY7F,IAAZ,CAAiB,IAAjB,uBAA0CgD,MAA1C,QAAb;IACA9G,cAAMuF,IAAN,CAAW6V,IAAX,EAAiB3X,OAAjB,CAAyB,eAAO;IAC5BqZ,gBAAItW,YAAJ,CAAiB,eAAjB,EAAkC,IAAlC;IACH,SAFD;IAGAuV,aAAKnT,eAAL,CAAqB,UAArB;;IAEA;IACAmT,aAAKzS,gBAAL,CAAsB,yDAAtB,EAAiF,CAAjF,EAAoFmB,KAApF;IACH,KA1jCY;;;IA4jCb;IACA;IACAwT,UA9jCa,kBA8jCNvK,IA9jCM,EA8jCA;IAAA;;IACT;IACA,YAAIpQ,GAAGb,KAAH,CAAS,KAAKsM,MAAL,CAAY6F,QAArB,CAAJ,EAAoC;IAChC,mBAAO,IAAP;IACH;;IAED;IACA,YAAM1P,YAAYuB,cAAc,KAAd,EAAqBgB,0BAA0B,KAAKsH,MAAL,CAAYqG,SAAZ,CAAsBR,QAAtB,CAA+BvP,OAAzD,CAArB,CAAlB;;IAEA;IACA,YAAI,KAAK0J,MAAL,CAAY6F,QAAZ,CAAqBrL,QAArB,CAA8B,SAA9B,CAAJ,EAA8C;IAC1CrE,sBAAUc,WAAV,CAAsB4O,SAAS+C,YAAT,CAAsB7T,IAAtB,CAA2B,IAA3B,EAAiC,SAAjC,CAAtB;IACH;;IAED;IACA,YAAI,KAAKiL,MAAL,CAAY6F,QAAZ,CAAqBrL,QAArB,CAA8B,QAA9B,CAAJ,EAA6C;IACzCrE,sBAAUc,WAAV,CAAsB4O,SAAS+C,YAAT,CAAsB7T,IAAtB,CAA2B,IAA3B,EAAiC,QAAjC,CAAtB;IACH;;IAED;IACA,YAAI,KAAKiL,MAAL,CAAY6F,QAAZ,CAAqBrL,QAArB,CAA8B,MAA9B,CAAJ,EAA2C;IACvCrE,sBAAUc,WAAV,CAAsB4O,SAAS+C,YAAT,CAAsB7T,IAAtB,CAA2B,IAA3B,EAAiC,MAAjC,CAAtB;IACH;;IAED;IACA,YAAI,KAAKiL,MAAL,CAAY6F,QAAZ,CAAqBrL,QAArB,CAA8B,cAA9B,CAAJ,EAAmD;IAC/CrE,sBAAUc,WAAV,CAAsB4O,SAAS+C,YAAT,CAAsB7T,IAAtB,CAA2B,IAA3B,EAAiC,cAAjC,CAAtB;IACH;;IAED;IACA,YAAI,KAAKiL,MAAL,CAAY6F,QAAZ,CAAqBrL,QAArB,CAA8B,UAA9B,CAAJ,EAA+C;IAC3C,gBAAMuM,WAAWrP,cAAc,KAAd,EAAqBgB,0BAA0B,KAAKsH,MAAL,CAAYqG,SAAZ,CAAsBU,QAAhD,CAArB,CAAjB;;IAEA;IACAA,qBAAS9P,WAAT,CACI4O,SAASyD,WAAT,CAAqBvU,IAArB,CAA0B,IAA1B,EAAgC,MAAhC,EAAwC;IACpCyE,mCAAiBmL,KAAKnL;IADc,aAAxC,CADJ;;IAMA;IACAuN,qBAAS9P,WAAT,CAAqB4O,SAAS8D,cAAT,CAAwB5U,IAAxB,CAA6B,IAA7B,EAAmC,QAAnC,CAArB;;IAEA;;IAEA;IACA,gBAAI,KAAKiL,MAAL,CAAYoL,QAAZ,CAAqBnE,IAAzB,EAA+B;IAC3B,oBAAMO,UAAU9P,cACZ,MADY,EAEZ;IACI6B,2BAAO,KAAKyG,MAAL,CAAYuH,UAAZ,CAAuBC;IADlC,iBAFY,EAKZ,OALY,CAAhB;;IAQAT,yBAAS9P,WAAT,CAAqBuQ,OAArB;IACA,qBAAKtR,QAAL,CAAciR,OAAd,CAAsBG,WAAtB,GAAoCE,OAApC;IACH;;IAED,iBAAKtR,QAAL,CAAc6Q,QAAd,GAAyBA,QAAzB;IACA5Q,sBAAUc,WAAV,CAAsB,KAAKf,QAAL,CAAc6Q,QAApC;IACH;;IAED;IACA,YAAI,KAAK/G,MAAL,CAAY6F,QAAZ,CAAqBrL,QAArB,CAA8B,cAA9B,CAAJ,EAAmD;IAC/CrE,sBAAUc,WAAV,CAAsB4O,SAASkE,UAAT,CAAoBhV,IAApB,CAAyB,IAAzB,EAA+B,aAA/B,CAAtB;IACH;;IAED;IACA,YAAI,KAAKiL,MAAL,CAAY6F,QAAZ,CAAqBrL,QAArB,CAA8B,UAA9B,CAAJ,EAA+C;IAC3CrE,sBAAUc,WAAV,CAAsB4O,SAASkE,UAAT,CAAoBhV,IAApB,CAAyB,IAAzB,EAA+B,UAA/B,CAAtB;IACH;;IAED;IACA,YAAI,KAAKiL,MAAL,CAAY6F,QAAZ,CAAqBrL,QAArB,CAA8B,MAA9B,CAAJ,EAA2C;IACvCrE,sBAAUc,WAAV,CAAsB4O,SAAS+C,YAAT,CAAsB7T,IAAtB,CAA2B,IAA3B,EAAiC,MAAjC,CAAtB;IACH;;IAED;IACA,YAAI,KAAKiL,MAAL,CAAY6F,QAAZ,CAAqBrL,QAArB,CAA8B,QAA9B,CAAJ,EAA6C;IACzC,gBAAM0M,SAASxP,cAAc,KAAd,EAAqB;IAChC6B,uBAAO;IADyB,aAArB,CAAf;;IAIA;IACA,gBAAMnC,aAAa;IACfmK,qBAAK,CADU;IAEfiI,sBAAM,IAFS;IAGfjS,uBAAO,KAAKyI,MAAL,CAAYkH;IAHJ,aAAnB;;IAMA;IACAA,mBAAOjQ,WAAP,CACI4O,SAASyD,WAAT,CAAqBvU,IAArB,CACI,IADJ,EAEI,QAFJ,EAGIqK,OAAOhI,UAAP,EAAmB;IACfoC,qCAAmBmL,KAAKnL;IADT,aAAnB,CAHJ,CADJ;;IAUA,iBAAKtD,QAAL,CAAcgR,MAAd,GAAuBA,MAAvB;;IAEA/Q,sBAAUc,WAAV,CAAsBiQ,MAAtB;IACH;;IAED;IACA,YAAI,KAAKlH,MAAL,CAAY6F,QAAZ,CAAqBrL,QAArB,CAA8B,UAA9B,CAAJ,EAA+C;IAC3CrE,sBAAUc,WAAV,CAAsB4O,SAAS+C,YAAT,CAAsB7T,IAAtB,CAA2B,IAA3B,EAAiC,UAAjC,CAAtB;IACH;;IAED;IACA,YAAI,KAAKiL,MAAL,CAAY6F,QAAZ,CAAqBrL,QAArB,CAA8B,UAA9B,KAA6C,CAACjG,GAAGb,KAAH,CAAS,KAAKsM,MAAL,CAAY4G,QAArB,CAAlD,EAAkF;IAC9E,gBAAM+B,OAAOjR,cAAc,KAAd,EAAqB;IAC9B6B,uBAAO,YADuB;IAE9BG,wBAAQ;IAFsB,aAArB,CAAb;;IAKAiP,iBAAK1R,WAAL,CACI4O,SAAS+C,YAAT,CAAsB7T,IAAtB,CAA2B,IAA3B,EAAiC,UAAjC,EAA6C;IACzCyE,8CAA4BmL,KAAKnL,EADQ;IAEzC,iCAAiB,IAFwB;IAGzC,oDAAkCmL,KAAKnL,EAHE;IAIzC,iCAAiB;IAJwB,aAA7C,CADJ;;IASA,gBAAMyU,OAAOvW,cAAc,MAAd,EAAsB;IAC/B6B,uBAAO,uBADwB;IAE/BC,uCAAqBmL,KAAKnL,EAFK;IAG/BE,wBAAQ,EAHuB;IAI/B,8DAA4CiL,KAAKnL,EAJlB;IAK/B0O,sBAAM,SALyB;IAM/BiH,0BAAU,CAAC;IANoB,aAAtB,CAAb;;IASA,gBAAMC,QAAQ1X,cAAc,KAAd,CAAd;;IAEA,gBAAM2X,OAAO3X,cAAc,KAAd,EAAqB;IAC9B8B,uCAAqBmL,KAAKnL,EAA1B,UAD8B;IAE9B,8DAA4CmL,KAAKnL,EAFnB;IAG9B0O,sBAAM;IAHwB,aAArB,CAAb;;IAMA;IACA,gBAAMmE,OAAO3U,cAAc,IAAd,EAAoB;IAC7BwQ,sBAAM;IADuB,aAApB,CAAb;;IAIA;IACA,iBAAKlI,MAAL,CAAY4G,QAAZ,CAAqBlS,OAArB,CAA6B,gBAAQ;IACjC,oBAAMqZ,MAAMrW,cAAc,IAAd,EAAoB;IAC5BwQ,0BAAM,KADsB;IAE5BxO,4BAAQ;IAFoB,iBAApB,CAAZ;;IAKA,oBAAMoP,SAASpR,cACX,QADW,EAEX0H,OAAO1G,0BAA0B,OAAKsH,MAAL,CAAYqG,SAAZ,CAAsBC,OAAtB,CAA8BM,QAAxD,CAAP,EAA0E;IACtE/R,0BAAM,QADgE;IAEtE0E,2BAAU,OAAKyG,MAAL,CAAYuH,UAAZ,CAAuB2B,OAAjC,SAA4C,OAAKlJ,MAAL,CAAYuH,UAAZ,CAAuB2B,OAAnE,cAFsE;IAGtE1P,2CAAqBmL,KAAKnL,EAA1B,SAAgC3E,IAAhC,SAHsE;IAItE,qCAAiB,IAJqD;IAKtE,wDAAkC8P,KAAKnL,EAAvC,SAA6C3E,IALyB;IAMtE,qCAAiB;IANqD,iBAA1E,CAFW,EAUX2N,KAAKzO,GAAL,CAASc,IAAT,EAAe,OAAKmL,MAApB,CAVW,CAAf;;IAaA,oBAAMzI,QAAQG,cAAc,MAAd,EAAsB;IAChC6B,2BAAO,OAAKyG,MAAL,CAAYuH,UAAZ,CAAuBoB,IAAvB,CAA4BpR;IADH,iBAAtB,CAAd;;IAIA;IACAA,sBAAM8K,SAAN,GAAkBsC,KAAK9P,IAAL,CAAlB;;IAEAiU,uBAAO7R,WAAP,CAAmBM,KAAnB;IACAwW,oBAAI9W,WAAJ,CAAgB6R,MAAhB;IACAuD,qBAAKpV,WAAL,CAAiB8W,GAAjB;;IAEA,uBAAK7X,QAAL,CAAc0Q,QAAd,CAAuByF,IAAvB,CAA4BxX,IAA5B,IAAoCkZ,GAApC;IACH,aA/BD;;IAiCAsB,iBAAKpY,WAAL,CAAiBoV,IAAjB;IACA+C,kBAAMnY,WAAN,CAAkBoY,IAAlB;;IAEA;IACA,iBAAKrP,MAAL,CAAY4G,QAAZ,CAAqBlS,OAArB,CAA6B,gBAAQ;IACjC,oBAAMsY,OAAOtV,cAAc,KAAd,EAAqB;IAC9B8B,2CAAqBmL,KAAKnL,EAA1B,SAAgC3E,IADF;IAE9B6E,4BAAQ,EAFsB;IAG9B,2DAAqCiL,KAAKnL,EAA1C,SAAgD3E,IAAhD,SAH8B;IAI9BqT,0BAAM,UAJwB;IAK9BiH,8BAAU,CAAC;IALmB,iBAArB,CAAb;;IAQA,oBAAMG,OAAO5X,cACT,QADS,EAET;IACI7C,0BAAM,QADV;IAEI0E,2BAAU,OAAKyG,MAAL,CAAYuH,UAAZ,CAAuB2B,OAAjC,SAA4C,OAAKlJ,MAAL,CAAYuH,UAAZ,CAAuB2B,OAAnE,WAFJ;IAGI,qCAAiB,IAHrB;IAII,wDAAkCvE,KAAKnL,EAAvC,UAJJ;IAKI,qCAAiB;IALrB,iBAFS,EASTgJ,KAAKzO,GAAL,CAASc,IAAT,EAAe,OAAKmL,MAApB,CATS,CAAb;;IAYAgN,qBAAK/V,WAAL,CAAiBqY,IAAjB;;IAEA,oBAAMzb,UAAU6D,cAAc,IAAd,CAAhB;;IAEAsV,qBAAK/V,WAAL,CAAiBpD,OAAjB;IACAub,sBAAMnY,WAAN,CAAkB+V,IAAlB;;IAEA,uBAAK9W,QAAL,CAAc0Q,QAAd,CAAuB2F,KAAvB,CAA6B1X,IAA7B,IAAqCmY,IAArC;IACH,aA7BD;;IA+BAiB,iBAAKhX,WAAL,CAAiBmY,KAAjB;IACAzG,iBAAK1R,WAAL,CAAiBgX,IAAjB;IACA9X,sBAAUc,WAAV,CAAsB0R,IAAtB;;IAEA,iBAAKzS,QAAL,CAAc0Q,QAAd,CAAuBqH,IAAvB,GAA8BA,IAA9B;IACA,iBAAK/X,QAAL,CAAc0Q,QAAd,CAAuB+B,IAAvB,GAA8BA,IAA9B;IACH;;IAED;IACA,YAAI,KAAK3I,MAAL,CAAY6F,QAAZ,CAAqBrL,QAArB,CAA8B,KAA9B,KAAwC0C,QAAQU,GAApD,EAAyD;IACrDzH,sBAAUc,WAAV,CAAsB4O,SAAS+C,YAAT,CAAsB7T,IAAtB,CAA2B,IAA3B,EAAiC,KAAjC,CAAtB;IACH;;IAED;IACA,YAAI,KAAKiL,MAAL,CAAY6F,QAAZ,CAAqBrL,QAArB,CAA8B,SAA9B,KAA4C0C,QAAQY,OAAxD,EAAiE;IAC7D3H,sBAAUc,WAAV,CAAsB4O,SAAS+C,YAAT,CAAsB7T,IAAtB,CAA2B,IAA3B,EAAiC,SAAjC,CAAtB;IACH;;IAED;IACA,YAAI,KAAKiL,MAAL,CAAY6F,QAAZ,CAAqBrL,QAArB,CAA8B,YAA9B,CAAJ,EAAiD;IAC7CrE,sBAAUc,WAAV,CAAsB4O,SAAS+C,YAAT,CAAsB7T,IAAtB,CAA2B,IAA3B,EAAiC,YAAjC,CAAtB;IACH;;IAED;IACA,YAAI,KAAKiL,MAAL,CAAY6F,QAAZ,CAAqBrL,QAArB,CAA8B,YAA9B,CAAJ,EAAiD;IAC7C,iBAAKtE,QAAL,CAAcC,SAAd,CAAwBc,WAAxB,CAAoC4O,SAAS+C,YAAT,CAAsB7T,IAAtB,CAA2B,IAA3B,EAAiC,YAAjC,CAApC;IACH;;IAED,aAAKmB,QAAL,CAAc2P,QAAd,GAAyB1P,SAAzB;;IAEA,YAAI,KAAKgI,OAAT,EAAkB;IACd0H,qBAASyG,cAAT,CAAwBvX,IAAxB,CAA6B,IAA7B,EAAmC8J,MAAMK,iBAAN,CAAwBnK,IAAxB,CAA6B,IAA7B,CAAnC;IACH;;IAED8Q,iBAAS6H,YAAT,CAAsB3Y,IAAtB,CAA2B,IAA3B;;IAEA,eAAOoB,SAAP;IACH,KA9zCY;;;IAg0Cb;IACAoZ,UAj0Ca,oBAi0CJ;IAAA;;IACL;IACA,YAAI,KAAKvP,MAAL,CAAYqE,UAAhB,EAA4B;IACxB,gBAAM2D,OAAOnC,SAASC,UAAT,CAAoB/Q,IAApB,CAAyB,IAAzB,CAAb;;IAEA;IACA,gBAAIiT,KAAK/B,IAAT,EAAe;IACX5B,2BAAW2D,KAAKvU,GAAhB,EAAqB,aAArB;IACH;IACJ;;IAED;IACA,aAAK+F,EAAL,GAAUuH,KAAKC,KAAL,CAAWD,KAAKE,MAAL,KAAgB,KAA3B,CAAV;;IAEA;IACA,YAAI9K,YAAY,IAAhB;IACA,aAAKD,QAAL,CAAc2P,QAAd,GAAyB,IAAzB;;IAEA;IACA,YAAM2J,QAAQ;IACVhW,gBAAI,KAAKA,EADC;IAEViW,sBAAU,KAAKzP,MAAL,CAAYyC,QAFZ;IAGVC,mBAAO,KAAK1C,MAAL,CAAY0C;IAHT,SAAd;IAKA,YAAIgC,SAAS,IAAb;;IAEA,YAAInQ,GAAG/B,MAAH,CAAU,KAAKwN,MAAL,CAAY6F,QAAtB,KAAmCtR,GAAGnB,OAAH,CAAW,KAAK4M,MAAL,CAAY6F,QAAvB,CAAvC,EAAyE;IACrE;IACA1P,wBAAY,KAAK6J,MAAL,CAAY6F,QAAxB;IACH,SAHD,MAGO,IAAItR,GAAGvB,QAAH,CAAY,KAAKgN,MAAL,CAAY6F,QAAxB,CAAJ,EAAuC;IAC1C;IACA;IACA1P,wBAAY,KAAK6J,MAAL,CAAY6F,QAAZ,CAAqB9Q,IAArB,CAA0B,IAA1B,EAAgCya,KAAhC,CAAZ;IACH,SAJM,MAIA;IACH;IACArZ,wBAAY0P,SAASqJ,MAAT,CAAgBna,IAAhB,CAAqB,IAArB,EAA2B;IACnCyE,oBAAI,KAAKA,EAD0B;IAEnCiW,0BAAU,KAAKzP,MAAL,CAAYyC,QAFa;IAGnCkL,uBAAO,KAAKA,KAHuB;IAInC7N,yBAAS,KAAKA,OAJqB;IAKnC+G,0BAAUA,SAASiG,QAAT,CAAkB/X,IAAlB,CAAuB,IAAvB;IACV;IACA;IAPmC,aAA3B,CAAZ;IASA2P,qBAAS,KAAT;IACH;;IAED;IACA,YAAMxL,UAAU,SAAVA,OAAU,QAAS;IACrB,gBAAI8L,SAAS/U,KAAb;;IAEAM,mBAAO8G,OAAP,CAAemY,KAAf,EAAsB9a,OAAtB,CAA8B,iBAAkB;IAAA;IAAA,oBAAhB8C,GAAgB;IAAA,oBAAXD,KAAW;;IAC5CyN,yBAASvD,WAAWuD,MAAX,QAAuBxN,GAAvB,QAA+BD,KAA/B,CAAT;IACH,aAFD;;IAIA,mBAAOyN,MAAP;IACH,SARD;;IAUA;IACA,YAAIN,MAAJ,EAAY;IACR,gBAAInQ,GAAG/B,MAAH,CAAU,KAAKwN,MAAL,CAAY6F,QAAtB,CAAJ,EAAqC;IACjC1P,4BAAY+C,QAAQ/C,SAAR,CAAZ;IACH,aAFD,MAEO,IAAI5B,GAAGnB,OAAH,CAAW+C,SAAX,CAAJ,EAA2B;IAC9BA,0BAAUkM,SAAV,GAAsBnJ,QAAQ/C,UAAUkM,SAAlB,CAAtB;IACH;IACJ;;IAED;IACA,YAAItK,eAAJ;;IAEA;IACA,YAAIxD,GAAG/B,MAAH,CAAU,KAAKwN,MAAL,CAAYqG,SAAZ,CAAsBR,QAAtB,CAA+B1P,SAAzC,CAAJ,EAAyD;IACrD4B,qBAASH,SAASkD,aAAT,CAAuB,KAAKkF,MAAL,CAAYqG,SAAZ,CAAsBR,QAAtB,CAA+B1P,SAAtD,CAAT;IACH;;IAED;IACA,YAAI,CAAC5B,GAAGnB,OAAH,CAAW2E,MAAX,CAAL,EAAyB;IACrBA,qBAAS,KAAK7B,QAAL,CAAcC,SAAvB;IACH;;IAED;IACA,YAAMuZ,eAAenb,GAAGnB,OAAH,CAAW+C,SAAX,IAAwB,uBAAxB,GAAkD,oBAAvE;IACA4B,eAAO2X,YAAP,EAAqB,YAArB,EAAmCvZ,SAAnC;;IAEA;IACA,YAAI,CAAC5B,GAAGnB,OAAH,CAAW,KAAK8C,QAAL,CAAc2P,QAAzB,CAAL,EAAyC;IACrCA,qBAASO,YAAT,CAAsBrR,IAAtB,CAA2B,IAA3B;IACH;;IAED;IACA,YAAIlD,OAAO+K,SAAP,CAAiBC,SAAjB,CAA2BrC,QAA3B,CAAoC,MAApC,CAAJ,EAAiD;IAC7C4B,oBAAQrE,MAAR;IACH;;IAED;IACA,YAAI,KAAKiI,MAAL,CAAYoL,QAAZ,CAAqBvF,QAAzB,EAAmC;IAAA,0BACG,KAAK7F,MADR;IAAA,gBACvBuH,UADuB,WACvBA,UADuB;IAAA,gBACXlB,SADW,WACXA,SADW;;IAE/B,gBAAMvN,WAAcuN,UAAUR,QAAV,CAAmBvP,OAAjC,SAA4C+P,UAAUsJ,MAAtD,UAAiEpI,WAAW7N,MAAlF;IACA,gBAAMiW,SAAS/U,YAAY7F,IAAZ,CAAiB,IAAjB,EAAuB+D,QAAvB,CAAf;;IAEA7H,kBAAMuF,IAAN,CAAWmZ,MAAX,EAAmBjb,OAAnB,CAA2B,iBAAS;IAChCoF,4BAAYiP,KAAZ,EAAmB,OAAK/I,MAAL,CAAYuH,UAAZ,CAAuB7N,MAA1C,EAAkD,KAAlD;IACAI,4BAAYiP,KAAZ,EAAmB,OAAK/I,MAAL,CAAYuH,UAAZ,CAAuBC,OAA1C,EAAmD,IAAnD;IACH,aAHD;IAIH;IACJ;IA16CY,CAAjB;;IChCA;AACA;IAKA;;;;;AAKA,IAAO,SAASoI,QAAT,CAAkB3f,KAAlB,EAAsC;IAAA,QAAb4f,IAAa,uEAAN,IAAM;;IACzC,QAAIpc,MAAMxD,KAAV;;IAEA,QAAI4f,IAAJ,EAAU;IACN,YAAMC,SAASlY,SAASF,aAAT,CAAuB,GAAvB,CAAf;IACAoY,eAAOC,IAAP,GAActc,GAAd;IACAA,cAAMqc,OAAOC,IAAb;IACH;;IAED,QAAI;IACA,eAAO,IAAIxd,GAAJ,CAAQkB,GAAR,CAAP;IACH,KAFD,CAEE,OAAOd,CAAP,EAAU;IACR,eAAO,IAAP;IACH;IACJ;;IAED;AACA,IAAO,SAASqd,cAAT,CAAwB/f,KAAxB,EAA+B;IAClC,QAAMggB,SAAS,IAAIC,eAAJ,EAAf;;IAEA,QAAI3b,GAAG1B,MAAH,CAAU5C,KAAV,CAAJ,EAAsB;IAClBM,eAAO8G,OAAP,CAAepH,KAAf,EAAsByE,OAAtB,CAA8B,gBAAkB;IAAA;IAAA,gBAAhB8C,GAAgB;IAAA,gBAAXD,KAAW;;IAC5C0Y,mBAAO3Q,GAAP,CAAW9H,GAAX,EAAgBD,KAAhB;IACH,SAFD;IAGH;;IAED,WAAO0Y,MAAP;IACH;;ICtCD;AACA;IAuBA,IAAMpJ,WAAW;IACb;IACAsJ,SAFa,mBAEL;IACJ;IACA,YAAI,CAAC,KAAKvc,SAAL,CAAe8J,EAApB,EAAwB;IACpB;IACH;;IAED;IACA,YAAI,CAAC,KAAK0S,OAAN,IAAiB,KAAKC,SAAtB,IAAoC,KAAKlS,OAAL,IAAgB,CAACjB,QAAQqB,UAAjE,EAA8E;IAC1E;IACA,gBACIhK,GAAGtB,KAAH,CAAS,KAAK+M,MAAL,CAAY6F,QAArB,KACA,KAAK7F,MAAL,CAAY6F,QAAZ,CAAqBrL,QAArB,CAA8B,UAA9B,CADA,IAEA,KAAKwF,MAAL,CAAY4G,QAAZ,CAAqBpM,QAArB,CAA8B,UAA9B,CAHJ,EAIE;IACEqL,yBAASsH,eAAT,CAAyBpY,IAAzB,CAA8B,IAA9B;IACH;;IAED;IACH;;IAED;IACA,YAAI,CAACR,GAAGnB,OAAH,CAAW,KAAK8C,QAAL,CAAc2Q,QAAzB,CAAL,EAAyC;IACrC,iBAAK3Q,QAAL,CAAc2Q,QAAd,GAAyBnP,cAAc,KAAd,EAAqBgB,0BAA0B,KAAKsH,MAAL,CAAYqG,SAAZ,CAAsBQ,QAAhD,CAArB,CAAzB;;IAEA/O,wBAAY,KAAK5B,QAAL,CAAc2Q,QAA1B,EAAoC,KAAK3Q,QAAL,CAAcI,OAAlD;IACH;;IAED;IACA;IACA,YAAIgG,QAAQC,IAAR,IAAgB1K,OAAOU,GAA3B,EAAgC;IAC5B,gBAAM2D,WAAW,KAAKkI,KAAL,CAAW7D,gBAAX,CAA4B,OAA5B,CAAjB;;IAEAtJ,kBAAMuF,IAAN,CAAWN,QAAX,EAAqBxB,OAArB,CAA6B,iBAAS;IAClC,oBAAMiL,MAAMnM,MAAMyL,YAAN,CAAmB,KAAnB,CAAZ;IACA,oBAAMxL,MAAMmc,SAASjQ,GAAT,CAAZ;;IAEA,oBACIlM,QAAQ,IAAR,IACAA,IAAIf,QAAJ,KAAiBb,OAAOmU,QAAP,CAAgB+J,IAAhB,CAAqBrd,QADtC,IAEA,CAAC,OAAD,EAAU,QAAV,EAAoB8H,QAApB,CAA6B/G,IAAI6c,QAAjC,CAHJ,EAIE;IACE5M,0BAAM/D,GAAN,EAAW,MAAX,EACKvJ,IADL,CACU,gBAAQ;IACV5C,8BAAMiE,YAAN,CAAmB,KAAnB,EAA0B5F,OAAOU,GAAP,CAAWge,eAAX,CAA2BC,IAA3B,CAA1B;IACH,qBAHL,EAIKvL,KAJL,CAIW,YAAM;IACThN,sCAAczE,KAAd;IACH,qBANL;IAOH;IACJ,aAjBD;IAkBH;;IAED;IACA;IACA;IACA;IACA;IACA;;IAEA,YAAMid,YAAY9N,OACd1R,MAAMuF,IAAN,CAAWoG,UAAU6T,SAAV,IAAuB7T,UAAU2Q,QAAjC,IAA6C3Q,UAAU8T,YAAlE,EAAgFvR,GAAhF,CAAoF;IAAA,mBAAYoO,SAAS9Y,KAAT,CAAe,GAAf,EAAoB,CAApB,CAAZ;IAAA,SAApF,CADc,CAAlB;;IAIA,YAAI8Y,WAAW,CAAC,KAAKpK,OAAL,CAAapP,GAAb,CAAiB,UAAjB,KAAgC,KAAKiM,MAAL,CAAY6G,QAAZ,CAAqB0G,QAArD,IAAiE,MAAlE,EAA0EzL,WAA1E,EAAf;;IAEA;IACA,YAAIyL,aAAa,MAAjB,EAAyB;IAAA,2CACRkD,SADQ;;IACpBlD,oBADoB;IAExB;;IAED,YAAIoD,SAAS,KAAKxN,OAAL,CAAapP,GAAb,CAAiB,UAAjB,CAAb;IACA,YAAI,CAACQ,GAAGxB,OAAH,CAAW4d,MAAX,CAAL,EAAyB;IAClBA,kBADkB,GACP,KAAK3Q,MAAL,CAAY6G,QADL,CAClB8J,MADkB;IAExB;;IAEDpgB,eAAOkF,MAAP,CAAc,KAAKoR,QAAnB,EAA6B;IACzByG,qBAAS,KADgB;IAEzBqD,0BAFyB;IAGzBpD,8BAHyB;IAIzBkD;IAJyB,SAA7B;;IAOA;IACA,YAAI,KAAKtS,OAAT,EAAkB;IACd,gBAAMyS,cAAc,KAAK5Q,MAAL,CAAY6G,QAAZ,CAAqBnC,MAArB,GAA8B,sBAA9B,GAAuD,aAA3E;IACA5P,eAAGC,IAAH,CAAQ,IAAR,EAAc,KAAKqJ,KAAL,CAAWG,UAAzB,EAAqCqS,WAArC,EAAkD/J,SAASnC,MAAT,CAAgB+I,IAAhB,CAAqB,IAArB,CAAlD;IACH;;IAED;IACAzX,mBAAW6Q,SAASnC,MAAT,CAAgB+I,IAAhB,CAAqB,IAArB,CAAX,EAAuC,CAAvC;IACH,KA5FY;;;IA8Fb;IACA/I,UA/Fa,oBA+FJ;IAAA;;IACL,YAAM0I,SAASvG,SAASwG,SAAT,CAAmBtY,IAAnB,CAAwB,IAAxB,EAA8B,IAA9B,CAAf;IACA;IAFK,wBAGgD,KAAK8R,QAHrD;IAAA,YAGG8J,MAHH,aAGGA,MAHH;IAAA,YAGWpD,QAHX,aAGWA,QAHX;IAAA,YAGqBsD,IAHrB,aAGqBA,IAHrB;IAAA,YAG2BC,gBAH3B,aAG2BA,gBAH3B;;IAIL,YAAMC,iBAAiB3gB,QAAQgd,OAAOnR,IAAP,CAAY;IAAA,mBAASzI,MAAM+Z,QAAN,KAAmBA,QAA5B;IAAA,SAAZ,CAAR,CAAvB;;IAEA;IACA,YAAI,KAAKpP,OAAL,IAAgB,KAAKiS,OAAzB,EAAkC;IAC9BhD,mBAAO9V,MAAP,CAAc;IAAA,uBAAS,CAACuZ,KAAK9c,GAAL,CAASP,KAAT,CAAV;IAAA,aAAd,EAAyCkB,OAAzC,CAAiD,iBAAS;IACtD,sBAAKwL,KAAL,CAAWC,GAAX,CAAe,aAAf,EAA8B3M,KAA9B;IACA;IACAqd,qBAAKvR,GAAL,CAAS9L,KAAT,EAAgB;IACZ0Z,6BAAS1Z,MAAMwd,IAAN,KAAe;IADZ,iBAAhB;;IAIA;IACAxd,sBAAMwd,IAAN,GAAa,QAAb;;IAEA;IACAlc,mBAAGC,IAAH,CAAQ,KAAR,EAAcvB,KAAd,EAAqB,WAArB,EAAkC;IAAA,2BAAMqT,SAASoK,UAAT,CAAoBlc,IAApB,CAAyB,KAAzB,CAAN;IAAA,iBAAlC;IACH,aAZD;IAaH;;IAED;IACA,YAAKgc,kBAAkB,KAAKxD,QAAL,KAAkBA,QAArC,IAAkD,CAACH,OAAO5S,QAAP,CAAgBsW,gBAAhB,CAAvD,EAA0F;IACtFjK,qBAASqK,WAAT,CAAqBnc,IAArB,CAA0B,IAA1B,EAAgCwY,QAAhC;IACA1G,qBAASzS,MAAT,CAAgBW,IAAhB,CAAqB,IAArB,EAA2B4b,UAAUI,cAArC;IACH;;IAED;IACAjX,oBAAY,KAAK5D,QAAL,CAAcC,SAA1B,EAAqC,KAAK6J,MAAL,CAAYuH,UAAZ,CAAuBV,QAAvB,CAAgC3D,OAArE,EAA8E,CAAC3O,GAAGb,KAAH,CAAS0Z,MAAT,CAA/E;;IAEA;IACA,YAAI,CAAC,KAAKpN,MAAL,CAAY6F,QAAZ,IAAwB,EAAzB,EAA6BrL,QAA7B,CAAsC,UAAtC,KAAqD,KAAKwF,MAAL,CAAY4G,QAAZ,CAAqBpM,QAArB,CAA8B,UAA9B,CAAzD,EAAoG;IAChGqL,qBAASsH,eAAT,CAAyBpY,IAAzB,CAA8B,IAA9B;IACH;IACJ,KAnIY;;;IAqIb;IACA;IACAX,UAvIa,kBAuINnE,KAvIM,EAuIiB;IAAA,YAAhBoE,OAAgB,uEAAN,IAAM;;IAC1B;IACA,YAAI,CAAC,KAAKT,SAAL,CAAe8J,EAApB,EAAwB;IACpB;IACH;;IAJyB,YAMlB4P,OANkB,GAMN,KAAKzG,QANC,CAMlByG,OANkB;;IAO1B,YAAM6D,cAAc,KAAKnR,MAAL,CAAYuH,UAAZ,CAAuBV,QAAvB,CAAgC8J,MAApD;;IAEA;IACA;IACA,YAAMA,SAASpc,GAAG3B,eAAH,CAAmB3C,KAAnB,IAA4B,CAACqd,OAA7B,GAAuCrd,KAAtD;;IAEA;IACA,YAAI0gB,WAAWrD,OAAf,EAAwB;IACpB;IACA,gBAAI,CAACjZ,OAAL,EAAc;IACV,qBAAKwS,QAAL,CAAc8J,MAAd,GAAuBA,MAAvB;IACA,qBAAKxN,OAAL,CAAa7D,GAAb,CAAiB,EAAEuH,UAAU8J,MAAZ,EAAjB;IACH;;IAED;IACA,gBAAI,CAAC,KAAKpD,QAAN,IAAkBoD,MAAlB,IAA4B,CAACtc,OAAjC,EAA0C;IACtC,oBAAM+Y,SAASvG,SAASwG,SAAT,CAAmBtY,IAAnB,CAAwB,IAAxB,CAAf;IACA,oBAAMvB,QAAQqT,SAASuK,SAAT,CAAmBrc,IAAnB,CAAwB,IAAxB,GAA+B,KAAK8R,QAAL,CAAc0G,QAA7C,2BAA0D,KAAK1G,QAAL,CAAc4J,SAAxE,IAAoF,IAApF,CAAd;;IAEA;IACA,qBAAK5J,QAAL,CAAc0G,QAAd,GAAyB/Z,MAAM+Z,QAA/B;;IAEA;IACA1G,yBAASvH,GAAT,CAAavK,IAAb,CAAkB,IAAlB,EAAwBqY,OAAOxK,OAAP,CAAepP,KAAf,CAAxB;IACA;IACH;;IAED;IACA,gBAAI,KAAK0C,QAAL,CAAcoQ,OAAd,CAAsBO,QAA1B,EAAoC;IAChC,qBAAK3Q,QAAL,CAAcoQ,OAAd,CAAsBO,QAAtB,CAA+BwC,OAA/B,GAAyCsH,MAAzC;IACH;;IAED;IACA7W,wBAAY,KAAK5D,QAAL,CAAcC,SAA1B,EAAqCgb,WAArC,EAAkDR,MAAlD;;IAEA,iBAAK9J,QAAL,CAAcyG,OAAd,GAAwBqD,MAAxB;;IAEA;IACA9K,qBAASkH,aAAT,CAAuBhY,IAAvB,CAA4B,IAA5B,EAAkC,UAAlC;;IAEA;IACAM,yBAAaN,IAAb,CAAkB,IAAlB,EAAwB,KAAKqJ,KAA7B,EAAoCuS,SAAS,iBAAT,GAA6B,kBAAjE;IACH;IACJ,KAzLY;;;IA2Lb;IACA;IACArR,OA7La,kBA6LT5I,KA7LS,EA6Lc;IAAA,YAAhBrC,OAAgB,uEAAN,IAAM;;IACvB,YAAM+Y,SAASvG,SAASwG,SAAT,CAAmBtY,IAAnB,CAAwB,IAAxB,CAAf;;IAEA;IACA,YAAI2B,UAAU,CAAC,CAAf,EAAkB;IACdmQ,qBAASzS,MAAT,CAAgBW,IAAhB,CAAqB,IAArB,EAA2B,KAA3B,EAAkCV,OAAlC;IACA;IACH;;IAED,YAAI,CAACE,GAAGzB,MAAH,CAAU4D,KAAV,CAAL,EAAuB;IACnB,iBAAKwJ,KAAL,CAAWwH,IAAX,CAAgB,0BAAhB,EAA4ChR,KAA5C;IACA;IACH;;IAED,YAAI,EAAEA,SAAS0W,MAAX,CAAJ,EAAwB;IACpB,iBAAKlN,KAAL,CAAWwH,IAAX,CAAgB,iBAAhB,EAAmChR,KAAnC;IACA;IACH;;IAED,YAAI,KAAKmQ,QAAL,CAAcoG,YAAd,KAA+BvW,KAAnC,EAA0C;IACtC,iBAAKmQ,QAAL,CAAcoG,YAAd,GAA6BvW,KAA7B;IACA,gBAAMlD,QAAQ4Z,OAAO1W,KAAP,CAAd;;IAFsC,uBAGjBlD,SAAS,EAHQ;IAAA,gBAG9B+Z,QAH8B,QAG9BA,QAH8B;;IAKtC;;;IACA,iBAAK1G,QAAL,CAAciK,gBAAd,GAAiCtd,KAAjC;;IAEA;IACAqS,qBAASkH,aAAT,CAAuBhY,IAAvB,CAA4B,IAA5B,EAAkC,UAAlC;;IAEA;IACA,gBAAI,CAACV,OAAL,EAAc;IACV,qBAAKwS,QAAL,CAAc0G,QAAd,GAAyBA,QAAzB;IACA,qBAAKpK,OAAL,CAAa7D,GAAb,CAAiB,EAAEiO,kBAAF,EAAjB;IACH;;IAED;IACA,gBAAI,KAAKK,OAAT,EAAkB;IACd,qBAAKyD,KAAL,CAAWC,eAAX,CAA2B/D,QAA3B;IACH;;IAED;IACAlY,yBAAaN,IAAb,CAAkB,IAAlB,EAAwB,KAAKqJ,KAA7B,EAAoC,gBAApC;IACH;;IAED;IACAyI,iBAASzS,MAAT,CAAgBW,IAAhB,CAAqB,IAArB,EAA2B,IAA3B,EAAiCV,OAAjC;;IAEA,YAAI,KAAK8J,OAAL,IAAgB,KAAKiS,OAAzB,EAAkC;IAC9B;IACAvJ,qBAASoK,UAAT,CAAoBlc,IAApB,CAAyB,IAAzB;IACH;IACJ,KAjPY;;;IAmPb;IACA;IACAmc,eArPa,uBAqPDjhB,KArPC,EAqPsB;IAAA,YAAhBoE,OAAgB,uEAAN,IAAM;;IAC/B,YAAI,CAACE,GAAG/B,MAAH,CAAUvC,KAAV,CAAL,EAAuB;IACnB,iBAAKiQ,KAAL,CAAWwH,IAAX,CAAgB,2BAAhB,EAA6CzX,KAA7C;IACA;IACH;IACD;IACA,YAAMsd,WAAWtd,MAAM6R,WAAN,EAAjB;IACA,aAAK+E,QAAL,CAAc0G,QAAd,GAAyBA,QAAzB;;IAEA;IACA,YAAMH,SAASvG,SAASwG,SAAT,CAAmBtY,IAAnB,CAAwB,IAAxB,CAAf;IACA,YAAMvB,QAAQqT,SAASuK,SAAT,CAAmBrc,IAAnB,CAAwB,IAAxB,EAA8B,CAACwY,QAAD,CAA9B,CAAd;IACA1G,iBAASvH,GAAT,CAAavK,IAAb,CAAkB,IAAlB,EAAwBqY,OAAOxK,OAAP,CAAepP,KAAf,CAAxB,EAA+Ca,OAA/C;IACH,KAlQY;;;IAoQb;IACA;IACA;IACAgZ,aAvQa,uBAuQa;IAAA;;IAAA,YAAhB3I,MAAgB,uEAAP,KAAO;;IACtB;IACA,YAAM0I,SAASnc,MAAMuF,IAAN,CAAW,CAAC,KAAK4H,KAAL,IAAc,EAAf,EAAmBG,UAAnB,IAAiC,EAA5C,CAAf;IACA;IACA;IACA,eAAO6O,OACF9V,MADE,CACK;IAAA,mBAAS,CAAC,OAAK6G,OAAN,IAAiBuG,MAAjB,IAA2B,OAAKmC,QAAL,CAAcgK,IAAd,CAAmBU,GAAnB,CAAuB/d,KAAvB,CAApC;IAAA,SADL,EAEF8D,MAFE,CAEK;IAAA,mBAAS,CAAC,UAAD,EAAa,WAAb,EAA0BkD,QAA1B,CAAmChH,MAAMtB,IAAzC,CAAT;IAAA,SAFL,CAAP;IAGH,KA/QY;;;IAiRb;IACAkf,aAlRa,qBAkRHX,SAlRG,EAkRuB;IAAA;;IAAA,YAAf1W,KAAe,uEAAP,KAAO;;IAChC,YAAMqT,SAASvG,SAASwG,SAAT,CAAmBtY,IAAnB,CAAwB,IAAxB,CAAf;IACA,YAAMyc,gBAAgB,SAAhBA,aAAgB;IAAA,mBAAS/gB,OAAO,CAAC,OAAKoW,QAAL,CAAcgK,IAAd,CAAmB9c,GAAnB,CAAuBP,KAAvB,KAAiC,EAAlC,EAAsC0Z,OAA7C,CAAT;IAAA,SAAtB;IACA,YAAMuE,SAASxgB,MAAMuF,IAAN,CAAW4W,MAAX,EAAmBV,IAAnB,CAAwB,UAACC,CAAD,EAAIC,CAAJ;IAAA,mBAAU4E,cAAc5E,CAAd,IAAmB4E,cAAc7E,CAAd,CAA7B;IAAA,SAAxB,CAAf;IACA,YAAInZ,cAAJ;IACAid,kBAAUiB,KAAV,CAAgB,oBAAY;IACxBle,oBAAQie,OAAOxV,IAAP,CAAY;IAAA,uBAASzI,MAAM+Z,QAAN,KAAmBA,QAA5B;IAAA,aAAZ,CAAR;IACA,mBAAO,CAAC/Z,KAAR,CAFwB;IAG3B,SAHD;IAIA;IACA,eAAOA,UAAUuG,QAAQ0X,OAAO,CAAP,CAAR,GAAoBtV,SAA9B,CAAP;IACH,KA7RY;;;IA+Rb;IACAwV,mBAhSa,6BAgSK;IACd,eAAO9K,SAASwG,SAAT,CAAmBtY,IAAnB,CAAwB,IAAxB,EAA8B,KAAKkY,YAAnC,CAAP;IACH,KAlSY;;;IAoSb;IACAH,YArSa,oBAqSJtZ,KArSI,EAqSG;IACZ,YAAIyZ,eAAezZ,KAAnB;;IAEA,YAAI,CAACe,GAAGf,KAAH,CAASyZ,YAAT,CAAD,IAA2B/P,QAAQqB,UAAnC,IAAiD,KAAKsI,QAAL,CAAcyG,OAAnE,EAA4E;IACxEL,2BAAepG,SAAS8K,eAAT,CAAyB5c,IAAzB,CAA8B,IAA9B,CAAf;IACH;;IAED,YAAIR,GAAGf,KAAH,CAASyZ,YAAT,CAAJ,EAA4B;IACxB,gBAAI,CAAC1Y,GAAGb,KAAH,CAASuZ,aAAalE,KAAtB,CAAL,EAAmC;IAC/B,uBAAOkE,aAAalE,KAApB;IACH;;IAED,gBAAI,CAACxU,GAAGb,KAAH,CAASuZ,aAAaM,QAAtB,CAAL,EAAsC;IAClC,uBAAO/Z,MAAM+Z,QAAN,CAAe3L,WAAf,EAAP;IACH;;IAED,mBAAOY,KAAKzO,GAAL,CAAS,SAAT,EAAoB,KAAKiM,MAAzB,CAAP;IACH;;IAED,eAAOwC,KAAKzO,GAAL,CAAS,UAAT,EAAqB,KAAKiM,MAA1B,CAAP;IACH,KAzTY;;;IA2Tb;IACA;IACAiR,cA7Ta,sBA6TFhhB,KA7TE,EA6TK;IACd;IACA,YAAI,CAAC,KAAK2D,SAAL,CAAe8J,EAApB,EAAwB;IACpB;IACH;;IAED,YAAI,CAACnJ,GAAGnB,OAAH,CAAW,KAAK8C,QAAL,CAAc2Q,QAAzB,CAAL,EAAyC;IACrC,iBAAK3G,KAAL,CAAWwH,IAAX,CAAgB,kCAAhB;IACA;IACH;;IAED;IACA,YAAI,CAACnT,GAAG3B,eAAH,CAAmB3C,KAAnB,CAAD,IAA8B,CAACgB,MAAMD,OAAN,CAAcf,KAAd,CAAnC,EAAyD;IACrD,iBAAKiQ,KAAL,CAAWwH,IAAX,CAAgB,2BAAhB,EAA6CzX,KAA7C;IACA;IACH;;IAED,YAAI2hB,OAAO3hB,KAAX;;IAEA;IACA,YAAI,CAAC2hB,IAAL,EAAW;IACP,gBAAMpe,QAAQqT,SAAS8K,eAAT,CAAyB5c,IAAzB,CAA8B,IAA9B,CAAd;IACA6c,mBAAO3gB,MAAMuF,IAAN,CAAW,CAAChD,SAAS,EAAV,EAAcqe,UAAd,IAA4B,EAAvC,EACF1S,GADE,CACE;IAAA,uBAAO5L,IAAIue,YAAJ,EAAP;IAAA,aADF,EAEF3S,GAFE,CAEEoD,OAFF,CAAP;IAGH;;IAED;IACA,YAAMwC,UAAU6M,KAAKzS,GAAL,CAAS;IAAA,mBAAW4S,QAAQ/Y,IAAR,EAAX;IAAA,SAAT,EAAoCwP,IAApC,CAAyC,IAAzC,CAAhB;IACA,YAAMwJ,UAAUjN,YAAY,KAAK7O,QAAL,CAAc2Q,QAAd,CAAuBxE,SAAnD;;IAEA,YAAI2P,OAAJ,EAAa;IACT;IACA7Z,yBAAa,KAAKjC,QAAL,CAAc2Q,QAA3B;IACA,gBAAMoL,UAAUva,cAAc,MAAd,EAAsBgB,0BAA0B,KAAKsH,MAAL,CAAYqG,SAAZ,CAAsB4L,OAAhD,CAAtB,CAAhB;IACAA,oBAAQ5P,SAAR,GAAoB0C,OAApB;IACA,iBAAK7O,QAAL,CAAc2Q,QAAd,CAAuB5P,WAAvB,CAAmCgb,OAAnC;;IAEA;IACA5c,yBAAaN,IAAb,CAAkB,IAAlB,EAAwB,KAAKqJ,KAA7B,EAAoC,WAApC;IACH;IACJ;IAtWY,CAAjB;;ICxBA;IACA;IACA;;IAEA,IAAM8T,aAAW;IACb;IACAhP,aAAS,IAFI;;IAIb;IACAR,WAAO,EALM;;IAOb;IACAxC,WAAO,KARM;;IAUb;IACAiS,cAAU,KAXG;;IAab;IACAC,eAAW,IAdE;;IAgBb;IACA;IACA7U,iBAAa,IAlBA;;IAoBb;IACAkF,cAAU,EArBG;;IAuBb;IACAyE,YAAQ,CAxBK;IAyBbyD,WAAO,KAzBM;;IA2Bb;IACAtD,cAAU,IA5BG;;IA8Bb;IACA;IACA6E,qBAAiB,IAhCJ;;IAkCb;IACAJ,gBAAY,IAnCC;;IAqCb;IACAuG,kBAAc,IAtCD;;IAwCb;IACAC,WAAO,MAzCM;;IA2Cb;IACAC,iBAAa,IA5CA;;IA8Cb;IACAC,kBAAc,IA/CD;;IAiDb;IACAC,gBAAY,KAlDC;;IAoDb;IACAC,wBAAoB,IArDP;;IAuDb;IACArO,gBAAY,IAxDC;IAyDb0D,gBAAY,MAzDC;IA0DbhC,aAAS,qCA1DI;;IA4Db;IACA9F,gBAAY,sCA7DC;;IA+Db;IACAH,aAAS;IACLoN,iBAAS,GADJ;IAELrZ,iBAAS,CACL,IADK,EAEL,IAFK,EAGL,IAHK,EAIL,IAJK,EAKL,IALK,EAML,GANK,EAOL,GAPK,EAQL,GARK,EASL,GATK,EAUL,GAVK,EAWL,SAXK;IAFJ,KAhEI;;IAiFb;IACA8e,UAAM;IACFhC,gBAAQ;IACR;IACA;IAHE,KAlFO;;IAwFb;IACAhD,WAAO;IACHiF,kBAAU,CADP;IAEH/e,iBAAS,CAAC,GAAD,EAAM,IAAN,EAAY,CAAZ,EAAe,IAAf,EAAqB,GAArB,EAA0B,IAA1B,EAAgC,CAAhC;IAFN,KAzFM;;IA8Fb;IACAgf,cAAU;IACN7X,iBAAS,IADH;IAEN8X,gBAAQ;IAFF,KA/FG;;IAoGb;IACA1H,cAAU;IACNvF,kBAAU,KADJ;IAENoB,cAAM;IAFA,KArGG;;IA0Gb;IACAJ,cAAU;IACN8J,gBAAQ,KADF;IAENpD,kBAAU,MAFJ;IAGN;IACA;IACA7I,gBAAQ;IALF,KA3GG;;IAmHb;IACAoC,gBAAY;IACR5D,iBAAS,IADD;IAER6P,kBAAU,IAFF;IAGRC,mBAAW,KAHH;IAAA,KApHC;;IA0Hb;IACA7P,aAAS;IACLD,iBAAS,IADJ;IAEL1L,aAAK;IAFA,KA3HI;;IAgIb;IACAqO,cAAU,CACN,YADM;IAEN;IACA;IACA,UAJM;IAKN;IACA,cANM,EAON,cAPM,EAQN,MARM,EASN,QATM,EAUN,UAVM,EAWN,UAXM,EAYN,KAZM,EAaN,SAbM,EAcN,YAdM,CAjIG;IAiJbe,cAAU,CAAC,UAAD,EAAa,SAAb,EAAwB,OAAxB,CAjJG;;IAmJb;IACApE,UAAM;IACFgE,iBAAS,SADP;IAEFC,gBAAQ,oBAFN;IAGF7G,cAAM,MAHJ;IAIF2G,eAAO,OAJL;IAKFG,qBAAa,qBALX;IAMFO,cAAM,MANJ;IAOFgM,mBAAW,6BAPT;IAQFpJ,gBAAQ,QARN;IASFmB,kBAAU,UATR;IAUFzL,qBAAa,cAVX;IAWF8H,kBAAU,UAXR;IAYFH,gBAAQ,QAZN;IAaFP,cAAM,MAbJ;IAcFuM,gBAAQ,QAdN;IAeFC,wBAAgB,iBAfd;IAgBFC,yBAAiB,kBAhBf;IAiBFC,yBAAiB,kBAjBf;IAkBFC,wBAAgB,iBAlBd;IAmBFC,oBAAY,oBAnBV;IAoBF1M,kBAAU,UApBR;IAqBFD,kBAAU,UArBR;IAsBF4M,kBAAU,0BAtBR;IAuBF7F,eAAO,OAvBL;IAwBF8F,gBAAQ,QAxBN;IAyBF3T,iBAAS,SAzBP;IA0BF6S,cAAM,MA1BJ;IA2BFtZ,eAAO,OA3BL;IA4BFqa,aAAK,KA5BH;IA6BFC,aAAK,KA7BH;IA8BFC,eAAO,OA9BL;IA+BFC,kBAAU,UA/BR;IAgCF3Q,iBAAS,SAhCP;IAiCF4Q,uBAAe,IAjCb;IAkCFC,sBAAc;IACV,kBAAM,IADI;IAEV,kBAAM,IAFI;IAGV,kBAAM,IAHI;IAIV,iBAAK,IAJK;IAKV,iBAAK,IALK;IAMV,iBAAK;IANK;IAlCZ,KApJO;;IAgMb;IACAC,UAAM;IACFC,eAAO;IACHC,iBAAK,wCADF;IAEHC,oBAAQ,wCAFL;IAGH1W,iBAAK;IAHF,SADL;IAMF2W,iBAAS;IACLF,iBAAK,oCADA;IAELzW,iBACI;IAHC,SANP;IAWF4W,mBAAW;IACPH,iBAAK;IADE;IAXT,KAjMO;;IAiNb;IACAI,eAAW;IACPrN,cAAM,IADC;IAEPrH,cAAM,IAFC;IAGP2G,eAAO,IAHA;IAIPC,iBAAS,IAJF;IAKPC,gBAAQ,IALD;IAMPC,qBAAa,IANN;IAOPC,cAAM,IAPC;IAQPO,gBAAQ,IARD;IASPL,kBAAU,IATH;IAUPC,oBAAY,IAVL;IAWPlJ,aAAK,IAXE;IAYPE,iBAAS,IAZF;IAaP6P,eAAO,IAbA;IAcP7N,iBAAS,IAdF;IAeP6S,cAAM,IAfC;IAgBPpF,kBAAU;IAhBH,KAlNE;;IAqOb;IACA/Y,YAAQ;IACJ;IACA;IACA,WAHI,EAIJ,UAJI,EAKJ,SALI,EAMJ,SANI,EAOJ,SAPI,EAQJ,SARI,EASJ,gBATI,EAUJ,WAVI,EAWJ,YAXI,EAYJ,gBAZI,EAaJ,YAbI,EAcJ,cAdI,EAeJ,MAfI,EAgBJ,OAhBI,EAiBJ,OAjBI,EAkBJ,SAlBI,EAmBJ,QAnBI,EAoBJ,SApBI,EAqBJ,YArBI,EAsBJ,WAtBI;;IAwBJ;IACA,qBAzBI,EA0BJ,gBA1BI,EA2BJ,iBA3BI,EA4BJ,kBA5BI,EA6BJ,gBA7BI,EA8BJ,gBA9BI,EA+BJ,eA/BI,EAgCJ,OAhCI;;IAkCJ;IACA,iBAnCI,EAoCJ,eApCI,EAqCJ,kBArCI;;IAuCJ;IACA,eAxCI,EAyCJ,iBAzCI,EA0CJ,kBA1CI,EA2CJ,WA3CI,EA4CJ,aA5CI,EA6CJ,aA7CI,EA8CJ,gBA9CI,EA+CJ,eA/CI,EAgDJ,UAhDI,CAtOK;;IAyRb;IACA;IACA6R,eAAW;IACPkO,kBAAU,4CADH;IAEPpe,mBAAW,OAFJ;IAGP0P,kBAAU;IACN1P,uBAAW,IADL;IAENG,qBAAS;IAFH,SAHH;IAOPqZ,gBAAQ,aAPD;IAQPrJ,iBAAS;IACL1G,kBAAM,oBADD;IAEL2G,mBAAO,qBAFF;IAGLC,qBAAS,uBAHJ;IAILC,oBAAQ,sBAJH;IAKLC,yBAAa,4BALR;IAMLC,kBAAM,oBAND;IAOLE,sBAAU,wBAPL;IAQLC,wBAAY,0BARP;IASLlJ,iBAAK,mBATA;IAULE,qBAAS,uBAVJ;IAWL8I,sBAAU,wBAXL;IAYL+L,kBAAM;IAZD,SARF;IAsBP3L,gBAAQ;IACJC,kBAAM,oBADF;IAEJC,oBAAQ,sBAFJ;IAGJyG,mBAAO,qBAHH;IAIJJ,sBAAU,wBAJN;IAKJzN,qBAAS;IALL,SAtBD;IA6BPqH,iBAAS;IACL5H,yBAAa,sBADR;IAEL8H,sBAAU,uBAFL;IAGLD,oBAAQ,yBAHH;IAILuL,kBAAM,uBAJD;IAKLzL,oBAAQ;IALH,SA7BF;IAoCPH,kBAAU,iBApCH;IAqCPF,kBAAU,iBArCH;IAsCPoL,iBAAS,gBAtCF;IAuCPtJ,cAAM;IACF7I,qBAAS;IADP;IAvCC,KA3RE;;IAuUb;IACAyH,gBAAY;IACR1S,cAAM,WADE;IAERyI,kBAAU,WAFF;IAGRF,eAAO,qBAHC;IAIRiU,eAAO,mBAJC;IAKRmD,wBAAgB,8BALR;IAMRC,gBAAQ,cANA;IAORC,uBAAe,sBAPP;IAQRC,aAAK,WARG;IASRzL,iBAAS,eATD;IAURC,wBAAgB,wBAVR;IAWRyL,iBAAS,eAXD;IAYRpV,gBAAQ,cAZA;IAaRqV,iBAAS,eAbD;IAcRC,iBAAS,eAdD;IAeRC,eAAO,aAfC;IAgBRvN,iBAAS,eAhBD;IAiBRoK,cAAM,YAjBE;IAkBRlY,gBAAQ,eAlBA;IAmBR8Y,sBAAc,qBAnBN;IAoBRxV,eAAO,cApBC;IAqBRgY,iBAAS,gBArBD;IAsBRC,qBAAa,eAtBL;IAuBRC,sBAAc,qBAvBN;IAwBRvM,cAAM;IACFpR,mBAAO,mBADL;IAEFmR,mBAAO,aAFL;IAGFvE,kBAAM;IAHJ,SAxBE;IA6BR0C,kBAAU;IACN3D,qBAAS,wBADH;IAENyN,oBAAQ;IAFF,SA7BF;IAiCR7J,oBAAY;IACR5D,qBAAS,0BADD;IAER6P,sBAAU;IAFF,SAjCJ;IAqCRnV,aAAK;IACDhK,uBAAW,qBADV;IAED+c,oBAAQ;IAFP,SArCG;IAyCR7S,iBAAS;IACLlK,uBAAW,yBADN;IAEL+c,oBAAQ;IAFH,SAzCD;IA6CRwE,kBAAU;IA7CF,KAxUC;;IAwXb;IACA/d,gBAAY;IACRia,eAAO;IACH/T,sBAAU,oBADP;IAEH9D,gBAAI;IAFD;IADC,KAzXC;;IAgYb;IACAnH,UAAM;IACF+iB,gBAAQ;IADN,KAjYO;;IAqYb;IACA;IACAT,SAAK;IACDzR,iBAAS,KADR;IAEDmS,qBAAa;IAFZ;IAvYQ,CAAjB;;ICJA;IACA;IACA;;AAEA,IAAO,IAAMC,YAAY;IACrBzW,WAAO,OADc;IAErBuV,aAAS,SAFY;IAGrBH,WAAO;IAHc,CAAlB;;AAMP,IAAO,IAAMsB,QAAQ;IACjBpY,WAAO,OADU;IAEjBC,WAAO;IAFU,CAAd;;IAKP;;;;AAIA,IAAO,SAASoY,gBAAT,CAA0B/hB,GAA1B,EAA+B;IAClC;IACA,QAAI,wDAAwDkJ,IAAxD,CAA6DlJ,GAA7D,CAAJ,EAAuE;IACnE,eAAO6hB,UAAUlB,OAAjB;IACH;;IAED;IACA,QAAI,wDAAwDzX,IAAxD,CAA6DlJ,GAA7D,CAAJ,EAAuE;IACnE,eAAO6hB,UAAUrB,KAAjB;IACH;;IAED,WAAO,IAAP;IACH;;IC/BD;IACA;IACA;;IAEA,IAAMwB,OAAO,SAAPA,IAAO,GAAM,EAAnB;;QAEqBC;IACjB,uBAA6B;IAAA,YAAjBxS,OAAiB,uEAAP,KAAO;IAAA;;IACzB,aAAKA,OAAL,GAAerR,OAAO8jB,OAAP,IAAkBzS,OAAjC;;IAEA,YAAI,KAAKA,OAAT,EAAkB;IACd,iBAAK/C,GAAL,CAAS,mBAAT;IACH;IACJ;;;;mCAES;IACN;IACA,mBAAO,KAAK+C,OAAL,GAAenS,SAASsJ,SAAT,CAAmBoT,IAAnB,CAAwB1Y,IAAxB,CAA6B4gB,QAAQxV,GAArC,EAA0CwV,OAA1C,CAAf,GAAoEF,IAA3E;IACH;;;mCAEU;IACP;IACA,mBAAO,KAAKvS,OAAL,GAAenS,SAASsJ,SAAT,CAAmBoT,IAAnB,CAAwB1Y,IAAxB,CAA6B4gB,QAAQjO,IAArC,EAA2CiO,OAA3C,CAAf,GAAqEF,IAA5E;IACH;;;mCAEW;IACR;IACA,mBAAO,KAAKvS,OAAL,GAAenS,SAASsJ,SAAT,CAAmBoT,IAAnB,CAAwB1Y,IAAxB,CAA6B4gB,QAAQlO,KAArC,EAA4CkO,OAA5C,CAAf,GAAsEF,IAA7E;IACH;;;;;IC5BL;AACA;IASA,SAASG,QAAT,GAAoB;IAChB,QAAI,CAAC,KAAK1S,OAAV,EAAmB;IACf;IACH;;IAED;IACA,QAAM4F,SAAS,KAAKzJ,MAAL,CAAYnJ,QAAZ,CAAqBoQ,OAArB,CAA6BQ,UAA5C;IACA,QAAIvS,GAAGnB,OAAH,CAAW0V,MAAX,CAAJ,EAAwB;IACpBA,eAAOO,OAAP,GAAiB,KAAKsH,MAAtB;IACH;;IAED;IACAtb,iBAAaN,IAAb,CAAkB,KAAKsK,MAAvB,EAA+B,KAAKtH,MAApC,EAA4C,KAAK4Y,MAAL,GAAc,iBAAd,GAAkC,gBAA9E,EAAgG,IAAhG;;IAEA;IACA,QAAI,CAACrU,QAAQU,KAAb,EAAoB;IAChB7B,kBAAUpG,IAAV,CAAe,KAAKsK,MAApB,EAA4B,KAAKtH,MAAjC,EAAyC,KAAK4Y,MAA9C;IACH;IACJ;;IAED,SAASkF,cAAT,GAAwC;IAAA,QAAhBzhB,MAAgB,uEAAP,KAAO;;IACpC;IACA,QAAIA,MAAJ,EAAY;IACR,aAAK0hB,cAAL,GAAsB;IAClBC,eAAGlkB,OAAOmkB,OAAP,IAAkB,CADH;IAElBC,eAAGpkB,OAAOqkB,OAAP,IAAkB;IAFH,SAAtB;IAIH,KALD,MAKO;IACHrkB,eAAOskB,QAAP,CAAgB,KAAKL,cAAL,CAAoBC,CAApC,EAAuC,KAAKD,cAAL,CAAoBG,CAA3D;IACH;;IAED;IACAre,aAASsD,IAAT,CAAcgB,KAAd,CAAoBka,QAApB,GAA+BhiB,SAAS,QAAT,GAAoB,EAAnD;;IAEA;IACA0F,gBAAY,KAAK/B,MAAjB,EAAyB,KAAKsH,MAAL,CAAYW,MAAZ,CAAmBuH,UAAnB,CAA8BT,UAA9B,CAAyCiM,QAAlE,EAA4E3e,MAA5E;;IAEA;IACAwhB,aAAS7gB,IAAT,CAAc,IAAd;IACH;;QAEKshB;IACF,wBAAYhX,MAAZ,EAAoB;IAAA;;IAAA;;IAChB;IACA,aAAKA,MAAL,GAAcA,MAAd;;IAEA;IACA,aAAKyB,MAAL,GAAcuV,WAAWvV,MAAzB;IACA,aAAKwV,QAAL,GAAgBD,WAAWC,QAA3B;;IAEA;IACA,aAAKR,cAAL,GAAsB,EAAEC,GAAG,CAAL,EAAQE,GAAG,CAAX,EAAtB;;IAEA;IACA;IACAnhB,WAAGC,IAAH,CACI,KAAKsK,MADT,EAEIzH,QAFJ,EAGI,KAAKkJ,MAAL,KAAgB,IAAhB,GAAuB,oBAAvB,GAAiD,KAAKA,MAAtD,qBAHJ,EAII,YAAM;IACF;IACA8U,qBAAS7gB,IAAT,CAAc,KAAd;IACH,SAPL;;IAUA;IACAD,WAAGC,IAAH,CAAQ,KAAKsK,MAAb,EAAqB,KAAKA,MAAL,CAAYnJ,QAAZ,CAAqBC,SAA1C,EAAqD,UAArD,EAAiE,iBAAS;IACtE;IACA,gBAAI5B,GAAGnB,OAAH,CAAW,MAAKiM,MAAL,CAAYnJ,QAAZ,CAAqB2P,QAAhC,KAA6C,MAAKxG,MAAL,CAAYnJ,QAAZ,CAAqB2P,QAArB,CAA8B3L,QAA9B,CAAuC5G,MAAMyE,MAA7C,CAAjD,EAAuG;IACnG;IACH;;IAED,kBAAK3D,MAAL;IACH,SAPD;;IASA;IACA,aAAKsQ,MAAL;IACH;;IAED;;;;;;;IAsEA;qCACS;IACL,gBAAI,KAAKxB,OAAT,EAAkB;IACd,qBAAK7D,MAAL,CAAYa,KAAZ,CAAkBC,GAAlB,EAAyBkW,WAAWE,MAAX,GAAoB,QAApB,GAA+B,UAAxD;IACH,aAFD,MAEO;IACH,qBAAKlX,MAAL,CAAYa,KAAZ,CAAkBC,GAAlB,CAAsB,gDAAtB;IACH;;IAED;IACArG,wBAAY,KAAKuF,MAAL,CAAYnJ,QAAZ,CAAqBC,SAAjC,EAA4C,KAAKkJ,MAAL,CAAYW,MAAZ,CAAmBuH,UAAnB,CAA8BT,UAA9B,CAAyC5D,OAArF,EAA8F,KAAKA,OAAnG;IACH;;IAED;;;;oCACQ;IACJ,gBAAI,CAAC,KAAKA,OAAV,EAAmB;IACf;IACH;;IAED;IACA,gBAAI5G,QAAQU,KAAR,IAAiB,KAAKqC,MAAL,CAAYW,MAAZ,CAAmB8G,UAAnB,CAA8BkM,SAAnD,EAA8D;IAC1D,oBAAI,KAAK3T,MAAL,CAAYuV,OAAhB,EAAyB;IACrB,yBAAK7c,MAAL,CAAYye,qBAAZ;IACH;IACJ,aAJD,MAIO,IAAI,CAACH,WAAWE,MAAhB,EAAwB;IAC3BV,+BAAe9gB,IAAf,CAAoB,IAApB,EAA0B,IAA1B;IACH,aAFM,MAEA,IAAI,CAAC,KAAK+L,MAAV,EAAkB;IACrB,qBAAK/I,MAAL,CAAY0e,iBAAZ;IACH,aAFM,MAEA,IAAI,CAACliB,GAAGb,KAAH,CAAS,KAAKoN,MAAd,CAAL,EAA4B;IAC/B,qBAAK/I,MAAL,CAAe,KAAK+I,MAApB,eAAoC,KAAKwV,QAAzC;IACH;IACJ;;IAED;;;;mCACO;IACH,gBAAI,CAAC,KAAKpT,OAAV,EAAmB;IACf;IACH;;IAED;IACA,gBAAI5G,QAAQU,KAAR,IAAiB,KAAKqC,MAAL,CAAYW,MAAZ,CAAmB8G,UAAnB,CAA8BkM,SAAnD,EAA8D;IAC1D,qBAAKjb,MAAL,CAAY2e,oBAAZ;IACA,qBAAKrX,MAAL,CAAYO,IAAZ;IACH,aAHD,MAGO,IAAI,CAACyW,WAAWE,MAAhB,EAAwB;IAC3BV,+BAAe9gB,IAAf,CAAoB,IAApB,EAA0B,KAA1B;IACH,aAFM,MAEA,IAAI,CAAC,KAAK+L,MAAV,EAAkB;IACrB,iBAAClJ,SAAS+e,gBAAT,IAA6B/e,SAAS0b,cAAvC,EAAuDve,IAAvD,CAA4D6C,QAA5D;IACH,aAFM,MAEA,IAAI,CAACrD,GAAGb,KAAH,CAAS,KAAKoN,MAAd,CAAL,EAA4B;IAC/B,oBAAM8V,SAAS,KAAK9V,MAAL,KAAgB,KAAhB,GAAwB,QAAxB,GAAmC,MAAlD;IACAlJ,8BAAY,KAAKkJ,MAAjB,GAA0B8V,MAA1B,GAAmC,KAAKN,QAAxC;IACH;IACJ;;IAED;;;;qCACS;IACL,gBAAI,CAAC,KAAK3F,MAAV,EAAkB;IACd,qBAAKkG,KAAL;IACH,aAFD,MAEO;IACH,qBAAKC,IAAL;IACH;IACJ;;;;;IA5FD;mCACc;IACV,mBACI,CAACT,WAAWE,MAAX,IAAqB,KAAKlX,MAAL,CAAYW,MAAZ,CAAmB8G,UAAnB,CAA8BiM,QAApD,KACA,KAAK1T,MAAL,CAAYW,MAAZ,CAAmB8G,UAAnB,CAA8B5D,OAD9B,IAEA,KAAK7D,MAAL,CAAYzL,SAAZ,CAAsB8J,EAFtB,IAGA,KAAK2B,MAAL,CAAY+Q,OAJhB;IAMH;;IAED;;;;mCACa;IACT,gBAAI,CAAC,KAAKlN,OAAV,EAAmB;IACf,uBAAO,KAAP;IACH;;IAED;IACA,gBAAI,CAACmT,WAAWE,MAAhB,EAAwB;IACpB,uBAAOpc,SAAS,KAAKpC,MAAd,EAAsB,KAAKsH,MAAL,CAAYW,MAAZ,CAAmBuH,UAAnB,CAA8BT,UAA9B,CAAyCiM,QAA/D,CAAP;IACH;;IAED,gBAAM3f,UAAU,CAAC,KAAK0N,MAAN,GAAelJ,SAASmf,iBAAxB,GAA4Cnf,cAAY,KAAKkJ,MAAjB,GAA0B,KAAKwV,QAA/B,aAA5D;;IAEA,mBAAOljB,YAAY,KAAK2E,MAAxB;IACH;;IAED;;;;mCACa;IACT,mBAAOuE,QAAQU,KAAR,IAAiB,KAAKqC,MAAL,CAAYW,MAAZ,CAAmB8G,UAAnB,CAA8BkM,SAA/C,GACD,KAAK3T,MAAL,CAAYjB,KADX,GAED,KAAKiB,MAAL,CAAYnJ,QAAZ,CAAqBC,SAF3B;IAGH;;;mCAnEmB;IAChB,mBAAO,CAAC,EACJyB,SAASof,iBAAT,IACApf,SAASqf,uBADT,IAEArf,SAASsf,oBAFT,IAGAtf,SAASuf,mBAJL,CAAR;IAMH;;IAED;;;;mCACoB;IAChB;IACA,gBAAI5iB,GAAGvB,QAAH,CAAY4E,SAAS0b,cAArB,CAAJ,EAA0C;IACtC,uBAAO,EAAP;IACH;;IAED;IACA,gBAAI/b,QAAQ,EAAZ;IACA,gBAAM6f,WAAW,CAAC,QAAD,EAAW,KAAX,EAAkB,IAAlB,CAAjB;;IAEAA,qBAAStJ,IAAT,CAAc,eAAO;IACjB,oBAAIvZ,GAAGvB,QAAH,CAAY4E,SAAYyf,GAAZ,oBAAZ,KAAiD9iB,GAAGvB,QAAH,CAAY4E,SAAYyf,GAAZ,sBAAZ,CAArD,EAAsG;IAClG9f,4BAAQ8f,GAAR;IACA,2BAAO,IAAP;IACH;;IAED,uBAAO,KAAP;IACH,aAPD;;IASA,mBAAO9f,KAAP;IACH;;;mCAEqB;IAClB,mBAAO,KAAKuJ,MAAL,KAAgB,KAAhB,GAAwB,YAAxB,GAAuC,YAA9C;IACH;;;;;IC5HL;IACA;IACA;IACA;IACA;;AAEA,IAAe,SAASwW,SAAT,CAAmB3X,GAAnB,EAAsC;IAAA,QAAd4X,QAAc,uEAAH,CAAG;;IACjD,WAAO,IAAIxhB,OAAJ,CAAY,UAACE,OAAD,EAAU2N,MAAV,EAAqB;IACpC,YAAM4T,QAAQ,IAAIC,KAAJ,EAAd;;IAEA,YAAMC,UAAU,SAAVA,OAAU,GAAM;IAClB,mBAAOF,MAAMG,MAAb;IACA,mBAAOH,MAAMI,OAAb;IACA,aAACJ,MAAMK,YAAN,IAAsBN,QAAtB,GAAiCthB,OAAjC,GAA2C2N,MAA5C,EAAoD4T,KAApD;IACH,SAJD;;IAMAjnB,eAAOkF,MAAP,CAAc+hB,KAAd,EAAqB,EAAEG,QAAQD,OAAV,EAAmBE,SAASF,OAA5B,EAAqC/X,QAArC,EAArB;IACH,KAVM,CAAP;IAWH;;IClBD;AACA;IAaA,IAAMjC,KAAK;IACPoa,gBADO,0BACQ;IACXhe,oBAAY,KAAK5D,QAAL,CAAcC,SAA1B,EAAqC,KAAK6J,MAAL,CAAYqG,SAAZ,CAAsBlQ,SAAtB,CAAgC+C,OAAhC,CAAwC,GAAxC,EAA6C,EAA7C,CAArC,EAAuF,IAAvF;IACAY,oBAAY,KAAK5D,QAAL,CAAcC,SAA1B,EAAqC,KAAK6J,MAAL,CAAYuH,UAAZ,CAAuB0N,WAA5D,EAAyE,KAAKrhB,SAAL,CAAe8J,EAAxF;IACH,KAJM;;;IAMP;IACAiK,wBAPO,kCAO8B;IAAA,YAAhBvT,MAAgB,uEAAP,KAAO;;IACjC,YAAIA,UAAU,KAAK+J,OAAnB,EAA4B;IACxB,iBAAKC,KAAL,CAAW3G,YAAX,CAAwB,UAAxB,EAAoC,EAApC;IACH,SAFD,MAEO;IACH,iBAAK2G,KAAL,CAAWvE,eAAX,CAA2B,UAA3B;IACH;IACJ,KAbM;;;IAeP;IACAke,SAhBO,mBAgBC;IAAA;;IACJ;IACA;IACA,aAAKzD,SAAL,CAAelW,KAAf;;IAEA;IACA,YAAI,CAAC,KAAKxK,SAAL,CAAe8J,EAApB,EAAwB;IACpB,iBAAKwC,KAAL,CAAWwH,IAAX,6BAA0C,KAAKpK,QAA/C,SAA2D,KAAKzI,IAAhE;;IAEA;IACA6I,eAAGiK,oBAAH,CAAwB5S,IAAxB,CAA6B,IAA7B,EAAmC,IAAnC;;IAEA;IACA;IACH;;IAED;IACA,YAAI,CAACR,GAAGnB,OAAH,CAAW,KAAK8C,QAAL,CAAc2P,QAAzB,CAAL,EAAyC;IACrC;IACAA,qBAAS0J,MAAT,CAAgBxa,IAAhB,CAAqB,IAArB;;IAEA;IACA,iBAAKuf,SAAL,CAAezO,QAAf;IACH;;IAED;IACAnI,WAAGiK,oBAAH,CAAwB5S,IAAxB,CAA6B,IAA7B;;IAEA;IACA,YAAI,KAAKoJ,OAAT,EAAkB;IACd0I,qBAASsJ,KAAT,CAAepb,IAAf,CAAoB,IAApB;IACH;;IAED;IACA,aAAKmS,MAAL,GAAc,IAAd;;IAEA;IACA,aAAKyD,KAAL,GAAa,IAAb;;IAEA;IACA,aAAKgD,KAAL,GAAa,IAAb;;IAEA;IACA,aAAKgF,IAAL,GAAY,IAAZ;;IAEA;IACA,aAAK7S,OAAL,GAAe,IAAf;;IAEA;IACA+F,iBAAS4E,YAAT,CAAsB1V,IAAtB,CAA2B,IAA3B;;IAEA;IACA8Q,iBAAS+F,UAAT,CAAoB7W,IAApB,CAAyB,IAAzB;;IAEA;IACA2I,WAAGsa,YAAH,CAAgBjjB,IAAhB,CAAqB,IAArB;;IAEA;IACA+E,oBACI,KAAK5D,QAAL,CAAcC,SADlB,EAEI,KAAK6J,MAAL,CAAYuH,UAAZ,CAAuB3J,GAAvB,CAA2BhK,SAF/B,EAGIsJ,QAAQU,GAAR,IAAe,KAAKO,OAApB,IAA+B,KAAKiS,OAHxC;;IAMA;IACAtW,oBAAY,KAAK5D,QAAL,CAAcC,SAA1B,EAAqC,KAAK6J,MAAL,CAAYuH,UAAZ,CAAuBzJ,OAAvB,CAA+BlK,SAApE,EAA+EsJ,QAAQY,OAAR,IAAmB,KAAKK,OAAvG;;IAEA;IACArE,oBAAY,KAAK5D,QAAL,CAAcC,SAA1B,EAAqC,KAAK6J,MAAL,CAAYuH,UAAZ,CAAuBvK,KAA5D,EAAmEV,QAAQU,KAA3E;;IAEA;IACAlD,oBAAY,KAAK5D,QAAL,CAAcC,SAA1B,EAAqC,KAAK6J,MAAL,CAAYuH,UAAZ,CAAuByN,OAA5D,EAAqE,KAAKvW,KAA1E;;IAEA;IACA,aAAK3I,KAAL,GAAa,IAAb;;IAEA;IACAE,mBAAW,YAAM;IACbX,yBAAaN,IAAb,CAAkB,KAAlB,EAAwB,MAAKqJ,KAA7B,EAAoC,OAApC;IACH,SAFD,EAEG,CAFH;;IAIA;IACAV,WAAGua,QAAH,CAAYljB,IAAZ,CAAiB,IAAjB;;IAEA;IACA,YAAI,KAAK0f,MAAT,EAAiB;IACb/W,eAAGwa,SAAH,CAAanjB,IAAb,CAAkB,IAAlB,EAAwB,KAAK0f,MAA7B,EAAqC,KAArC,EAA4CxP,KAA5C,CAAkD,YAAM,EAAxD;IACH;;IAED;IACA;IACA,YAAI,KAAKjF,MAAL,CAAYqH,QAAhB,EAA0B;IACtBxB,qBAASmG,cAAT,CAAwBjX,IAAxB,CAA6B,IAA7B;IACH;IACJ,KA9GM;;;IAgHP;IACAkjB,YAjHO,sBAiHI;IACP;IACA,YAAIlP,QAAQvG,KAAKzO,GAAL,CAAS,MAAT,EAAiB,KAAKiM,MAAtB,CAAZ;;IAEA;IACA,YAAIzL,GAAG/B,MAAH,CAAU,KAAKwN,MAAL,CAAY0C,KAAtB,KAAgC,CAACnO,GAAGb,KAAH,CAAS,KAAKsM,MAAL,CAAY0C,KAArB,CAArC,EAAkE;IAC9DqG,4BAAc,KAAK/I,MAAL,CAAY0C,KAA1B;IACH;;IAED;IACAzR,cAAMuF,IAAN,CAAW,KAAKN,QAAL,CAAcoQ,OAAd,CAAsB1G,IAAtB,IAA8B,EAAzC,EAA6ClL,OAA7C,CAAqD,kBAAU;IAC3DoU,mBAAOrR,YAAP,CAAoB,YAApB,EAAkCsR,KAAlC;IACH,SAFD;;IAIA;IACA;IACA,YAAI,KAAKoP,OAAT,EAAkB;IACd,gBAAMhE,SAAStZ,WAAW9F,IAAX,CAAgB,IAAhB,EAAsB,QAAtB,CAAf;;IAEA,gBAAI,CAACR,GAAGnB,OAAH,CAAW+gB,MAAX,CAAL,EAAyB;IACrB;IACH;;IAED;IACA,gBAAMzR,QAAQ,CAACnO,GAAGb,KAAH,CAAS,KAAKsM,MAAL,CAAY0C,KAArB,CAAD,GAA+B,KAAK1C,MAAL,CAAY0C,KAA3C,GAAmD,OAAjE;IACA,gBAAMxB,SAASsB,KAAKzO,GAAL,CAAS,YAAT,EAAuB,KAAKiM,MAA5B,CAAf;;IAEAmU,mBAAO1c,YAAP,CAAoB,OAApB,EAA6ByJ,OAAOhI,OAAP,CAAe,SAAf,EAA0BwJ,KAA1B,CAA7B;IACH;IACJ,KA9IM;;;IAgJP;IACA0V,gBAjJO,wBAiJMC,MAjJN,EAiJc;IACjBve,oBAAY,KAAK5D,QAAL,CAAcC,SAA1B,EAAqC,KAAK6J,MAAL,CAAYuH,UAAZ,CAAuBmN,aAA5D,EAA2E2D,MAA3E;IACH,KAnJM;;;IAqJP;IACA;IACAH,aAvJO,qBAuJGzD,MAvJH,EAuJ2B;IAAA;;IAAA,YAAhBpgB,OAAgB,uEAAN,IAAM;;IAC9B;IACA,YAAIA,WAAW,KAAKogB,MAApB,EAA4B;IACxB,mBAAO1e,QAAQ6N,MAAR,CAAe,IAAIK,KAAJ,CAAU,oBAAV,CAAf,CAAP;IACH;;IAED;IACA,aAAK7F,KAAL,CAAW3G,YAAX,CAAwB,QAAxB,EAAkCgd,MAAlC;;IAEA;IACA,eACI3e,MACKf,IADL,CACU,IADV;IAEI;IAFJ,SAGKqB,IAHL,CAGU;IAAA,mBAAMkhB,UAAU7C,MAAV,CAAN;IAAA,SAHV,EAIKxP,KAJL,CAIW,eAAO;IACV;IACA,gBAAIwP,WAAW,OAAKA,MAApB,EAA4B;IACxB/W,mBAAG0a,YAAH,CAAgBrjB,IAAhB,CAAqB,MAArB,EAA2B,KAA3B;IACH;IACD;IACA,kBAAMuJ,GAAN;IACH,SAXL,EAYKlI,IAZL,CAYU,YAAM;IACR;IACA,gBAAIqe,WAAW,OAAKA,MAApB,EAA4B;IACxB,sBAAM,IAAIxQ,KAAJ,CAAU,gDAAV,CAAN;IACH;IACJ,SAjBL,EAkBK7N,IAlBL,CAkBU,YAAM;IACR7F,mBAAOkF,MAAP,CAAc,OAAKS,QAAL,CAAcue,MAAd,CAAqBvY,KAAnC,EAA0C;IACtCoc,4CAAyB7D,MAAzB,QADsC;IAEtC;IACA8D,gCAAgB;IAHsB,aAA1C;IAKA7a,eAAG0a,YAAH,CAAgBrjB,IAAhB,CAAqB,MAArB,EAA2B,IAA3B;IACA,mBAAO0f,MAAP;IACH,SA1BL,CADJ;IA6BH,KA9LM;;;IAgMP;IACAuD,gBAjMO,wBAiMM1kB,KAjMN,EAiMa;IAAA;;IAChB;IACAwG,oBAAY,KAAK5D,QAAL,CAAcC,SAA1B,EAAqC,KAAK6J,MAAL,CAAYuH,UAAZ,CAAuBqN,OAA5D,EAAqE,KAAKA,OAA1E;IACA9a,oBAAY,KAAK5D,QAAL,CAAcC,SAA1B,EAAqC,KAAK6J,MAAL,CAAYuH,UAAZ,CAAuB/H,MAA5D,EAAoE,KAAKA,MAAzE;IACA1F,oBAAY,KAAK5D,QAAL,CAAcC,SAA1B,EAAqC,KAAK6J,MAAL,CAAYuH,UAAZ,CAAuBsN,OAA5D,EAAqE,KAAKA,OAA1E;;IAEA;IACA5jB,cAAMuF,IAAN,CAAW,KAAKN,QAAL,CAAcoQ,OAAd,CAAsB1G,IAAtB,IAA8B,EAAzC,EAA6ClL,OAA7C,CAAqD,kBAAU;IAC3DqD,mBAAOsR,OAAP,GAAiB,OAAKuL,OAAtB;IACH,SAFD;;IAIA;IACA,YAAIrgB,GAAGjB,KAAH,CAASA,KAAT,KAAmBA,MAAMuB,IAAN,KAAe,YAAtC,EAAoD;IAChD;IACH;;IAED;IACA6I,WAAG8a,cAAH,CAAkBzjB,IAAlB,CAAuB,IAAvB;IACH,KAnNM;;;IAqNP;IACA0jB,gBAtNO,wBAsNMnlB,KAtNN,EAsNa;IAAA;;IAChB,aAAKwhB,OAAL,GAAe,CAAC,SAAD,EAAY,SAAZ,EAAuBta,QAAvB,CAAgClH,MAAMuB,IAAtC,CAAf;;IAEA;IACA6jB,qBAAa,KAAKC,MAAL,CAAY7D,OAAzB;;IAEA;IACA,aAAK6D,MAAL,CAAY7D,OAAZ,GAAsB9e,WAAW,YAAM;IACnC;IACA8D,wBAAY,OAAK5D,QAAL,CAAcC,SAA1B,EAAqC,OAAK6J,MAAL,CAAYuH,UAAZ,CAAuBuN,OAA5D,EAAqE,OAAKA,OAA1E;;IAEA;IACApX,eAAG8a,cAAH,CAAkBzjB,IAAlB,CAAuB,MAAvB;IACH,SANqB,EAMnB,KAAK+f,OAAL,GAAe,GAAf,GAAqB,CANF,CAAtB;IAOH,KApOM;;;IAsOP;IACA0D,kBAvOO,0BAuOQze,KAvOR,EAuOe;IAAA,YACV8L,WADU,GACG,KAAK3P,QADR,CACV2P,QADU;;;IAGlB,YAAIA,eAAY,KAAK7F,MAAL,CAAYwS,YAA5B,EAA0C;IACtC;IACA,iBAAKgG,cAAL,CAAoBpoB,QAAQ2J,SAAS,KAAK+a,OAAd,IAAyB,KAAKtV,MAA9B,IAAwCqG,YAASwD,OAAjD,IAA4DxD,YAASkP,KAA7E,CAApB;IACH;IACJ;IA9OM,CAAX;;ICdA;AACA;QAUM6D;IACF,uBAAYvZ,MAAZ,EAAoB;IAAA;;IAChB,aAAKA,MAAL,GAAcA,MAAd;IACA,aAAKwZ,OAAL,GAAe,IAAf;;IAEA,aAAKC,SAAL,GAAiB,KAAKA,SAAL,CAAerL,IAAf,CAAoB,IAApB,CAAjB;IACA,aAAKO,UAAL,GAAkB,KAAKA,UAAL,CAAgBP,IAAhB,CAAqB,IAArB,CAAlB;IACA,aAAKsL,UAAL,GAAkB,KAAKA,UAAL,CAAgBtL,IAAhB,CAAqB,IAArB,CAAlB;IACH;;IAED;;;;;sCACUna,OAAO;IAAA;;IACb,gBAAM0lB,OAAO1lB,MAAMkI,OAAN,GAAgBlI,MAAMkI,OAAtB,GAAgClI,MAAM2lB,KAAnD;IACA,gBAAM5P,UAAU/V,MAAMuB,IAAN,KAAe,SAA/B;IACA,gBAAMqkB,SAAS7P,WAAW2P,SAAS,KAAKH,OAAxC;;IAEA;IACA,gBAAIvlB,MAAM6lB,MAAN,IAAgB7lB,MAAM8lB,OAAtB,IAAiC9lB,MAAM+lB,OAAvC,IAAkD/lB,MAAMmI,QAA5D,EAAsE;IAClE;IACH;;IAED;IACA;IACA,gBAAI,CAAClH,GAAGzB,MAAH,CAAUkmB,IAAV,CAAL,EAAsB;IAClB;IACH;;IAED;IACA,gBAAMM,YAAY,SAAZA,SAAY,GAAM;IACpB;IACA,sBAAKja,MAAL,CAAYE,WAAZ,GAA0B,MAAKF,MAAL,CAAYgI,QAAZ,GAAuB,EAAvB,IAA6B2R,OAAO,EAApC,CAA1B;IACH,aAHD;;IAKA;IACA;IACA,gBAAI3P,OAAJ,EAAa;IACT;IACA,oBAAM1N,iBAAiB,CAAC,EAAD,EAAK,EAAL,EAAS,EAAT,EAAa,EAAb,EAAiB,EAAjB,EAAqB,EAArB,EAAyB,EAAzB,EAA6B,EAA7B,EAAiC,EAAjC,EAAqC,EAArC,EAAyC,EAAzC,EAA6C,EAA7C,EAAiD,EAAjD,EAAqD,EAArD,EAAyD,EAAzD,EAA6D,EAA7D,EAAiE,EAAjE,EAAqE,EAArE,EAAyE,EAAzE,EAA6E,EAA7E,EAAiF,EAAjF,CAAvB;;IAEA;IACA;IACA;IACA,oBAAMX,UAAUD,iBAAhB;IACA,oBACIxG,GAAGnB,OAAH,CAAW4H,OAAX,KACCA,YAAY,KAAKqE,MAAL,CAAYnJ,QAAZ,CAAqB8Q,MAArB,CAA4BC,IAAxC,IACG7M,QAAQY,OAAR,EAAiB,KAAKqE,MAAL,CAAYW,MAAZ,CAAmBqG,SAAnB,CAA6BkO,QAA9C,CAHR,EAIE;IACE;IACH;;IAED;IACA,oBAAI5Y,eAAenB,QAAf,CAAwBwe,IAAxB,CAAJ,EAAmC;IAC/B1lB,0BAAMqI,cAAN;IACArI,0BAAM+a,eAAN;IACH;;IAED,wBAAQ2K,IAAR;IACI,yBAAK,EAAL;IACA,yBAAK,EAAL;IACA,yBAAK,EAAL;IACA,yBAAK,EAAL;IACA,yBAAK,EAAL;IACA,yBAAK,EAAL;IACA,yBAAK,EAAL;IACA,yBAAK,EAAL;IACA,yBAAK,EAAL;IACA,yBAAK,EAAL;IACI;IACA,4BAAI,CAACE,MAAL,EAAa;IACTI;IACH;IACD;;IAEJ,yBAAK,EAAL;IACA,yBAAK,EAAL;IACI;IACA,4BAAI,CAACJ,MAAL,EAAa;IACT,iCAAK7Z,MAAL,CAAYka,UAAZ;IACH;IACD;;IAEJ,yBAAK,EAAL;IACI;IACA,6BAAKla,MAAL,CAAYma,cAAZ,CAA2B,GAA3B;IACA;;IAEJ,yBAAK,EAAL;IACI;IACA,6BAAKna,MAAL,CAAYoa,cAAZ,CAA2B,GAA3B;IACA;;IAEJ,yBAAK,EAAL;IACI;IACA,4BAAI,CAACP,MAAL,EAAa;IACT,iCAAK7Z,MAAL,CAAYsL,KAAZ,GAAoB,CAAC,KAAKtL,MAAL,CAAYsL,KAAjC;IACH;IACD;;IAEJ,yBAAK,EAAL;IACI;IACA,6BAAKtL,MAAL,CAAYqa,OAAZ;IACA;;IAEJ,yBAAK,EAAL;IACI;IACA,6BAAKra,MAAL,CAAYoH,MAAZ;IACA;;IAEJ,yBAAK,EAAL;IACI;IACA,6BAAKpH,MAAL,CAAYyH,UAAZ,CAAuB1S,MAAvB;IACA;;IAEJ,yBAAK,EAAL;IACI;IACA,4BAAI,CAAC8kB,MAAL,EAAa;IACT,iCAAK7Z,MAAL,CAAYsa,cAAZ;IACH;IACD;;IAEJ,yBAAK,EAAL;IACI;IACA,6BAAKta,MAAL,CAAYsT,IAAZ,GAAmB,CAAC,KAAKtT,MAAL,CAAYsT,IAAhC;IACA;;IAEJ;;;;;;;;;;IAYA;IACI;IAlFR;;IAqFA;IACA;IACA,oBAAI,CAAC,KAAKtT,MAAL,CAAYyH,UAAZ,CAAuB5D,OAAxB,IAAmC,KAAK7D,MAAL,CAAYyH,UAAZ,CAAuB6J,MAA1D,IAAoEqI,SAAS,EAAjF,EAAqF;IACjF,yBAAK3Z,MAAL,CAAYyH,UAAZ,CAAuB1S,MAAvB;IACH;;IAED;IACA,qBAAKykB,OAAL,GAAeG,IAAf;IACH,aAnHD,MAmHO;IACH,qBAAKH,OAAL,GAAe,IAAf;IACH;IACJ;;IAED;;;;uCACWvlB,OAAO;IACduS,qBAASmI,UAAT,CAAoBjZ,IAApB,CAAyB,KAAKsK,MAA9B,EAAsC/L,KAAtC;IACH;;IAED;;;;yCACa;IACT,iBAAK+L,MAAL,CAAYZ,KAAZ,GAAoB,IAApB;;IAEA;IACA3E,wBAAY,KAAKuF,MAAL,CAAYnJ,QAAZ,CAAqBC,SAAjC,EAA4C,KAAKkJ,MAAL,CAAYW,MAAZ,CAAmBuH,UAAnB,CAA8ByN,OAA1E,EAAmF,IAAnF;IACH;;IAED;;;;qCACsB;IAAA,gBAAf5gB,MAAe,uEAAN,IAAM;;IAClB;IACA,gBAAI,KAAKiL,MAAL,CAAYW,MAAZ,CAAmB6S,QAAnB,CAA4BC,MAAhC,EAAwC;IACpC5e,+BAAea,IAAf,CAAoB,KAAKsK,MAAzB,EAAiCxN,MAAjC,EAAyC,eAAzC,EAA0D,KAAKinB,SAA/D,EAA0E1kB,MAA1E,EAAkF,KAAlF;IACH;;IAED;IACAF,2BAAea,IAAf,CAAoB,KAAKsK,MAAzB,EAAiCzH,SAASsD,IAA1C,EAAgD,OAAhD,EAAyD,KAAK8S,UAA9D,EAA0E5Z,MAA1E;;IAEA;IACAa,iBAAKF,IAAL,CAAU,KAAKsK,MAAf,EAAuBzH,SAASsD,IAAhC,EAAsC,YAAtC,EAAoD,KAAK6d,UAAzD;IACH;;IAED;;;;wCACY;IAAA;;IACR;IACA,gBAAI,CAAC,KAAK1Z,MAAL,CAAYW,MAAZ,CAAmB6S,QAAnB,CAA4BC,MAA7B,IAAuC,KAAKzT,MAAL,CAAYW,MAAZ,CAAmB6S,QAAnB,CAA4B7X,OAAvE,EAAgF;IAC5ElG,mBAAGC,IAAH,CAAQ,KAAKsK,MAAb,EAAqB,KAAKA,MAAL,CAAYnJ,QAAZ,CAAqBC,SAA1C,EAAqD,eAArD,EAAsE,KAAK2iB,SAA3E,EAAsF,KAAtF;IACH;;IAED;IACA;IACAhkB,eAAGC,IAAH,CAAQ,KAAKsK,MAAb,EAAqB,KAAKA,MAAL,CAAYnJ,QAAZ,CAAqBC,SAA1C,EAAqD,UAArD,EAAiE,iBAAS;IACtE2D,4BAAYxG,MAAMyE,MAAlB,EAA0B,OAAKsH,MAAL,CAAYW,MAAZ,CAAmBuH,UAAnB,CAA8B4N,QAAxD,EAAkE,KAAlE;IACH,aAFD;IAGA;IACArgB,eAAGC,IAAH,CAAQ,KAAKsK,MAAb,EAAqB,KAAKA,MAAL,CAAYnJ,QAAZ,CAAqBC,SAA1C,EAAqD,SAArD,EAAgE,iBAAS;IACrE,oBAAI7C,MAAMkI,OAAN,KAAkB,CAAtB,EAAyB;IACrB;IACH;;IAED;IACA;IACAxF,2BAAW,YAAM;IACb8D,gCAAYiB,iBAAZ,EAA+B,OAAKsE,MAAL,CAAYW,MAAZ,CAAmBuH,UAAnB,CAA8B4N,QAA7D,EAAuE,IAAvE;IACH,iBAFD,EAEG,CAFH;IAGH,aAVD;;IAYA;IACArgB,eAAGC,IAAH,CACI,KAAKsK,MADT,EAEI,KAAKA,MAAL,CAAYnJ,QAAZ,CAAqBC,SAFzB,EAGI,0EAHJ,EAII,iBAAS;IAAA,oBACG0P,WADH,GACgB,OAAKxG,MAAL,CAAYnJ,QAD5B,CACG2P,QADH;;IAGL;;IACA,oBAAIvS,MAAMuB,IAAN,KAAe,iBAAnB,EAAsC;IAClCgR,gCAASwD,OAAT,GAAmB,KAAnB;IACAxD,gCAASkP,KAAT,GAAiB,KAAjB;IACH;;IAED;IACA,oBAAM7G,OAAO,CAAC,YAAD,EAAe,WAAf,EAA4B,WAA5B,EAAyC1T,QAAzC,CAAkDlH,MAAMuB,IAAxD,CAAb;;IAEA,oBAAI+kB,QAAQ,CAAZ;;IAEA,oBAAI1L,IAAJ,EAAU;IACNxQ,uBAAG8a,cAAH,CAAkBzjB,IAAlB,CAAuB,OAAKsK,MAA5B,EAAoC,IAApC;IACA;IACAua,4BAAQ,OAAKva,MAAL,CAAYZ,KAAZ,GAAoB,IAApB,GAA2B,IAAnC;IACH;;IAED;IACAia,6BAAa,OAAKrZ,MAAL,CAAYsZ,MAAZ,CAAmB9S,QAAhC;IACA;IACA,uBAAKxG,MAAL,CAAYsZ,MAAZ,CAAmB9S,QAAnB,GAA8B7P,WAAW;IAAA,2BAAM0H,GAAG8a,cAAH,CAAkBzjB,IAAlB,CAAuB,OAAKsK,MAA5B,EAAoC,KAApC,CAAN;IAAA,iBAAX,EAA6Dua,KAA7D,CAA9B;IACH,aA5BL;IA8BH;;IAED;;;;oCACQ;IAAA;;IACJ;IACA9kB,eAAGC,IAAH,CAAQ,KAAKsK,MAAb,EAAqB,KAAKA,MAAL,CAAYjB,KAAjC,EAAwC,2BAAxC,EAAqE;IAAA,uBACjEyH,SAAS+F,UAAT,CAAoB7W,IAApB,CAAyB,OAAKsK,MAA9B,EAAsC/L,KAAtC,CADiE;IAAA,aAArE;;IAIA;IACAwB,eAAGC,IAAH,CAAQ,KAAKsK,MAAb,EAAqB,KAAKA,MAAL,CAAYjB,KAAjC,EAAwC,0CAAxC,EAAoF;IAAA,uBAChFyH,SAASmG,cAAT,CAAwBjX,IAAxB,CAA6B,OAAKsK,MAAlC,EAA0C/L,KAA1C,CADgF;IAAA,aAApF;;IAIA;IACA;IACAwB,eAAGC,IAAH,CAAQ,KAAKsK,MAAb,EAAqB,KAAKA,MAAL,CAAYjB,KAAjC,EAAwC,SAAxC,EAAmD,YAAM;IACrD3E,6BAAa,OAAK4F,MAAL,CAAYnJ,QAAZ,CAAqBgR,MAAlC,EAA0C,CAAC,OAAK7H,MAAL,CAAYwa,QAAvD;IACApgB,6BAAa,OAAK4F,MAAL,CAAYnJ,QAAZ,CAAqBoQ,OAArB,CAA6BK,IAA1C,EAAgD,CAAC,OAAKtH,MAAL,CAAYwa,QAA7D;IACH,aAHD;;IAKA;IACA/kB,eAAGC,IAAH,CAAQ,KAAKsK,MAAb,EAAqB,KAAKA,MAAL,CAAYjB,KAAjC,EAAwC,OAAxC,EAAiD,YAAM;IACnD;IACA,oBAAI,OAAKiB,MAAL,CAAYlB,OAAZ,IAAuB,OAAKkB,MAAL,CAAY+Q,OAAnC,IAA8C,OAAK/Q,MAAL,CAAYW,MAAZ,CAAmByS,UAArE,EAAiF;IAC7E;IACA,2BAAKpT,MAAL,CAAYmH,OAAZ;IACH;IACJ,aAND;;IAQA;IACA1R,eAAGC,IAAH,CAAQ,KAAKsK,MAAb,EAAqB,KAAKA,MAAL,CAAYjB,KAAjC,EAAwC,iCAAxC,EAA2E;IAAA,uBACvEyH,SAAS+E,cAAT,CAAwB7V,IAAxB,CAA6B,OAAKsK,MAAlC,EAA0C/L,KAA1C,CADuE;IAAA,aAA3E;;IAIA;IACAwB,eAAGC,IAAH,CAAQ,KAAKsK,MAAb,EAAqB,KAAKA,MAAL,CAAYjB,KAAjC,EAAwC,cAAxC,EAAwD;IAAA,uBACpDyH,SAAS4E,YAAT,CAAsB1V,IAAtB,CAA2B,OAAKsK,MAAhC,EAAwC/L,KAAxC,CADoD;IAAA,aAAxD;;IAIA;IACAwB,eAAGC,IAAH,CAAQ,KAAKsK,MAAb,EAAqB,KAAKA,MAAL,CAAYjB,KAAjC,EAAwC,6CAAxC,EAAuF;IAAA,uBACnFV,GAAGsa,YAAH,CAAgBjjB,IAAhB,CAAqB,OAAKsK,MAA1B,EAAkC/L,KAAlC,CADmF;IAAA,aAAvF;;IAIA;IACAwB,eAAGC,IAAH,CAAQ,KAAKsK,MAAb,EAAqB,KAAKA,MAAL,CAAYjB,KAAjC,EAAwC,gCAAxC,EAA0E;IAAA,uBACtEV,GAAG+a,YAAH,CAAgB1jB,IAAhB,CAAqB,OAAKsK,MAA1B,EAAkC/L,KAAlC,CADsE;IAAA,aAA1E;;IAIA;IACA;IACAwB,eAAGC,IAAH,CAAQ,KAAKsK,MAAb,EAAqB,KAAKA,MAAL,CAAYjB,KAAjC,EAAwC,SAAxC,EAAmD,YAAM;IACrD,oBAAI,CAAC,OAAKiB,MAAL,CAAYsV,GAAjB,EAAsB;IAClB;IACH;;IAED;IACA,oBAAI,OAAKtV,MAAL,CAAYsV,GAAZ,CAAgBzR,OAAhB,IAA2B,CAAC,OAAK7D,MAAL,CAAYsV,GAAZ,CAAgBmF,WAAhD,EAA6D;IACzD;IACA,2BAAKza,MAAL,CAAYsV,GAAZ,CAAgBoF,cAAhB,CAA+B3jB,IAA/B,CAAoC;IAAA,+BAAM,OAAKiJ,MAAL,CAAYsV,GAAZ,CAAgB/U,IAAhB,EAAN;IAAA,qBAApC,EAAkEqF,KAAlE,CAAwE;IAAA,+BAAM,OAAK5F,MAAL,CAAYO,IAAZ,EAAN;IAAA,qBAAxE;IACH;IACJ,aAVD;;IAYA;IACA,gBAAI,KAAKP,MAAL,CAAYzL,SAAZ,CAAsB8J,EAAtB,IAA4B,KAAK2B,MAAL,CAAYW,MAAZ,CAAmBuS,WAA/C,IAA8D,CAAC,KAAKlT,MAAL,CAAY2a,OAA/E,EAAwF;IACpF;IACA,oBAAM1jB,UAAUuE,WAAW9F,IAAX,CAAgB,KAAKsK,MAArB,QAAiC,KAAKA,MAAL,CAAYW,MAAZ,CAAmBuH,UAAnB,CAA8BnK,KAA/D,CAAhB;;IAEA;IACA,oBAAI,CAAC7I,GAAGnB,OAAH,CAAWkD,OAAX,CAAL,EAA0B;IACtB;IACH;;IAED;IACAxB,mBAAGC,IAAH,CAAQ,KAAKsK,MAAb,EAAqB/I,OAArB,EAA8B,OAA9B,EAAuC,YAAM;IACzC;IACA,wBAAI,OAAK+I,MAAL,CAAYW,MAAZ,CAAmBwS,YAAnB,IAAmC,OAAKnT,MAAL,CAAYZ,KAA/C,IAAwD,CAAC,OAAKY,MAAL,CAAYG,MAAzE,EAAiF;IAC7E;IACH;;IAED,wBAAI,OAAKH,MAAL,CAAYG,MAAhB,EAAwB;IACpB,+BAAKH,MAAL,CAAYO,IAAZ;IACH,qBAFD,MAEO,IAAI,OAAKP,MAAL,CAAY4a,KAAhB,EAAuB;IAC1B,+BAAK5a,MAAL,CAAYmH,OAAZ;IACA,+BAAKnH,MAAL,CAAYO,IAAZ;IACH,qBAHM,MAGA;IACH,+BAAKP,MAAL,CAAYkH,KAAZ;IACH;IACJ,iBAdD;IAeH;;IAED;IACA,gBAAI,KAAKlH,MAAL,CAAYzL,SAAZ,CAAsB8J,EAAtB,IAA4B,KAAK2B,MAAL,CAAYW,MAAZ,CAAmB0S,kBAAnD,EAAuE;IACnE5d,mBAAGC,IAAH,CACI,KAAKsK,MADT,EAEI,KAAKA,MAAL,CAAYnJ,QAAZ,CAAqBI,OAFzB,EAGI,aAHJ,EAII,iBAAS;IACLhD,0BAAMqI,cAAN;IACH,iBANL,EAOI,KAPJ;IASH;;IAED;IACA7G,eAAGC,IAAH,CAAQ,KAAKsK,MAAb,EAAqB,KAAKA,MAAL,CAAYjB,KAAjC,EAAwC,cAAxC,EAAwD,YAAM;IAC1D;IACA,uBAAKiB,MAAL,CAAY8D,OAAZ,CAAoB7D,GAApB,CAAwB,EAAE4H,QAAQ,OAAK7H,MAAL,CAAY6H,MAAtB,EAA8ByD,OAAO,OAAKtL,MAAL,CAAYsL,KAAjD,EAAxB;IACH,aAHD;;IAKA;IACA7V,eAAGC,IAAH,CAAQ,KAAKsK,MAAb,EAAqB,KAAKA,MAAL,CAAYjB,KAAjC,EAAwC,YAAxC,EAAsD,YAAM;IACxD;IACAyH,yBAASkH,aAAT,CAAuBhY,IAAvB,CAA4B,OAAKsK,MAAjC,EAAyC,OAAzC;;IAEA;IACA,uBAAKA,MAAL,CAAY8D,OAAZ,CAAoB7D,GAApB,CAAwB,EAAEqO,OAAO,OAAKtO,MAAL,CAAYsO,KAArB,EAAxB;IACH,aAND;;IAQA;IACA7Y,eAAGC,IAAH,CAAQ,KAAKsK,MAAb,EAAqB,KAAKA,MAAL,CAAYjB,KAAjC,EAAwC,kBAAxC,EAA4D,iBAAS;IACjE;IACA,uBAAKiB,MAAL,CAAY8D,OAAZ,CAAoB7D,GAApB,CAAwB,EAAEQ,SAASxM,MAAMiC,MAAN,CAAauK,OAAxB,EAAxB;IACH,aAHD;;IAKA;IACAhL,eAAGC,IAAH,CAAQ,KAAKsK,MAAb,EAAqB,KAAKA,MAAL,CAAYjB,KAAjC,EAAwC,eAAxC,EAAyD,iBAAS;IAC9D;IACAyH,yBAASkH,aAAT,CAAuBhY,IAAvB,CAA4B,OAAKsK,MAAjC,EAAyC,SAAzC,EAAoD,IAApD,EAA0D/L,MAAMiC,MAAN,CAAauK,OAAvE;IACH,aAHD;;IAKA;IACA;IACA,gBAAMoa,cAAc,KAAK7a,MAAL,CAAYW,MAAZ,CAAmBxL,MAAnB,CAA0B2lB,MAA1B,CAAiC,CAAC,OAAD,EAAU,SAAV,CAAjC,EAAuD3R,IAAvD,CAA4D,GAA5D,CAApB;IACA1T,eAAGC,IAAH,CAAQ,KAAKsK,MAAb,EAAqB,KAAKA,MAAL,CAAYjB,KAAjC,EAAwC8b,WAAxC,EAAqD,iBAAS;IAAA,oCACpC5mB,KADoC,CACpDiC,MADoD;IAAA,oBACpDA,MADoD,iCAC3C,EAD2C;;IAG1D;;IACA,oBAAIjC,MAAMuB,IAAN,KAAe,OAAnB,EAA4B;IACxBU,6BAAS,OAAK8J,MAAL,CAAYjB,KAAZ,CAAkBqJ,KAA3B;IACH;;IAEDpS,6BAAaN,IAAb,CAAkB,OAAKsK,MAAvB,EAA+B,OAAKA,MAAL,CAAYnJ,QAAZ,CAAqBC,SAApD,EAA+D7C,MAAMuB,IAArE,EAA2E,IAA3E,EAAiFU,MAAjF;IACH,aATD;IAUH;;IAED;;;;0CACW;IAAA;;IACP;IACA,gBAAM6kB,aAAa9d,QAAQC,IAAR,GAAe,QAAf,GAA0B,OAA7C;;IAEA;IACA,gBAAM8d,QAAQ,SAARA,KAAQ,CAAC/mB,KAAD,EAAQgnB,cAAR,EAAwBC,gBAAxB,EAA6C;IACvD,oBAAMC,gBAAgB,OAAKnb,MAAL,CAAYW,MAAZ,CAAmBsU,SAAnB,CAA6BiG,gBAA7B,CAAtB;IACA,oBAAME,mBAAmBlmB,GAAGvB,QAAH,CAAYwnB,aAAZ,CAAzB;IACA,oBAAIE,WAAW,IAAf;;IAEA;IACA,oBAAID,gBAAJ,EAAsB;IAClBC,+BAAWF,cAAczlB,IAAd,CAAmB,OAAKsK,MAAxB,EAAgC/L,KAAhC,CAAX;IACH;;IAED;IACA,oBAAIonB,YAAYnmB,GAAGvB,QAAH,CAAYsnB,cAAZ,CAAhB,EAA6C;IACzCA,mCAAevlB,IAAf,CAAoB,OAAKsK,MAAzB,EAAiC/L,KAAjC;IACH;IACJ,aAdD;;IAgBA;IACA,gBAAMma,OAAO,SAAPA,IAAO,CAACra,OAAD,EAAUyB,IAAV,EAAgBylB,cAAhB,EAAgCC,gBAAhC,EAAqE;IAAA,oBAAnBlmB,OAAmB,uEAAT,IAAS;;IAC9E,oBAAMmmB,gBAAgB,OAAKnb,MAAL,CAAYW,MAAZ,CAAmBsU,SAAnB,CAA6BiG,gBAA7B,CAAtB;IACA,oBAAME,mBAAmBlmB,GAAGvB,QAAH,CAAYwnB,aAAZ,CAAzB;;IAEA1lB,mBAAGC,IAAH,CACI,OAAKsK,MADT,EAEIjM,OAFJ,EAGIyB,IAHJ,EAII;IAAA,2BAASwlB,MAAM/mB,KAAN,EAAagnB,cAAb,EAA6BC,gBAA7B,CAAT;IAAA,iBAJJ,EAKIlmB,WAAW,CAAComB,gBALhB;IAOH,aAXD;;IAaA;IACA,gBAAI,KAAKpb,MAAL,CAAYnJ,QAAZ,CAAqBoQ,OAArB,CAA6B1G,IAAjC,EAAuC;IACnC3O,sBAAMuF,IAAN,CAAW,KAAK6I,MAAL,CAAYnJ,QAAZ,CAAqBoQ,OAArB,CAA6B1G,IAAxC,EAA8ClL,OAA9C,CAAsD,kBAAU;IAC5D+Y,yBAAK3E,MAAL,EAAa,OAAb,EAAsB,OAAKzJ,MAAL,CAAYka,UAAlC,EAA8C,MAA9C;IACH,iBAFD;IAGH;;IAED;IACA9L,iBAAK,KAAKpO,MAAL,CAAYnJ,QAAZ,CAAqBoQ,OAArB,CAA6BE,OAAlC,EAA2C,OAA3C,EAAoD,KAAKnH,MAAL,CAAYmH,OAAhE,EAAyE,SAAzE;;IAEA;IACAiH,iBAAK,KAAKpO,MAAL,CAAYnJ,QAAZ,CAAqBoQ,OAArB,CAA6BG,MAAlC,EAA0C,OAA1C,EAAmD,KAAKpH,MAAL,CAAYoH,MAA/D,EAAuE,QAAvE;;IAEA;IACAgH,iBAAK,KAAKpO,MAAL,CAAYnJ,QAAZ,CAAqBoQ,OAArB,CAA6BI,WAAlC,EAA+C,OAA/C,EAAwD,KAAKrH,MAAL,CAAYqa,OAApE,EAA6E,aAA7E;;IAEA;IACAjM,iBACI,KAAKpO,MAAL,CAAYnJ,QAAZ,CAAqBoQ,OAArB,CAA6BK,IADjC,EAEI,OAFJ,EAGI,YAAM;IACF,uBAAKtH,MAAL,CAAYsL,KAAZ,GAAoB,CAAC,OAAKtL,MAAL,CAAYsL,KAAjC;IACH,aALL,EAMI,MANJ;;IASA;IACA8C,iBAAK,KAAKpO,MAAL,CAAYnJ,QAAZ,CAAqBoQ,OAArB,CAA6BO,QAAlC,EAA4C,OAA5C,EAAqD;IAAA,uBAAM,OAAKxH,MAAL,CAAYsa,cAAZ,EAAN;IAAA,aAArD;;IAEA;IACAlM,iBACI,KAAKpO,MAAL,CAAYnJ,QAAZ,CAAqBoQ,OAArB,CAA6BQ,UADjC,EAEI,OAFJ,EAGI,YAAM;IACF,uBAAKzH,MAAL,CAAYyH,UAAZ,CAAuB1S,MAAvB;IACH,aALL,EAMI,YANJ;;IASA;IACAqZ,iBACI,KAAKpO,MAAL,CAAYnJ,QAAZ,CAAqBoQ,OAArB,CAA6B1I,GADjC,EAEI,OAFJ,EAGI,YAAM;IACF,uBAAKyB,MAAL,CAAYzB,GAAZ,GAAkB,QAAlB;IACH,aALL,EAMI,KANJ;;IASA;IACA6P,iBAAK,KAAKpO,MAAL,CAAYnJ,QAAZ,CAAqBoQ,OAArB,CAA6BxI,OAAlC,EAA2C,OAA3C,EAAoD,KAAKuB,MAAL,CAAYvB,OAAhE,EAAyE,SAAzE;;IAEA;IACA2P,iBAAK,KAAKpO,MAAL,CAAYnJ,QAAZ,CAAqBoQ,OAArB,CAA6BM,QAAlC,EAA4C,OAA5C,EAAqD,iBAAS;IAC1Df,yBAASmI,UAAT,CAAoBjZ,IAApB,CAAyB,OAAKsK,MAA9B,EAAsC/L,KAAtC;IACH,aAFD;;IAIA;IACAma,iBAAK,KAAKpO,MAAL,CAAYnJ,QAAZ,CAAqB0Q,QAArB,CAA8BqH,IAAnC,EAAyC,OAAzC,EAAkD,iBAAS;IACvD3a,sBAAM+a,eAAN;;IAEA;IACA,oBAAMsM,cAAc,SAAdA,WAAc,GAAM;IACtB,wBAAMnhB,wBAAsB,OAAK6F,MAAL,CAAY7F,EAAlC,UAAN;IACAqM,6BAASgJ,OAAT,CAAiB9Z,IAAjB,CAAsB,OAAKsK,MAA3B,EAAmC7F,EAAnC;IACH,iBAHD;;IAKA;IACA,oBAAIY,QAAQ9G,MAAMyE,MAAd,EAAsB,OAAKsH,MAAL,CAAYW,MAAZ,CAAmBqG,SAAnB,CAA6BW,MAA7B,CAAoCuG,QAA1D,CAAJ,EAAyE;IACrE8M,0BACI/mB,KADJ,EAEI,YAAM;IACF,+BAAK+L,MAAL,CAAY4N,YAAZ,GAA2Bxc,OAAO6C,MAAMyE,MAAN,CAAaR,KAApB,CAA3B;IACAojB;IACH,qBALL,EAMI,UANJ;IAQH,iBATD,MASO,IAAIvgB,QAAQ9G,MAAMyE,MAAd,EAAsB,OAAKsH,MAAL,CAAYW,MAAZ,CAAmBqG,SAAnB,CAA6BW,MAA7B,CAAoClH,OAA1D,CAAJ,EAAwE;IAC3Eua,0BACI/mB,KADJ,EAEI,YAAM;IACF,+BAAK+L,MAAL,CAAYS,OAAZ,GAAsBxM,MAAMyE,MAAN,CAAaR,KAAnC;IACAojB;IACH,qBALL,EAMI,SANJ;IAQH,iBATM,MASA,IAAIvgB,QAAQ9G,MAAMyE,MAAd,EAAsB,OAAKsH,MAAL,CAAYW,MAAZ,CAAmBqG,SAAnB,CAA6BW,MAA7B,CAAoC2G,KAA1D,CAAJ,EAAsE;IACzE0M,0BACI/mB,KADJ,EAEI,YAAM;IACF,+BAAK+L,MAAL,CAAYsO,KAAZ,GAAoBhC,WAAWrY,MAAMyE,MAAN,CAAaR,KAAxB,CAApB;IACAojB;IACH,qBALL,EAMI,OANJ;IAQH,iBATM,MASA;IACH,wBAAM5M,MAAMza,MAAMyE,MAAlB;IACA8N,6BAASgJ,OAAT,CAAiB9Z,IAAjB,CAAsB,OAAKsK,MAA3B,EAAmC0O,IAAI9O,YAAJ,CAAiB,eAAjB,CAAnC;IACH;IACJ,aAzCD;;IA2CA;IACAwO,iBAAK,KAAKpO,MAAL,CAAYnJ,QAAZ,CAAqB8Q,MAArB,CAA4BC,IAAjC,EAAuC,qBAAvC,EAA8D,iBAAS;IACnE,oBAAMoE,aAAa,OAAKhM,MAAL,CAAYnJ,QAAZ,CAAqB6Q,QAArB,CAA8BuE,qBAA9B,EAAnB;IACA,oBAAML,UAAU,MAAMI,WAAWG,KAAjB,IAA0BlY,MAAMmY,KAAN,GAAcJ,WAAWK,IAAnD,CAAhB;IACApY,sBAAMsnB,aAAN,CAAoBnjB,YAApB,CAAiC,YAAjC,EAA+CwT,OAA/C;IACH,aAJD;;IAMA;IACAwC,iBAAK,KAAKpO,MAAL,CAAYnJ,QAAZ,CAAqB8Q,MAArB,CAA4BC,IAAjC,EAAuC,qDAAvC,EAA8F,iBAAS;IACnG,oBAAMA,OAAO3T,MAAMsnB,aAAnB;;IAEA,oBAAM5B,OAAO1lB,MAAMkI,OAAN,GAAgBlI,MAAMkI,OAAtB,GAAgClI,MAAM2lB,KAAnD;IACA,oBAAM4B,YAAYvnB,MAAMuB,IAAxB;;IAEA,oBAAI,CAACgmB,cAAc,SAAd,IAA2BA,cAAc,OAA1C,KAAuD7B,SAAS,EAAT,IAAeA,SAAS,EAAnF,EAAwF;IACpF;IACH;IACD;IACA,oBAAMpZ,OAAOqH,KAAKrN,YAAL,CAAkB,gBAAlB,CAAb;;IAEA;IACA,oBAAMkhB,OAAO,CAAC,SAAD,EAAY,UAAZ,EAAwB,OAAxB,EAAiCtgB,QAAjC,CAA0ClH,MAAMuB,IAAhD,CAAb;;IAEA;IACA,oBAAI+K,QAAQkb,IAAZ,EAAkB;IACd7T,yBAAKpN,eAAL,CAAqB,gBAArB;IACA,2BAAKwF,MAAL,CAAYO,IAAZ;IACH,iBAHD,MAGO,IAAI,CAACkb,IAAD,IAAS,OAAKzb,MAAL,CAAYuV,OAAzB,EAAkC;IACrC3N,yBAAKxP,YAAL,CAAkB,gBAAlB,EAAoC,EAApC;IACA,2BAAK4H,MAAL,CAAYkH,KAAZ;IACH;IACJ,aAvBD;;IAyBA;IACAkH,iBACI,KAAKpO,MAAL,CAAYnJ,QAAZ,CAAqB8Q,MAArB,CAA4BC,IADhC,EAEImT,UAFJ,EAGI,iBAAS;IACL,oBAAMnT,OAAO3T,MAAMsnB,aAAnB;;IAEA;IACA,oBAAIG,SAAS9T,KAAKhI,YAAL,CAAkB,YAAlB,CAAb;;IAEA,oBAAI1K,GAAGb,KAAH,CAASqnB,MAAT,CAAJ,EAAsB;IAClBA,6BAAS9T,KAAK1P,KAAd;IACH;;IAED0P,qBAAKpN,eAAL,CAAqB,YAArB;;IAEA,uBAAKwF,MAAL,CAAYE,WAAZ,GAA0Bwb,SAAS9T,KAAK1F,GAAd,GAAoB,OAAKlC,MAAL,CAAYgI,QAA1D;IACH,aAhBL,EAiBI,MAjBJ;;IAoBA;IACA;IACA,gBAAI,KAAKhI,MAAL,CAAYW,MAAZ,CAAmBqS,YAAnB,IAAmC,CAAC9d,GAAGnB,OAAH,CAAW,KAAKiM,MAAL,CAAYnJ,QAAZ,CAAqBiR,OAArB,CAA6BE,QAAxC,CAAxC,EAA2F;IACvFoG,qBAAK,KAAKpO,MAAL,CAAYnJ,QAAZ,CAAqBiR,OAArB,CAA6B5H,WAAlC,EAA+C,OAA/C,EAAwD,YAAM;IAC1D;IACA,wBAAI,OAAKF,MAAL,CAAYE,WAAZ,KAA4B,CAAhC,EAAmC;IAC/B;IACH;;IAED,2BAAKF,MAAL,CAAYW,MAAZ,CAAmB8L,UAAnB,GAAgC,CAAC,OAAKzM,MAAL,CAAYW,MAAZ,CAAmB8L,UAApD;;IAEAjG,6BAAS+F,UAAT,CAAoB7W,IAApB,CAAyB,OAAKsK,MAA9B;IACH,iBATD;IAUH;;IAED;IACAoO,iBACI,KAAKpO,MAAL,CAAYnJ,QAAZ,CAAqB8Q,MAArB,CAA4BE,MADhC,EAEIkT,UAFJ,EAGI,iBAAS;IACL,uBAAK/a,MAAL,CAAY6H,MAAZ,GAAqB5T,MAAMyE,MAAN,CAAaR,KAAlC;IACH,aALL,EAMI,QANJ;;IASA;IACA,gBAAI+E,QAAQG,QAAZ,EAAsB;IAClBxL,sBAAMuF,IAAN,CAAWoE,YAAY7F,IAAZ,CAAiB,KAAKsK,MAAtB,EAA8B,qBAA9B,CAAX,EAAiE3K,OAAjE,CAAyE,mBAAW;IAChF+Y,yBAAKra,OAAL,EAAc,OAAd,EAAuB;IAAA,+BAASyS,SAAS6D,eAAT,CAAyB3U,IAAzB,CAA8B,OAAKsK,MAAnC,EAA2C/L,MAAMyE,MAAjD,CAAT;IAAA,qBAAvB;IACH,iBAFD;IAGH;;IAED;IACA0V,iBAAK,KAAKpO,MAAL,CAAYnJ,QAAZ,CAAqB6Q,QAA1B,EAAoC,iCAApC,EAAuE;IAAA,uBACnElB,SAASsF,iBAAT,CAA2BpW,IAA3B,CAAgC,OAAKsK,MAArC,EAA6C/L,KAA7C,CADmE;IAAA,aAAvE;;IAIA;IACAma,iBAAK,KAAKpO,MAAL,CAAYnJ,QAAZ,CAAqB2P,QAA1B,EAAoC,uBAApC,EAA6D,iBAAS;IAClE,uBAAKxG,MAAL,CAAYnJ,QAAZ,CAAqB2P,QAArB,CAA8BkP,KAA9B,GAAsC,CAAC,OAAK1V,MAAL,CAAYZ,KAAb,IAAsBnL,MAAMuB,IAAN,KAAe,YAA3E;IACH,aAFD;;IAIA;IACA4Y,iBAAK,KAAKpO,MAAL,CAAYnJ,QAAZ,CAAqB2P,QAA1B,EAAoC,mDAApC,EAAyF,iBAAS;IAC9F,uBAAKxG,MAAL,CAAYnJ,QAAZ,CAAqB2P,QAArB,CAA8BwD,OAA9B,GAAwC,CAAC,WAAD,EAAc,YAAd,EAA4B7O,QAA5B,CAAqClH,MAAMuB,IAA3C,CAAxC;IACH,aAFD;;IAIA;IACA4Y,iBAAK,KAAKpO,MAAL,CAAYnJ,QAAZ,CAAqB2P,QAA1B,EAAoC,kBAApC,EAAwD,iBAAS;IAAA,8BACxB,OAAKxG,MADmB;IAAA,oBACrDW,MADqD,WACrDA,MADqD;IAAA,oBAC7C9J,QAD6C,WAC7CA,QAD6C;IAAA,oBACnCyiB,MADmC,WACnCA,MADmC;;IAG7D;;IACA7e,4BAAY5D,SAAS2P,QAArB,EAA+B7F,OAAOuH,UAAP,CAAkB2N,YAAjD,EAA+D5hB,MAAMuB,IAAN,KAAe,SAA9E;;IAEA;IACA6I,mBAAG8a,cAAH,CAAkBzjB,IAAlB,CAAuB,OAAKsK,MAA5B,EAAoC/L,MAAMuB,IAAN,KAAe,SAAnD;;IAEA;IACA,oBAAIvB,MAAMuB,IAAN,KAAe,SAAnB,EAA8B;IAC1B;IACAmB,+BAAW,YAAM;IACb8D,oCAAY5D,SAAS2P,QAArB,EAA+B7F,OAAOuH,UAAP,CAAkB2N,YAAjD,EAA+D,KAA/D;IACH,qBAFD,EAEG,CAFH;;IAIA;IACA,wBAAM0E,QAAQ,OAAKnb,KAAL,GAAa,IAAb,GAAoB,IAAlC;;IAEA;IACAia,iCAAaC,OAAO9S,QAApB;IACA;IACA8S,2BAAO9S,QAAP,GAAkB7P,WAAW;IAAA,+BAAM0H,GAAG8a,cAAH,CAAkBzjB,IAAlB,CAAuB,OAAKsK,MAA5B,EAAoC,KAApC,CAAN;IAAA,qBAAX,EAA6Dua,KAA7D,CAAlB;IACH;IACJ,aAxBD;;IA0BA;IACAnM,iBACI,KAAKpO,MAAL,CAAYnJ,QAAZ,CAAqB8Q,MAArB,CAA4BE,MADhC,EAEI,OAFJ,EAGI,iBAAS;IACL;IACA;IACA,oBAAMzB,WAAWnS,MAAM0nB,iCAAvB;;IAEA;;IALK,2BAMU,CAAC1nB,MAAM2nB,MAAP,EAAe,CAAC3nB,MAAM4nB,MAAtB,EAA8B/b,GAA9B,CAAkC;IAAA,2BAAUsG,WAAW,CAAClO,KAAZ,GAAoBA,KAA9B;IAAA,iBAAlC,CANV;IAAA;IAAA,oBAMEwe,CANF;IAAA,oBAMKE,CANL;;IAQL;;;IACA,oBAAMkF,YAAYpa,KAAKqa,IAAL,CAAUra,KAAKiC,GAAL,CAAS+S,CAAT,IAAchV,KAAKiC,GAAL,CAASiT,CAAT,CAAd,GAA4BF,CAA5B,GAAgCE,CAA1C,CAAlB;;IAEA;IACA,uBAAK5W,MAAL,CAAYma,cAAZ,CAA2B2B,YAAY,EAAvC;;IAEA;IAdK,oBAeGjU,MAfH,GAec,OAAK7H,MAAL,CAAYjB,KAf1B,CAeG8I,MAfH;;IAgBL,oBAAKiU,cAAc,CAAd,IAAmBjU,SAAS,CAA7B,IAAoCiU,cAAc,CAAC,CAAf,IAAoBjU,SAAS,CAArE,EAAyE;IACrE5T,0BAAMqI,cAAN;IACH;IACJ,aAtBL,EAuBI,QAvBJ,EAwBI,KAxBJ;IA0BH;;;;;;;;;;;;IChrBL,CAAC,SAAS,IAAI,EAAE,OAAO,EAAE;MACvB,IAAI,OAAO0f,SAAM,KAAK,UAAU,IAAIA,SAAM,CAAC,GAAG,EAAE;QAC9CA,SAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;OACrB,MAAM,AAAiC;QACtC,cAAc,GAAG,OAAO,EAAE,CAAC;OAC5B,AAEA;KACF,CAACC,cAAI,EAAE,WAAW;;;;;;IAMnB,IAAI,OAAO,GAAG,WAAW,EAAE;QACvB,aAAa,GAAG,EAAE;QAClB,iBAAiB,GAAG,EAAE;QACtB,mBAAmB,GAAG,EAAE,CAAC;;;;;;;;IAQ7B,SAAS,SAAS,CAAC,SAAS,EAAE,UAAU,EAAE;;MAExC,SAAS,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC;;MAErD,IAAI,YAAY,GAAG,EAAE;UACjB,CAAC,GAAG,SAAS,CAAC,MAAM;UACpB,UAAU,GAAG,CAAC;UACd,EAAE;UACF,QAAQ;UACR,CAAC;UACD,CAAC,CAAC;;;MAGN,EAAE,GAAG,UAAU,QAAQ,EAAE,aAAa,EAAE;QACtC,IAAI,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;QAEtD,UAAU,EAAE,CAAC;QACb,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;OAC3C,CAAC;;;MAGF,OAAO,CAAC,EAAE,EAAE;QACV,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;;;QAGxB,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,CAAC,EAAE;UACL,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;UAChB,SAAS;SACV;;;QAGD,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;OACZ;KACF;;;;;;;;IAQD,SAAS,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE;;MAExC,IAAI,CAAC,QAAQ,EAAE,OAAO;;MAEtB,IAAI,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;;;MAGtC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC;;;MAG5C,IAAI,CAAC,CAAC,EAAE,OAAO;;;MAGf,OAAO,CAAC,CAAC,MAAM,EAAE;QACf,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC9B,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;OAChB;KACF;;;;;;;;IAQD,SAAS,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE;;MAE5C,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;;;MAGtC,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,EAAE,YAAY,CAAC,CAAC;WAC1D,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE,IAAI,CAAC,CAAC;KACtC;;;;;;;;IAQD,SAAS,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE;MAClD,IAAI,GAAG,GAAG,QAAQ;UACd,KAAK,GAAG,IAAI,CAAC,KAAK;UAClB,QAAQ,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC;UACrC,gBAAgB,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO;UACzC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;UAC9C,KAAK;UACL,CAAC,CAAC;;MAEN,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC;;MAEzB,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC/B,KAAK,GAAG,IAAI,CAAC;;;QAGb,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC;QACrB,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC;OACvB,MAAM,IAAI,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;;QAEpD,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC;OACtB,MAAM;;QAEL,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC;QACb,CAAC,CAAC,KAAK,GAAG,KAAK,KAAK,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC;OAC9C;;MAED,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,YAAY,GAAG,UAAU,EAAE,EAAE;QACpD,IAAI,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;;;QAIxB,IAAI,KAAK,IAAI,WAAW,IAAI,CAAC,EAAE;UAC7B,IAAI;YACF,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC;WAC3C,CAAC,OAAO,CAAC,EAAE;;;YAGV,MAAM,GAAG,GAAG,CAAC;WACd;SACF;;;QAGD,IAAI,MAAM,IAAI,GAAG,EAAE;;UAEjB,QAAQ,IAAI,CAAC,CAAC;;;UAGd,IAAI,QAAQ,GAAG,QAAQ,EAAE;YACvB,OAAO,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;WACnD;SACF;;;QAGD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC;OAC/C,CAAC;;;MAGF,IAAI,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;KAClE;;;;;;;;IAQD,SAAS,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;;MAE1C,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;;MAErC,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM;UACzB,CAAC,GAAG,UAAU;UACd,aAAa,GAAG,EAAE;UAClB,EAAE;UACF,CAAC,CAAC;;;MAGN,EAAE,GAAG,SAAS,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE;;QAE5C,IAAI,MAAM,IAAI,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;;;QAI5C,IAAI,MAAM,IAAI,GAAG,EAAE;UACjB,IAAI,gBAAgB,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;eAC1C,OAAO;SACb;;QAED,UAAU,EAAE,CAAC;QACb,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;OAC5C,CAAC;;;MAGF,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;KACpD;;;;;;;;;;IAUD,SAAS,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;MACjC,IAAI,QAAQ;UACR,IAAI,CAAC;;;MAGT,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;;;MAGvC,IAAI,GAAG,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;;;MAGtC,IAAI,QAAQ,EAAE;QACZ,IAAI,QAAQ,IAAI,aAAa,EAAE;UAC7B,MAAM,QAAQ,CAAC;SAChB,MAAM;UACL,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;SAChC;OACF;;;MAGD,SAAS,CAAC,KAAK,EAAE,UAAU,aAAa,EAAE;;QAExC,gBAAgB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;;;QAGtC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;OAClC,EAAE,IAAI,CAAC,CAAC;KACV;;;;;;;;IAQD,MAAM,CAAC,KAAK,GAAG,SAAS,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE;;MAExC,SAAS,CAAC,IAAI,EAAE,UAAU,YAAY,EAAE;;QAEtC,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;OACtC,CAAC,CAAC;;MAEH,OAAO,MAAM,CAAC;KACf,CAAC;;;;;;;IAOF,MAAM,CAAC,IAAI,GAAG,SAAS,IAAI,CAAC,QAAQ,EAAE;MACpC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;KACvB,CAAC;;;;;;IAMF,MAAM,CAAC,KAAK,GAAG,SAAS,KAAK,GAAG;MAC9B,aAAa,GAAG,EAAE,CAAC;MACnB,iBAAiB,GAAG,EAAE,CAAC;MACvB,mBAAmB,GAAG,EAAE,CAAC;KAC1B,CAAC;;;;;;;IAOF,MAAM,CAAC,SAAS,GAAG,SAAS,SAAS,CAAC,QAAQ,EAAE;MAC9C,OAAO,QAAQ,IAAI,aAAa,CAAC;KAClC,CAAC;;;;IAIF,OAAO,MAAM,CAAC;;KAEb,CAAC,EAAE;;;ICpSJ;AACA;AAKA,IAAe,SAASC,UAAT,CAAoB9nB,GAApB,EAAyB;IACpC,WAAO,IAAIsC,OAAJ,CAAY,UAACE,OAAD,EAAU2N,MAAV,EAAqB;IACpC4X,mBAAO/nB,GAAP,EAAY;IACRgoB,qBAASxlB,OADD;IAERwR,mBAAO7D;IAFC,SAAZ;IAIH,KALM,CAAP;IAMH;;ICbD;AACA;IAcA;IACA,SAAS8X,OAAT,CAAiBjoB,GAAjB,EAAsB;IAClB,QAAIc,GAAGb,KAAH,CAASD,GAAT,CAAJ,EAAmB;IACf,eAAO,IAAP;IACH;;IAED,QAAIc,GAAGzB,MAAH,CAAUrC,OAAOgD,GAAP,CAAV,CAAJ,EAA4B;IACxB,eAAOA,GAAP;IACH;;IAED,QAAMkoB,QAAQ,iCAAd;IACA,WAAOloB,IAAI6G,KAAJ,CAAUqhB,KAAV,IAAmBja,OAAOka,EAA1B,GAA+BnoB,GAAtC;IACH;;IAED;IACA,SAASooB,cAAT,CAAwBrQ,KAAxB,EAA+BmD,MAA/B,EAAuC;IACnC,QAAMmN,WAAW,SAAXA,QAAW,CAACC,CAAD,EAAIC,CAAJ;IAAA,eAAWA,MAAM,CAAN,GAAUD,CAAV,GAAcD,SAASE,CAAT,EAAYD,IAAIC,CAAhB,CAAzB;IAAA,KAAjB;IACA,QAAM1J,QAAQwJ,SAAStQ,KAAT,EAAgBmD,MAAhB,CAAd;IACA,WAAUnD,QAAQ8G,KAAlB,SAA2B3D,SAAS2D,KAApC;IACH;;IAED;IACA,SAAS2J,mBAAT,CAA6Brc,IAA7B,EAAmC;IAC/B,QAAIA,QAAQ,CAAC,KAAKyR,KAAL,CAAW6K,SAAxB,EAAmC;IAC/B,aAAK7K,KAAL,CAAW6K,SAAX,GAAuB,IAAvB;IACH;IACD,QAAI,KAAK9d,KAAL,CAAWoB,MAAX,KAAsBI,IAA1B,EAAgC;IAC5B,aAAKxB,KAAL,CAAWoB,MAAX,GAAoB,CAACI,IAArB;IACAvK,qBAAaN,IAAb,CAAkB,IAAlB,EAAwB,KAAKqJ,KAA7B,EAAoCwB,OAAO,MAAP,GAAgB,OAApD;IACH;IACJ;;IAED,IAAMqU,QAAQ;IACV9D,SADU,mBACF;IAAA;;IACJ;IACArW,oBAAY,KAAK5D,QAAL,CAAcI,OAA1B,EAAmC,KAAK0J,MAAL,CAAYuH,UAAZ,CAAuB8J,KAA1D,EAAiE,IAAjE;;IAEA;IACA4C,cAAMkI,cAAN,CAAqBpnB,IAArB,CAA0B,IAA1B;;IAEA;IACA,YAAI,CAACR,GAAG1B,MAAH,CAAUhB,OAAOuqB,KAAjB,CAAL,EAA8B;IAC1Bb,uBAAW,KAAKvb,MAAL,CAAYgU,IAAZ,CAAiBC,KAAjB,CAAuBC,GAAlC,EACK9d,IADL,CACU,YAAM;IACR6d,sBAAMne,KAAN,CAAYf,IAAZ,CAAiB,KAAjB;IACH,aAHL,EAIKkQ,KAJL,CAIW,iBAAS;IACZ,sBAAK/E,KAAL,CAAWwH,IAAX,CAAgB,0BAAhB,EAA4CD,KAA5C;IACH,aANL;IAOH,SARD,MAQO;IACHwM,kBAAMne,KAAN,CAAYf,IAAZ,CAAiB,IAAjB;IACH;IACJ,KApBS;;;IAsBV;IACA;IACAonB,kBAxBU,0BAwBKlsB,KAxBL,EAwBY;IAAA,qBACH,CAACsE,GAAG/B,MAAH,CAAUvC,KAAV,IAAmBA,KAAnB,GAA2B,KAAK+P,MAAL,CAAYsS,KAAxC,EAA+C7d,KAA/C,CAAqD,GAArD,CADG;IAAA;IAAA,YACXshB,CADW;IAAA,YACRE,CADQ;;IAElB,YAAMoG,UAAU,MAAMtG,CAAN,GAAUE,CAA1B;IACA,aAAK/f,QAAL,CAAcI,OAAd,CAAsB4F,KAAtB,CAA4BogB,aAA5B,GAA+CD,OAA/C;;IAEA,YAAI,KAAKzoB,SAAL,CAAe8J,EAAnB,EAAuB;IACnB,gBAAMiR,SAAS,GAAf;IACA,gBAAM4N,SAAS,CAAC5N,SAAS0N,OAAV,KAAsB1N,SAAS,EAA/B,CAAf;;IAEA,iBAAKvQ,KAAL,CAAWlC,KAAX,CAAiBsgB,SAAjB,oBAA4CD,MAA5C;IACH;IACJ,KAnCS;;;IAqCV;IACAzmB,SAtCU,sBAsCF;IAAA;;IACJ,YAAMuJ,SAAS,IAAf;;IAEA;IACA,YAAMxL,UAAU;IACZ8e,kBAAMtT,OAAOW,MAAP,CAAc2S,IAAd,CAAmBhC,MADb;IAEZwB,sBAAU9S,OAAO8S,QAFL;IAGZ;IACAsK,oBAAQ,KAJI;IAKZC,sBAAU,KALE;IAMZha,mBAAO,KANK;IAOZiL,mBAAO,IAPK;IAQZgP,yBAAa,CARD;IASZC,qBAAS,OATG;IAUZrf,yBAAa,CAAC,KAAKyC,MAAL,CAAY8G,UAAZ,CAAuBkM;IAVzB,SAAhB;IAYA,YAAM/C,SAASD,eAAenc,OAAf,CAAf;;IAEA;IACA,YAAImL,SAASK,OAAOjB,KAAP,CAAaa,YAAb,CAA0B,KAA1B,CAAb;;IAEA;IACA,YAAI1K,GAAGb,KAAH,CAASsL,MAAT,CAAJ,EAAsB;IAClBA,qBAASK,OAAOjB,KAAP,CAAaa,YAAb,CAA0BI,OAAOW,MAAP,CAAc5I,UAAd,CAAyBia,KAAzB,CAA+B7X,EAAzD,CAAT;IACH;;IAED,YAAMA,KAAKkiB,QAAQ1c,MAAR,CAAX;;IAEA;IACA,YAAMmV,SAASzc,cAAc,QAAd,CAAf;IACA,YAAMiI,MAAMuB,OAAO7B,OAAOW,MAAP,CAAcgU,IAAd,CAAmBC,KAAnB,CAAyBE,MAAhC,EAAwC3a,EAAxC,EAA4CyW,MAA5C,CAAZ;IACAkE,eAAO1c,YAAP,CAAoB,KAApB,EAA2BkI,GAA3B;IACAwU,eAAO1c,YAAP,CAAoB,iBAApB,EAAuC,EAAvC;IACA0c,eAAO1c,YAAP,CAAoB,mBAApB,EAAyC,EAAzC;IACA0c,eAAO1c,YAAP,CAAoB,OAApB,EAA6B,UAA7B;;IAEA;IApCI,YAqCIgd,MArCJ,GAqCepV,MArCf,CAqCIoV,MArCJ;;IAuCJ;;IACA,YAAMne,UAAUoB,cAAc,KAAd,EAAqB,EAAE+c,cAAF,EAAUlb,OAAO8F,OAAOW,MAAP,CAAcuH,UAAd,CAAyBiN,cAA1C,EAArB,CAAhB;IACAle,gBAAQW,WAAR,CAAoBkd,MAApB;IACA9U,eAAOjB,KAAP,GAAe9F,eAAehC,OAAf,EAAwB+I,OAAOjB,KAA/B,CAAf;;IAEA;IACAsF,cAAMxC,OAAO7B,OAAOW,MAAP,CAAcgU,IAAd,CAAmBC,KAAnB,CAAyBxW,GAAhC,EAAqCjE,EAArC,CAAN,EAAgD,MAAhD,EAAwDpD,IAAxD,CAA6D,oBAAY;IACrE,gBAAI7B,GAAGb,KAAH,CAASsQ,QAAT,CAAJ,EAAwB;IACpB;IACH;;IAED;IACA,gBAAMvQ,MAAM,IAAIlB,GAAJ,CAAQyR,SAAS,CAAT,EAAY6Y,eAApB,CAAZ;;IAEA;IACAppB,gBAAIqpB,QAAJ,GAAkBrpB,IAAIqpB,QAAJ,CAAaroB,KAAb,CAAmB,GAAnB,EAAwB,CAAxB,CAAlB;;IAEA;IACAiJ,eAAGwa,SAAH,CAAanjB,IAAb,CAAkBsK,MAAlB,EAA0B5L,IAAIsc,IAA9B,EAAoC9K,KAApC,CAA0C,YAAM,EAAhD;IACH,SAbD;;IAeA;IACA;IACA5F,eAAOgS,KAAP,GAAe,IAAIxf,OAAOuqB,KAAP,CAAaW,MAAjB,CAAwB5I,MAAxB,EAAgC;IAC3C/B,uBAAW/S,OAAOW,MAAP,CAAcoS,SADkB;IAE3CzH,mBAAOtL,OAAOsL;IAF6B,SAAhC,CAAf;;IAKAtL,eAAOjB,KAAP,CAAaoB,MAAb,GAAsB,IAAtB;IACAH,eAAOjB,KAAP,CAAamB,WAAb,GAA2B,CAA3B;;IAEA;IACA,YAAIF,OAAOzL,SAAP,CAAiB8J,EAArB,EAAyB;IACrB2B,mBAAOgS,KAAP,CAAa2L,gBAAb;IACH;;IAED;IACA3d,eAAOjB,KAAP,CAAawB,IAAb,GAAoB,YAAM;IACtBqc,gCAAoBlnB,IAApB,CAAyBsK,MAAzB,EAAiC,IAAjC;IACA,mBAAOA,OAAOgS,KAAP,CAAazR,IAAb,EAAP;IACH,SAHD;;IAKAP,eAAOjB,KAAP,CAAamI,KAAb,GAAqB,YAAM;IACvB0V,gCAAoBlnB,IAApB,CAAyBsK,MAAzB,EAAiC,KAAjC;IACA,mBAAOA,OAAOgS,KAAP,CAAa9K,KAAb,EAAP;IACH,SAHD;;IAKAlH,eAAOjB,KAAP,CAAa6e,IAAb,GAAoB,YAAM;IACtB5d,mBAAOkH,KAAP;IACAlH,mBAAOE,WAAP,GAAqB,CAArB;IACH,SAHD;;IAKA;IA3FI,YA4FEA,WA5FF,GA4FkBF,OAAOjB,KA5FzB,CA4FEmB,WA5FF;;IA6FJhP,eAAOuD,cAAP,CAAsBuL,OAAOjB,KAA7B,EAAoC,aAApC,EAAmD;IAC/CrK,eAD+C,oBACzC;IACF,uBAAOwL,WAAP;IACH,aAH8C;IAI/CD,eAJ+C,kBAI3CiG,IAJ2C,EAIrC;IACN;;IAEA;IAHM,oBAIE8L,KAJF,GAImChS,MAJnC,CAIEgS,KAJF;IAAA,oBAISjT,KAJT,GAImCiB,MAJnC,CAISjB,KAJT;IAAA,oBAIgBoB,MAJhB,GAImCH,MAJnC,CAIgBG,MAJhB;IAAA,oBAIwB0H,MAJxB,GAImC7H,MAJnC,CAIwB6H,MAJxB;;IAKN,oBAAMgW,eAAe1d,UAAU,CAAC6R,MAAM6K,SAAtC;;IAEA;IACA9d,sBAAM2N,OAAN,GAAgB,IAAhB;IACA1W,6BAAaN,IAAb,CAAkBsK,MAAlB,EAA0BjB,KAA1B,EAAiC,SAAjC;;IAEA;IACArI,wBAAQE,OAAR,CAAgBinB,gBAAgB7L,MAAM8L,SAAN,CAAgB,CAAhB,CAAhC;IACI;IADJ,iBAEK/mB,IAFL,CAEU;IAAA,2BAAMib,MAAM+L,cAAN,CAAqB7X,IAArB,CAAN;IAAA,iBAFV;IAGI;IAHJ,iBAIKnP,IAJL,CAIU;IAAA,2BAAM8mB,gBAAgB7L,MAAM9K,KAAN,EAAtB;IAAA,iBAJV;IAKI;IALJ,iBAMKnQ,IANL,CAMU;IAAA,2BAAM8mB,gBAAgB7L,MAAM8L,SAAN,CAAgBjW,MAAhB,CAAtB;IAAA,iBANV,EAOKjC,KAPL,CAOW,YAAM;IACT;IACH,iBATL;IAUH;IA1B8C,SAAnD;;IA6BA;IACA,YAAI0I,QAAQtO,OAAOW,MAAP,CAAc2N,KAAd,CAAoBiF,QAAhC;IACAriB,eAAOuD,cAAP,CAAsBuL,OAAOjB,KAA7B,EAAoC,cAApC,EAAoD;IAChDrK,eADgD,oBAC1C;IACF,uBAAO4Z,KAAP;IACH,aAH+C;IAIhDrO,eAJgD,kBAI5CrP,KAJ4C,EAIrC;IACPoP,uBAAOgS,KAAP,CACKgM,eADL,CACqBptB,KADrB,EAEKmG,IAFL,CAEU,YAAM;IACRuX,4BAAQ1d,KAAR;IACAoF,iCAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,YAAxC;IACH,iBALL,EAMK6G,KANL,CAMW,iBAAS;IACZ;IACA,wBAAIwC,MAAM2C,IAAN,KAAe,OAAnB,EAA4B;IACxBvE,iCAAS6H,YAAT,CAAsB3Y,IAAtB,CAA2BsK,MAA3B,EAAmC,EAAnC;IACH;IACJ,iBAXL;IAYH;IAjB+C,SAApD;;IAoBA;IAhJI,YAiJE6H,MAjJF,GAiJa7H,OAAOW,MAjJpB,CAiJEkH,MAjJF;;IAkJJ3W,eAAOuD,cAAP,CAAsBuL,OAAOjB,KAA7B,EAAoC,QAApC,EAA8C;IAC1CrK,eAD0C,oBACpC;IACF,uBAAOmT,MAAP;IACH,aAHyC;IAI1C5H,eAJ0C,kBAItCrP,KAJsC,EAI/B;IACPoP,uBAAOgS,KAAP,CAAa8L,SAAb,CAAuBltB,KAAvB,EAA8BmG,IAA9B,CAAmC,YAAM;IACrC8Q,6BAASjX,KAAT;IACAoF,iCAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,cAAxC;IACH,iBAHD;IAIH;IATyC,SAA9C;;IAYA;IA9JI,YA+JEuM,KA/JF,GA+JYtL,OAAOW,MA/JnB,CA+JE2K,KA/JF;;IAgKJpa,eAAOuD,cAAP,CAAsBuL,OAAOjB,KAA7B,EAAoC,OAApC,EAA6C;IACzCrK,eADyC,oBACnC;IACF,uBAAO4W,KAAP;IACH,aAHwC;IAIzCrL,eAJyC,kBAIrCrP,KAJqC,EAI9B;IACP,oBAAMmE,SAASG,GAAGxB,OAAH,CAAW9C,KAAX,IAAoBA,KAApB,GAA4B,KAA3C;;IAEAoP,uBAAOgS,KAAP,CAAa8L,SAAb,CAAuB/oB,SAAS,CAAT,GAAaiL,OAAOW,MAAP,CAAckH,MAAlD,EAA0D9Q,IAA1D,CAA+D,YAAM;IACjEuU,4BAAQvW,MAAR;IACAiB,iCAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,cAAxC;IACH,iBAHD;IAIH;IAXwC,SAA7C;;IAcA;IA9KI,YA+KEuU,IA/KF,GA+KWtT,OAAOW,MA/KlB,CA+KE2S,IA/KF;;IAgLJpiB,eAAOuD,cAAP,CAAsBuL,OAAOjB,KAA7B,EAAoC,MAApC,EAA4C;IACxCrK,eADwC,oBAClC;IACF,uBAAO4e,IAAP;IACH,aAHuC;IAIxCrT,eAJwC,kBAIpCrP,KAJoC,EAI7B;IACP,oBAAMmE,SAASG,GAAGxB,OAAH,CAAW9C,KAAX,IAAoBA,KAApB,GAA4BoP,OAAOW,MAAP,CAAc2S,IAAd,CAAmBhC,MAA9D;;IAEAtR,uBAAOgS,KAAP,CAAaiM,OAAb,CAAqBlpB,MAArB,EAA6BgC,IAA7B,CAAkC,YAAM;IACpCuc,2BAAOve,MAAP;IACH,iBAFD;IAGH;IAVuC,SAA5C;;IAaA;IACA,YAAImpB,mBAAJ;IACAle,eAAOgS,KAAP,CACKmM,WADL,GAEKpnB,IAFL,CAEU,iBAAS;IACXmnB,yBAAahmB,KAAb;IACH,SAJL,EAKK0N,KALL,CAKW,iBAAS;IACZ,mBAAK/E,KAAL,CAAWwH,IAAX,CAAgBD,KAAhB;IACH,SAPL;;IASAlX,eAAOuD,cAAP,CAAsBuL,OAAOjB,KAA7B,EAAoC,YAApC,EAAkD;IAC9CrK,eAD8C,oBACxC;IACF,uBAAOwpB,UAAP;IACH;IAH6C,SAAlD;;IAMA;IACAhtB,eAAOuD,cAAP,CAAsBuL,OAAOjB,KAA7B,EAAoC,OAApC,EAA6C;IACzCrK,eADyC,oBACnC;IACF,uBAAOsL,OAAOE,WAAP,KAAuBF,OAAOgI,QAArC;IACH;IAHwC,SAA7C;;IAMA;IACAtR,gBAAQ4d,GAAR,CAAY,CAACtU,OAAOgS,KAAP,CAAaoM,aAAb,EAAD,EAA+Bpe,OAAOgS,KAAP,CAAaqM,cAAb,EAA/B,CAAZ,EAA2EtnB,IAA3E,CAAgF,sBAAc;IAC1F,gBAAMkc,QAAQuJ,eAAe8B,WAAW,CAAX,CAAf,EAA8BA,WAAW,CAAX,CAA9B,CAAd;IACA1J,kBAAMkI,cAAN,CAAqBpnB,IAArB,CAA0B,MAA1B,EAAgCud,KAAhC;IACH,SAHD;;IAKA;IACAjT,eAAOgS,KAAP,CAAauM,YAAb,CAA0Bve,OAAOW,MAAP,CAAcoS,SAAxC,EAAmDhc,IAAnD,CAAwD,iBAAS;IAC7DiJ,mBAAOW,MAAP,CAAcoS,SAAd,GAA0ByL,KAA1B;IACH,SAFD;;IAIA;IACAxe,eAAOgS,KAAP,CAAayM,aAAb,GAA6B1nB,IAA7B,CAAkC,iBAAS;IACvCiJ,mBAAOW,MAAP,CAAc0C,KAAd,GAAsBA,KAAtB;IACAhF,eAAGua,QAAH,CAAYljB,IAAZ,CAAiB,MAAjB;IACH,SAHD;;IAKA;IACAsK,eAAOgS,KAAP,CAAa0M,cAAb,GAA8B3nB,IAA9B,CAAmC,iBAAS;IACxCmJ,0BAAchI,KAAd;IACAlC,yBAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,YAAxC;IACH,SAHD;;IAKA;IACAiB,eAAOgS,KAAP,CAAa2M,WAAb,GAA2B5nB,IAA3B,CAAgC,iBAAS;IACrCiJ,mBAAOjB,KAAP,CAAaiJ,QAAb,GAAwB9P,KAAxB;IACAlC,yBAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,gBAAxC;IACH,SAHD;;IAKA;IACAiB,eAAOgS,KAAP,CAAa4M,aAAb,GAA6B7nB,IAA7B,CAAkC,kBAAU;IACxCiJ,mBAAOjB,KAAP,CAAaG,UAAb,GAA0B6O,MAA1B;IACAvG,qBAASsJ,KAAT,CAAepb,IAAf,CAAoBsK,MAApB;IACH,SAHD;;IAKAA,eAAOgS,KAAP,CAAavc,EAAb,CAAgB,WAAhB,EAA6B,gBAAmB;IAAA,iCAAhB8c,IAAgB;IAAA,gBAAhBA,IAAgB,6BAAT,EAAS;;IAC5C,gBAAMsM,eAAetM,KAAKzS,GAAL,CAAS;IAAA,uBAAO+C,UAAU3O,IAAIoE,IAAd,CAAP;IAAA,aAAT,CAArB;IACAkP,qBAASoK,UAAT,CAAoBlc,IAApB,CAAyBsK,MAAzB,EAAiC6e,YAAjC;IACH,SAHD;;IAKA7e,eAAOgS,KAAP,CAAavc,EAAb,CAAgB,QAAhB,EAA0B,YAAM;IAC5B;IACAuK,mBAAOgS,KAAP,CAAa8M,SAAb,GAAyB/nB,IAAzB,CAA8B,kBAAU;IACpC6lB,oCAAoBlnB,IAApB,CAAyBsK,MAAzB,EAAiC,CAACG,MAAlC;IACA,oBAAI,CAACA,MAAL,EAAa;IACTnK,iCAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,SAAxC;IACH;IACJ,aALD;;IAOA,gBAAI7J,GAAGnB,OAAH,CAAWiM,OAAOgS,KAAP,CAAaje,OAAxB,KAAoCiM,OAAOzL,SAAP,CAAiB8J,EAAzD,EAA6D;IACzD,oBAAM0gB,QAAQ/e,OAAOgS,KAAP,CAAaje,OAA3B;;IAEA;IACA;IACAgrB,sBAAM3mB,YAAN,CAAmB,UAAnB,EAA+B,CAAC,CAAhC;IACH;IACJ,SAhBD;;IAkBA4H,eAAOgS,KAAP,CAAavc,EAAb,CAAgB,MAAhB,EAAwB,YAAM;IAC1BmnB,gCAAoBlnB,IAApB,CAAyBsK,MAAzB,EAAiC,IAAjC;IACAhK,yBAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,SAAxC;IACH,SAHD;;IAKAiB,eAAOgS,KAAP,CAAavc,EAAb,CAAgB,OAAhB,EAAyB,YAAM;IAC3BmnB,gCAAoBlnB,IAApB,CAAyBsK,MAAzB,EAAiC,KAAjC;IACH,SAFD;;IAIAA,eAAOgS,KAAP,CAAavc,EAAb,CAAgB,YAAhB,EAA8B,gBAAQ;IAClCuK,mBAAOjB,KAAP,CAAa2N,OAAb,GAAuB,KAAvB;IACAxM,0BAAcoF,KAAK0Z,OAAnB;IACAhpB,yBAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,YAAxC;IACH,SAJD;;IAMAiB,eAAOgS,KAAP,CAAavc,EAAb,CAAgB,UAAhB,EAA4B,gBAAQ;IAChCuK,mBAAOjB,KAAP,CAAa4M,QAAb,GAAwBrG,KAAKsG,OAA7B;IACA5V,yBAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,UAAxC;;IAEA;IACA,gBAAI+G,SAASR,KAAKsG,OAAd,EAAuB,EAAvB,MAA+B,CAAnC,EAAsC;IAClC5V,6BAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,gBAAxC;IACH;;IAED;IACA;IACAiB,mBAAOgS,KAAP,CAAa2M,WAAb,GAA2B5nB,IAA3B,CAAgC,iBAAS;IACrC,oBAAImB,UAAU8H,OAAOjB,KAAP,CAAaiJ,QAA3B,EAAqC;IACjChI,2BAAOjB,KAAP,CAAaiJ,QAAb,GAAwB9P,KAAxB;IACAlC,iCAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,gBAAxC;IACH;IACJ,aALD;IAMH,SAjBD;;IAmBAiB,eAAOgS,KAAP,CAAavc,EAAb,CAAgB,QAAhB,EAA0B,YAAM;IAC5BuK,mBAAOjB,KAAP,CAAa2N,OAAb,GAAuB,KAAvB;IACA1W,yBAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,QAAxC;IACH,SAHD;;IAKAiB,eAAOgS,KAAP,CAAavc,EAAb,CAAgB,OAAhB,EAAyB,YAAM;IAC3BuK,mBAAOjB,KAAP,CAAaoB,MAAb,GAAsB,IAAtB;IACAnK,yBAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,OAAxC;IACH,SAHD;;IAKAiB,eAAOgS,KAAP,CAAavc,EAAb,CAAgB,OAAhB,EAAyB,kBAAU;IAC/BuK,mBAAOjB,KAAP,CAAaqJ,KAAb,GAAqBlS,MAArB;IACAF,yBAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,OAAxC;IACH,SAHD;;IAKA;IACApI,mBAAW;IAAA,mBAAM0H,GAAGqa,KAAH,CAAShjB,IAAT,CAAcsK,MAAd,CAAN;IAAA,SAAX,EAAwC,CAAxC;IACH;IAxWS,CAAd;;IC/CA;AACA;IAcA;IACA,SAASqc,SAAT,CAAiBjoB,GAAjB,EAAsB;IAClB,QAAIc,GAAGb,KAAH,CAASD,GAAT,CAAJ,EAAmB;IACf,eAAO,IAAP;IACH;;IAED,QAAMkoB,QAAQ,8DAAd;IACA,WAAOloB,IAAI6G,KAAJ,CAAUqhB,KAAV,IAAmBja,OAAOka,EAA1B,GAA+BnoB,GAAtC;IACH;;IAED;IACA,SAAS6qB,cAAT,CAAwBruB,KAAxB,EAA+B;IAC3B,QAAMsuB,YAAY;IACdC,gBAAQ,IADM;IAEdC,gBAAQ,IAFM;IAGdC,gBAAQ,IAHM;IAIdC,eAAO,GAJO;IAKdC,eAAO,GALO;IAMdC,gBAAQ,GANM;IAOdC,eAAO,GAPO;IAQdC,cAAM;IARQ,KAAlB;;IAWA,QAAMC,QAAQzuB,OAAO8G,OAAP,CAAeknB,SAAf,EAA0BtiB,IAA1B,CAA+B;IAAA,eAAS+iB,MAAMxkB,QAAN,CAAevK,KAAf,CAAT;IAAA,KAA/B,CAAd;;IAEA,QAAI+uB,KAAJ,EAAW;IACP;IACA,eAAOA,MAAM/iB,IAAN,CAAW;IAAA,mBAAS1E,UAAUtH,KAAnB;IAAA,SAAX,CAAP;IACH;;IAED,WAAO,SAAP;IACH;;IAED,SAASgvB,eAAT,CAAyBC,MAAzB,EAAiC;IAC7B,QAAI3qB,GAAGb,KAAH,CAASwrB,MAAT,CAAJ,EAAsB;IAClB,eAAOA,MAAP;IACH;;IAED,WAAOvc,OAAOuc,OAAO/f,GAAP,CAAW;IAAA,eAASmf,eAAea,KAAf,CAAT;IAAA,KAAX,CAAP,CAAP;IACH;;IAED;IACA,SAASlD,qBAAT,CAA6Brc,IAA7B,EAAmC;IAC/B,QAAIA,QAAQ,CAAC,KAAKyR,KAAL,CAAW6K,SAAxB,EAAmC;IAC/B,aAAK7K,KAAL,CAAW6K,SAAX,GAAuB,IAAvB;IACH;IACD,QAAI,KAAK9d,KAAL,CAAWoB,MAAX,KAAsBI,IAA1B,EAAgC;IAC5B,aAAKxB,KAAL,CAAWoB,MAAX,GAAoB,CAACI,IAArB;IACAvK,qBAAaN,IAAb,CAAkB,IAAlB,EAAwB,KAAKqJ,KAA7B,EAAoCwB,OAAO,MAAP,GAAgB,OAApD;IACH;IACJ;;IAED,IAAMwU,UAAU;IACZjE,SADY,mBACJ;IAAA;;IACJ;IACArW,oBAAY,KAAK5D,QAAL,CAAcI,OAA1B,EAAmC,KAAK0J,MAAL,CAAYuH,UAAZ,CAAuB8J,KAA1D,EAAiE,IAAjE;;IAEA;IACA+C,gBAAQ+H,cAAR,CAAuBpnB,IAAvB,CAA4B,IAA5B;;IAEA;IACA,YAAIR,GAAG1B,MAAH,CAAUhB,OAAOutB,EAAjB,KAAwB7qB,GAAGvB,QAAH,CAAYnB,OAAOutB,EAAP,CAAUrC,MAAtB,CAA5B,EAA2D;IACvD3I,oBAAQte,KAAR,CAAcf,IAAd,CAAmB,IAAnB;IACH,SAFD,MAEO;IACH;IACAwmB,uBAAW,KAAKvb,MAAL,CAAYgU,IAAZ,CAAiBI,OAAjB,CAAyBF,GAApC,EAAyCjP,KAAzC,CAA+C,iBAAS;IACpD,sBAAK/E,KAAL,CAAWwH,IAAX,CAAgB,4BAAhB,EAA8CD,KAA9C;IACH,aAFD;;IAIA;IACA;IACA5V,mBAAOwtB,uBAAP,GAAiCxtB,OAAOwtB,uBAAP,IAAkC,EAAnE;;IAEA;IACAxtB,mBAAOwtB,uBAAP,CAA+BzqB,IAA/B,CAAoC,YAAM;IACtCwf,wBAAQte,KAAR,CAAcf,IAAd,CAAmB,KAAnB;IACH,aAFD;;IAIA;IACAlD,mBAAOytB,uBAAP,GAAiC,YAAM;IACnCztB,uBAAOwtB,uBAAP,CAA+B3qB,OAA/B,CAAuC,oBAAY;IAC/CP;IACH,iBAFD;IAGH,aAJD;IAKH;IACJ,KAjCW;;;IAmCZ;IACAorB,YApCY,oBAoCHC,OApCG,EAoCM;IAAA;;IACd;IACA;IACA;IACA,YAAIjrB,GAAGvB,QAAH,CAAY,KAAKqe,KAAL,CAAWoO,YAAvB,CAAJ,EAA0C;IAAA,sCACpB,KAAKpO,KAAL,CAAWoO,YAAX,EADoB;IAAA,gBAC9B/c,KAD8B,uBAC9BA,KAD8B;;IAGtC,gBAAInO,GAAGb,KAAH,CAASgP,KAAT,CAAJ,EAAqB;IACjB,qBAAK1C,MAAL,CAAY0C,KAAZ,GAAoBA,KAApB;IACAhF,mBAAGua,QAAH,CAAYljB,IAAZ,CAAiB,IAAjB;IACA;IACH;IACJ;;IAED;IACA,YAAMyC,MAAM,KAAKwI,MAAL,CAAY3N,IAAZ,CAAiB+iB,MAA7B;IACA,YAAI7gB,GAAG/B,MAAH,CAAUgF,GAAV,KAAkB,CAACjD,GAAGb,KAAH,CAAS8D,GAAT,CAAvB,EAAsC;IAClC,gBAAM/D,MAAMyN,OAAO,KAAKlB,MAAL,CAAYgU,IAAZ,CAAiBI,OAAjB,CAAyB3W,GAAhC,EAAqC+hB,OAArC,EAA8ChoB,GAA9C,CAAZ;;IAEAkM,kBAAMjQ,GAAN,EACK2C,IADL,CACU,kBAAU;IACZ,oBAAI7B,GAAG1B,MAAH,CAAUmS,MAAV,CAAJ,EAAuB;IACnB,2BAAKhF,MAAL,CAAY0C,KAAZ,GAAoBsC,OAAO0a,KAAP,CAAa,CAAb,EAAgBC,OAAhB,CAAwBjd,KAA5C;IACAhF,uBAAGua,QAAH,CAAYljB,IAAZ,CAAiB,MAAjB;IACH;IACJ,aANL,EAOKkQ,KAPL,CAOW,YAAM,EAPjB;IAQH;IACJ,KAhEW;;;IAkEZ;IACAkX,kBAnEY,4BAmEK;IACb,YAAM7J,QAAQ,KAAKtS,MAAL,CAAYsS,KAAZ,CAAkB7d,KAAlB,CAAwB,GAAxB,CAAd;IACA,aAAKyB,QAAL,CAAcI,OAAd,CAAsB4F,KAAtB,CAA4BogB,aAA5B,GAA+C,MAAMhK,MAAM,CAAN,CAAN,GAAiBA,MAAM,CAAN,CAAhE;IACH,KAtEW;;;IAwEZ;IACAxc,SAzEY,sBAyEJ;IACJ,YAAMuJ,SAAS,IAAf;;IAEA;IACA,YAAMugB,YAAYvgB,OAAOjB,KAAP,CAAaa,YAAb,CAA0B,IAA1B,CAAlB;IACA,YAAI,CAAC1K,GAAGb,KAAH,CAASksB,SAAT,CAAD,IAAwBA,UAAUntB,UAAV,CAAqB,UAArB,CAA5B,EAA8D;IAC1D;IACH;;IAED;IACA,YAAIuM,SAASK,OAAOjB,KAAP,CAAaa,YAAb,CAA0B,KAA1B,CAAb;;IAEA;IACA,YAAI1K,GAAGb,KAAH,CAASsL,MAAT,CAAJ,EAAsB;IAClBA,qBAASK,OAAOjB,KAAP,CAAaa,YAAb,CAA0B,KAAKe,MAAL,CAAY5I,UAAZ,CAAuBia,KAAvB,CAA6B7X,EAAvD,CAAT;IACH;;IAED;IACA,YAAMgmB,UAAU9D,UAAQ1c,MAAR,CAAhB;IACA,YAAMxF,KAAKqH,WAAWxB,OAAO/B,QAAlB,CAAX;;IAEA;IArBI,YAsBImX,MAtBJ,GAsBepV,MAtBf,CAsBIoV,MAtBJ;;IAwBJ;;IACA,YAAMte,YAAYuB,cAAc,KAAd,EAAqB,EAAE8B,MAAF,EAAMib,cAAN,EAArB,CAAlB;IACApV,eAAOjB,KAAP,GAAe9F,eAAenC,SAAf,EAA0BkJ,OAAOjB,KAAjC,CAAf;;IAEA;IACA,YAAMyhB,YAAY,SAAZA,SAAY;IAAA,mDAAwCL,OAAxC,SAAmDte,SAAnD;IAAA,SAAlB;;IAEA;IACAoW,kBAAUuI,UAAU,QAAV,CAAV,EAA+B,GAA/B;IAAA,SACK5a,KADL,CACW;IAAA,mBAAMqS,UAAUuI,UAAU,IAAV,CAAV,EAA2B,GAA3B,CAAN;IAAA,SADX;IAAA,SAEK5a,KAFL,CAEW;IAAA,mBAAMqS,UAAUuI,UAAU,IAAV,CAAV,CAAN;IAAA,SAFX;IAAA,SAGKzpB,IAHL,CAGU;IAAA,mBAASsH,GAAGwa,SAAH,CAAanjB,IAAb,CAAkBsK,MAAlB,EAA0BmY,MAAM7X,GAAhC,CAAT;IAAA,SAHV,EAIKvJ,IAJL,CAIU,qBAAa;IACf;IACA,gBAAI,CAACypB,UAAUrlB,QAAV,CAAmB,QAAnB,CAAL,EAAmC;IAC/B6E,uBAAOnJ,QAAP,CAAgBue,MAAhB,CAAuBvY,KAAvB,CAA6Bqc,cAA7B,GAA8C,OAA9C;IACH;IACJ,SATL,EAUKtT,KAVL,CAUW,YAAM,EAVjB;;IAYA;IACA;IACA5F,eAAOgS,KAAP,GAAe,IAAIxf,OAAOutB,EAAP,CAAUrC,MAAd,CAAqBvjB,EAArB,EAAyB;IACpCgmB,4BADoC;IAEpCM,wBAAY;IACR3N,0BAAU9S,OAAOW,MAAP,CAAcmS,QAAd,GAAyB,CAAzB,GAA6B,CAD/B;IAER4N,oBAAI1gB,OAAOW,MAAP,CAAc+f,EAFV;IAGRla,0BAAUxG,OAAOzL,SAAP,CAAiB8J,EAAjB,GAAsB,CAAtB,GAA0B,CAH5B;IAIRsiB,qBAAK,CAJG;IAKRC,0BAAU,CALF;IAMRC,gCAAgB,CANR;IAORC,gCAAgB,CAPR;IAQRC,2BAAW,CARH;IASR7iB,6BAAa,CATL;;IAWR;IACA;IACA8iB,iCAAiBxuB,SAASA,OAAOmU,QAAP,CAAgB+J,IAAzB,GAAgC,IAbzC;;IAeR;IACAuQ,gCAAgBjhB,OAAOwH,QAAP,CAAgB8J,MAAhB,GAAyB,CAAzB,GAA6B,CAhBrC;IAiBR4P,8BAAclhB,OAAOW,MAAP,CAAc6G,QAAd,CAAuB0G;IAjB7B,aAFwB;IAqBpC/Y,oBAAQ;IACJgsB,uBADI,mBACIltB,KADJ,EACW;IACX;IACA,wBAAI,CAAC+L,OAAOjB,KAAP,CAAaqJ,KAAlB,EAAyB;IACrB,4BAAMuR,OAAO1lB,MAAMqR,IAAnB;IACA;IACA,4BAAM8b,UACF;IACI,+BAAG,sOADP;IAEI,+BAAG,sHAFP;IAGI,iCAAK,oIAHT;IAII,iCAAK,sFAJT;IAKI,iCAAK;IALT,0BAMEzH,IANF,KAMW,0BAPf;;IASA3Z,+BAAOjB,KAAP,CAAaqJ,KAAb,GAAqB,EAAEuR,UAAF,EAAQyH,gBAAR,EAArB;;IAEAprB,qCAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,OAAxC;IACH;IACJ,iBAnBG;IAoBJsiB,uCApBI,qCAoBsB;IACtBrrB,iCAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,eAAxC,EAAyD,KAAzD,EAAgE;IAC5D0B,iCAAST,OAAOjB,KAAP,CAAa0B;IADsC,qBAAhE;IAGH,iBAxBG;IAyBJ6gB,oCAzBI,gCAyBiBrtB,KAzBjB,EAyBwB;IACxB;IACA,wBAAMstB,WAAWttB,MAAMyE,MAAvB;;IAEA;IACAsH,2BAAOjB,KAAP,CAAayiB,YAAb,GAA4BD,SAASE,eAAT,EAA5B;;IAEAzrB,iCAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,YAAxC;IACH,iBAjCG;IAkCJ2iB,uBAlCI,mBAkCIztB,KAlCJ,EAkCW;IACX;IACA,wBAAIiB,GAAGvB,QAAH,CAAYqM,OAAOjB,KAAP,CAAawB,IAAzB,CAAJ,EAAoC;IAChC;IACH;IACD;IACA,wBAAMghB,WAAWttB,MAAMyE,MAAvB;;IAEA;IACAqc,4BAAQmL,QAAR,CAAiBxqB,IAAjB,CAAsBsK,MAAtB,EAA8BmgB,OAA9B;;IAEA;IACAngB,2BAAOjB,KAAP,CAAawB,IAAb,GAAoB,YAAM;IACtBqc,8CAAoBlnB,IAApB,CAAyBsK,MAAzB,EAAiC,IAAjC;IACAuhB,iCAASI,SAAT;IACH,qBAHD;;IAKA3hB,2BAAOjB,KAAP,CAAamI,KAAb,GAAqB,YAAM;IACvB0V,8CAAoBlnB,IAApB,CAAyBsK,MAAzB,EAAiC,KAAjC;IACAuhB,iCAASK,UAAT;IACH,qBAHD;;IAKA5hB,2BAAOjB,KAAP,CAAa6e,IAAb,GAAoB,YAAM;IACtB2D,iCAASM,SAAT;IACH,qBAFD;;IAIA7hB,2BAAOjB,KAAP,CAAaiJ,QAAb,GAAwBuZ,SAAS5C,WAAT,EAAxB;IACA3e,2BAAOjB,KAAP,CAAaoB,MAAb,GAAsB,IAAtB;;IAEA;IACAH,2BAAOjB,KAAP,CAAamB,WAAb,GAA2B,CAA3B;IACAhP,2BAAOuD,cAAP,CAAsBuL,OAAOjB,KAA7B,EAAoC,aAApC,EAAmD;IAC/CrK,2BAD+C,iBACzC;IACF,mCAAOtD,OAAOmwB,SAAS7C,cAAT,EAAP,CAAP;IACH,yBAH8C;IAI/Cze,2BAJ+C,eAI3CiG,IAJ2C,EAIrC;IACN;IACA,gCAAIlG,OAAOG,MAAP,IAAiB,CAACH,OAAOgS,KAAP,CAAa6K,SAAnC,EAA8C;IAC1C7c,uCAAOgS,KAAP,CAAa1K,IAAb;IACH;;IAED;IACAtH,mCAAOjB,KAAP,CAAa2N,OAAb,GAAuB,IAAvB;IACA1W,yCAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,SAAxC;;IAEA;IACAwiB,qCAAS7F,MAAT,CAAgBxV,IAAhB;IACH;IAhB8C,qBAAnD;;IAmBA;IACAhV,2BAAOuD,cAAP,CAAsBuL,OAAOjB,KAA7B,EAAoC,cAApC,EAAoD;IAChDrK,2BADgD,iBAC1C;IACF,mCAAO6sB,SAASE,eAAT,EAAP;IACH,yBAH+C;IAIhDxhB,2BAJgD,eAI5CrP,KAJ4C,EAIrC;IACP2wB,qCAASvD,eAAT,CAAyBptB,KAAzB;IACH;IAN+C,qBAApD;;IASA;IACAM,2BAAOuD,cAAP,CAAsBuL,OAAOjB,KAA7B,EAAoC,SAApC,EAA+C;IAC3CrK,2BAD2C,iBACrC;IACF,mCAAOuqB,eAAesC,SAASO,kBAAT,EAAf,CAAP;IACH,yBAH0C;IAI3C7hB,2BAJ2C,eAIvCrP,KAJuC,EAIhC;IACP2wB,qCAASQ,kBAAT,CAA4B9C,eAAeruB,KAAf,CAA5B;IACH;IAN0C,qBAA/C;;IASA;IAtEW,wBAuELiX,MAvEK,GAuEM7H,OAAOW,MAvEb,CAuELkH,MAvEK;;IAwEX3W,2BAAOuD,cAAP,CAAsBuL,OAAOjB,KAA7B,EAAoC,QAApC,EAA8C;IAC1CrK,2BAD0C,iBACpC;IACF,mCAAOmT,MAAP;IACH,yBAHyC;IAI1C5H,2BAJ0C,eAItCrP,KAJsC,EAI/B;IACPiX,qCAASjX,KAAT;IACA2wB,qCAASzD,SAAT,CAAmBjW,SAAS,GAA5B;IACA7R,yCAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,cAAxC;IACH;IARyC,qBAA9C;;IAWA;IAnFW,wBAoFLuM,KApFK,GAoFKtL,OAAOW,MApFZ,CAoFL2K,KApFK;;IAqFXpa,2BAAOuD,cAAP,CAAsBuL,OAAOjB,KAA7B,EAAoC,OAApC,EAA6C;IACzCrK,2BADyC,iBACnC;IACF,mCAAO4W,KAAP;IACH,yBAHwC;IAIzCrL,2BAJyC,eAIrCrP,KAJqC,EAI9B;IACP,gCAAMmE,SAASG,GAAGxB,OAAH,CAAW9C,KAAX,IAAoBA,KAApB,GAA4B0a,KAA3C;IACAA,oCAAQvW,MAAR;IACAwsB,qCAASxsB,SAAS,MAAT,GAAkB,QAA3B;IACAiB,yCAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,cAAxC;IACH;IATwC,qBAA7C;;IAYA;IACA7N,2BAAOuD,cAAP,CAAsBuL,OAAOjB,KAA7B,EAAoC,YAApC,EAAkD;IAC9CrK,2BAD8C,iBACxC;IACF,mCAAO6sB,SAASpD,WAAT,EAAP;IACH;IAH6C,qBAAlD;;IAMA;IACAjtB,2BAAOuD,cAAP,CAAsBuL,OAAOjB,KAA7B,EAAoC,OAApC,EAA6C;IACzCrK,2BADyC,iBACnC;IACF,mCAAOsL,OAAOE,WAAP,KAAuBF,OAAOgI,QAArC;IACH;IAHwC,qBAA7C;;IAMA;IACAhI,2BAAOxL,OAAP,CAAe8Z,KAAf,GAAuBiT,SAASS,yBAAT,EAAvB;;IAEA;IACA,wBAAIhiB,OAAOzL,SAAP,CAAiB8J,EAArB,EAAyB;IACrB2B,+BAAOjB,KAAP,CAAa3G,YAAb,CAA0B,UAA1B,EAAsC,CAAC,CAAvC;IACH;;IAEDpC,iCAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,YAAxC;IACA/I,iCAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,gBAAxC;;IAEA;IACAkjB,kCAAcjiB,OAAOsZ,MAAP,CAAc4I,SAA5B;;IAEA;IACAliB,2BAAOsZ,MAAP,CAAc4I,SAAd,GAA0BC,YAAY,YAAM;IACxC;IACAniB,+BAAOjB,KAAP,CAAa4M,QAAb,GAAwB4V,SAASa,sBAAT,EAAxB;;IAEA;IACA,4BAAIpiB,OAAOjB,KAAP,CAAasjB,YAAb,KAA8B,IAA9B,IAAsCriB,OAAOjB,KAAP,CAAasjB,YAAb,GAA4BriB,OAAOjB,KAAP,CAAa4M,QAAnF,EAA6F;IACzF3V,yCAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,UAAxC;IACH;;IAED;IACAiB,+BAAOjB,KAAP,CAAasjB,YAAb,GAA4BriB,OAAOjB,KAAP,CAAa4M,QAAzC;;IAEA;IACA,4BAAI3L,OAAOjB,KAAP,CAAa4M,QAAb,KAA0B,CAA9B,EAAiC;IAC7BsW,0CAAcjiB,OAAOsZ,MAAP,CAAc4I,SAA5B;;IAEA;IACAlsB,yCAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,gBAAxC;IACH;IACJ,qBAnByB,EAmBvB,GAnBuB,CAA1B;;IAqBA;IACApI,+BAAW;IAAA,+BAAM0H,GAAGqa,KAAH,CAAShjB,IAAT,CAAcsK,MAAd,CAAN;IAAA,qBAAX,EAAwC,EAAxC;IACH,iBAvLG;IAwLJsiB,6BAxLI,yBAwLUruB,KAxLV,EAwLiB;IACjB;IACA,wBAAMstB,WAAWttB,MAAMyE,MAAvB;;IAEA;IACAupB,kCAAcjiB,OAAOsZ,MAAP,CAAc/D,OAA5B;;IAEA,wBAAMgN,SAASviB,OAAOjB,KAAP,CAAa2N,OAAb,IAAwB,CAAC,CAAD,EAAI,CAAJ,EAAOvR,QAAP,CAAgBlH,MAAMqR,IAAtB,CAAvC;;IAEA,wBAAIid,MAAJ,EAAY;IACR;IACAviB,+BAAOjB,KAAP,CAAa2N,OAAb,GAAuB,KAAvB;IACA1W,qCAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,QAAxC;IACH;;IAED;IACA;IACA;IACA;IACA;IACA;IACA;IACA,4BAAQ9K,MAAMqR,IAAd;IACI,6BAAK,CAAC,CAAN;IACI;IACAtP,yCAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,YAAxC;;IAEA;IACAiB,mCAAOjB,KAAP,CAAa4M,QAAb,GAAwB4V,SAASa,sBAAT,EAAxB;IACApsB,yCAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,UAAxC;;IAEA;;IAEJ,6BAAK,CAAL;IACI6d,kDAAoBlnB,IAApB,CAAyBsK,MAAzB,EAAiC,KAAjC;;IAEA;IACA,gCAAIA,OAAOjB,KAAP,CAAauU,IAAjB,EAAuB;IACnB;IACAiO,yCAASM,SAAT;IACAN,yCAASI,SAAT;IACH,6BAJD,MAIO;IACH3rB,6CAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,OAAxC;IACH;;IAED;;IAEJ,6BAAK,CAAL;IACI;IACA,gCAAIiB,OAAOjB,KAAP,CAAaoB,MAAb,IAAuB,CAACH,OAAOgS,KAAP,CAAa6K,SAAzC,EAAoD;IAChD7c,uCAAOjB,KAAP,CAAamI,KAAb;IACH,6BAFD,MAEO;IACH0V,sDAAoBlnB,IAApB,CAAyBsK,MAAzB,EAAiC,IAAjC;;IAEAhK,6CAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,SAAxC;;IAEA;IACAiB,uCAAOsZ,MAAP,CAAc/D,OAAd,GAAwB4M,YAAY,YAAM;IACtCnsB,iDAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,YAAxC;IACH,iCAFuB,EAErB,EAFqB,CAAxB;;IAIA;IACA;IACA;IACA,oCAAIiB,OAAOjB,KAAP,CAAaiJ,QAAb,KAA0BuZ,SAAS5C,WAAT,EAA9B,EAAsD;IAClD3e,2CAAOjB,KAAP,CAAaiJ,QAAb,GAAwBuZ,SAAS5C,WAAT,EAAxB;IACA3oB,iDAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOjB,KAAjC,EAAwC,gBAAxC;IACH;;IAED;IACAyH,yCAASyG,cAAT,CAAwBvX,IAAxB,CACIsK,MADJ,EAEI4f,gBAAgB2B,SAASiB,yBAAT,EAAhB,CAFJ;IAIH;;IAED;;IAEJ,6BAAK,CAAL;IACI;IACA,gCAAI,CAACxiB,OAAOsL,KAAZ,EAAmB;IACftL,uCAAOgS,KAAP,CAAayQ,MAAb;IACH;IACD7F,kDAAoBlnB,IAApB,CAAyBsK,MAAzB,EAAiC,KAAjC;;IAEA;;IAEJ;IACI;IAlER;;IAqEAhK,iCAAaN,IAAb,CAAkBsK,MAAlB,EAA0BA,OAAOnJ,QAAP,CAAgBC,SAA1C,EAAqD,aAArD,EAAoE,KAApE,EAA2E;IACvE6iB,8BAAM1lB,MAAMqR;IAD2D,qBAA3E;IAGH;IAtRG;IArB4B,SAAzB,CAAf;IA8SH;IAraW,CAAhB;;ICnEA;AACA;IAQA,IAAMvG,QAAQ;IACV;IACA+R,SAFU,mBAEF;IACJ;IACA,YAAI,CAAC,KAAK/R,KAAV,EAAiB;IACb,iBAAK8B,KAAL,CAAWwH,IAAX,CAAgB,yBAAhB;IACA;IACH;;IAED;IACA5N,oBAAY,KAAK5D,QAAL,CAAcC,SAA1B,EAAqC,KAAK6J,MAAL,CAAYuH,UAAZ,CAAuB1S,IAAvB,CAA4BqE,OAA5B,CAAoC,KAApC,EAA2C,KAAKrE,IAAhD,CAArC,EAA4F,IAA5F;;IAEA;IACAiF,oBAAY,KAAK5D,QAAL,CAAcC,SAA1B,EAAqC,KAAK6J,MAAL,CAAYuH,UAAZ,CAAuBjK,QAAvB,CAAgCpE,OAAhC,CAAwC,KAAxC,EAA+C,KAAKoE,QAApD,CAArC,EAAoG,IAApG;;IAEA;IACA;IACA,YAAI,KAAK6a,OAAT,EAAkB;IACdre,wBAAY,KAAK5D,QAAL,CAAcC,SAA1B,EAAqC,KAAK6J,MAAL,CAAYuH,UAAZ,CAAuB1S,IAAvB,CAA4BqE,OAA5B,CAAoC,KAApC,EAA2C,OAA3C,CAArC,EAA0F,IAA1F;IACH;;IAED;IACA,YAAI,KAAKkX,OAAT,EAAkB;IACd;IACA,iBAAKla,QAAL,CAAcI,OAAd,GAAwBoB,cAAc,KAAd,EAAqB;IACzC6B,uBAAO,KAAKyG,MAAL,CAAYuH,UAAZ,CAAuBnK;IADW,aAArB,CAAxB;;IAIA;IACA/G,iBAAK,KAAK+H,KAAV,EAAiB,KAAKlI,QAAL,CAAcI,OAA/B;;IAEA;IACA,iBAAKJ,QAAL,CAAcue,MAAd,GAAuB/c,cAAc,KAAd,EAAqB;IACxC6B,uBAAO,KAAKyG,MAAL,CAAYuH,UAAZ,CAAuBkN;IADU,aAArB,CAAvB;;IAIA,iBAAKve,QAAL,CAAcI,OAAd,CAAsBW,WAAtB,CAAkC,KAAKf,QAAL,CAAcue,MAAhD;IACH;;IAED,YAAI,KAAKtW,OAAT,EAAkB;IACdU,kBAAMO,MAAN,CAAarK,IAAb,CAAkB,IAAlB;IACH,SAFD,MAEO,IAAI,KAAKsb,SAAT,EAAoB;IACvB+D,oBAAQjE,KAAR,CAAcpb,IAAd,CAAmB,IAAnB;IACH,SAFM,MAEA,IAAI,KAAK6Y,OAAT,EAAkB;IACrBqG,kBAAM9D,KAAN,CAAYpb,IAAZ,CAAiB,IAAjB;IACH;IACJ;IA9CS,CAAd;;ICTA;AACA;QAeMgtB;IACF;;;;;IAKA,iBAAY1iB,MAAZ,EAAoB;IAAA;;IAAA;;IAChB,aAAKA,MAAL,GAAcA,MAAd;IACA,aAAKgW,WAAL,GAAmBhW,OAAOW,MAAP,CAAc2U,GAAd,CAAkBU,WAArC;IACA,aAAKT,OAAL,GAAe,KAAf;IACA,aAAKkF,WAAL,GAAmB,KAAnB;IACA,aAAK5jB,QAAL,GAAgB;IACZC,uBAAW,IADC;IAEZ6rB,8BAAkB;IAFN,SAAhB;IAIA,aAAKC,OAAL,GAAe,IAAf;IACA,aAAKC,MAAL,GAAc,IAAd;IACA,aAAKC,SAAL,GAAiB,IAAjB;IACA,aAAK3tB,MAAL,GAAc,EAAd;IACA,aAAK4tB,WAAL,GAAmB,IAAnB;IACA,aAAKC,cAAL,GAAsB,IAAtB;;IAEA;IACA,aAAKtI,cAAL,GAAsB,IAAIhkB,OAAJ,CAAY,UAACE,OAAD,EAAU2N,MAAV,EAAqB;IACnD;IACA,kBAAK9O,EAAL,CAAQ,QAAR,EAAkBmB,OAAlB;;IAEA;IACA,kBAAKnB,EAAL,CAAQ,OAAR,EAAiB8O,MAAjB;IACH,SANqB,CAAtB;;IAQA,aAAK/D,IAAL;IACH;;;;;;IAQD;;;mCAGO;IAAA;;IACH,gBAAI,KAAKqD,OAAT,EAAkB;IACd;IACA,oBAAI,CAAC3O,GAAG1B,MAAH,CAAUhB,OAAOujB,MAAjB,CAAD,IAA6B,CAAC7gB,GAAG1B,MAAH,CAAUhB,OAAOujB,MAAP,CAAckN,GAAxB,CAAlC,EAAgE;IAC5D/G,+BAAW,KAAKlc,MAAL,CAAYW,MAAZ,CAAmBgU,IAAnB,CAAwBK,SAAxB,CAAkCH,GAA7C,EACK9d,IADL,CACU,YAAM;IACR,+BAAKN,KAAL;IACH,qBAHL,EAIKmP,KAJL,CAIW,YAAM;IACT;IACA,+BAAKsd,OAAL,CAAa,OAAb,EAAsB,IAAIte,KAAJ,CAAU,+BAAV,CAAtB;IACH,qBAPL;IAQH,iBATD,MASO;IACH,yBAAKnO,KAAL;IACH;IACJ;IACJ;;IAED;;;;;;uCAGQ;IAAA;;IACJ;IACA;IACA,iBAAK0sB,gBAAL,CAAsB,KAAtB,EAA6B,SAA7B;;IAEA;IACA,iBAAKzI,cAAL,CAAoB3jB,IAApB,CAAyB,YAAM;IAC3B,uBAAKqsB,gBAAL,CAAsB,sBAAtB;IACH,aAFD;;IAIA;IACA,iBAAKnO,SAAL;;IAEA;IACA,iBAAKoO,QAAL;IACH;;IAED;;;;;;IAiBA;;;;;;;;uCAQW;IACP;IACA,iBAAKxsB,QAAL,CAAcC,SAAd,GAA0BuB,cAAc,KAAd,EAAqB;IAC3C6B,uBAAO,KAAK8F,MAAL,CAAYW,MAAZ,CAAmBuH,UAAnB,CAA8BoN;IADM,aAArB,CAA1B;IAGA,iBAAKtV,MAAL,CAAYnJ,QAAZ,CAAqBC,SAArB,CAA+Bc,WAA/B,CAA2C,KAAKf,QAAL,CAAcC,SAAzD;;IAEA;IACAif,mBAAOkN,GAAP,CAAW1b,QAAX,CAAoB+b,YAApB,CAAiCvN,OAAOkN,GAAP,CAAWM,cAAX,CAA0BC,SAA1B,CAAoCC,OAArE;;IAEA;IACA1N,mBAAOkN,GAAP,CAAW1b,QAAX,CAAoBmc,SAApB,CAA8B,KAAK1jB,MAAL,CAAYW,MAAZ,CAAmB2U,GAAnB,CAAuBpH,QAArD;;IAEA;IACA;IACA,iBAAKrX,QAAL,CAAc8rB,gBAAd,GAAiC,IAAI5M,OAAOkN,GAAP,CAAWU,kBAAf,CAAkC,KAAK9sB,QAAL,CAAcC,SAAhD,CAAjC;;IAEA;IACA,iBAAK8sB,UAAL;IACH;;IAED;;;;;;yCAGa;IAAA;;IAAA,gBACD9sB,SADC,GACa,KAAKkJ,MAAL,CAAYnJ,QADzB,CACDC,SADC;;;IAGT,gBAAI;IACA;IACA,qBAAK+rB,MAAL,GAAc,IAAI9M,OAAOkN,GAAP,CAAWY,SAAf,CAAyB,KAAKhtB,QAAL,CAAc8rB,gBAAvC,CAAd;;IAEA;IACA,qBAAKE,MAAL,CAAYluB,gBAAZ,CACIohB,OAAOkN,GAAP,CAAWa,qBAAX,CAAiCC,IAAjC,CAAsCC,kBAD1C,EAEI;IAAA,2BAAS,OAAKC,kBAAL,CAAwBhwB,KAAxB,CAAT;IAAA,iBAFJ,EAGI,KAHJ;IAKA,qBAAK4uB,MAAL,CAAYluB,gBAAZ,CAA6BohB,OAAOkN,GAAP,CAAWiB,YAAX,CAAwBH,IAAxB,CAA6BI,QAA1D,EAAoE;IAAA,2BAAS,OAAKC,SAAL,CAAehc,KAAf,CAAT;IAAA,iBAApE,EAAoG,KAApG;;IAEA;IACA,oBAAM5D,UAAU,IAAIuR,OAAOkN,GAAP,CAAWoB,UAAf,EAAhB;IACA7f,wBAAQ8f,QAAR,GAAmB,KAAKC,MAAxB;;IAEA;IACA;IACA/f,wBAAQggB,iBAAR,GAA4B1tB,UAAU2tB,WAAtC;IACAjgB,wBAAQkgB,kBAAR,GAA6B5tB,UAAUkG,YAAvC;IACAwH,wBAAQmgB,oBAAR,GAA+B7tB,UAAU2tB,WAAzC;IACAjgB,wBAAQogB,qBAAR,GAAgC9tB,UAAUkG,YAA1C;;IAEA;IACAwH,wBAAQqgB,sBAAR,GAAiC,KAAjC;;IAEA;IACArgB,wBAAQsgB,kBAAR,CAA2B,CAAC,KAAK9kB,MAAL,CAAYsL,KAAxC;;IAEA,qBAAKuX,MAAL,CAAYe,UAAZ,CAAuBpf,OAAvB;IACH,aA9BD,CA8BE,OAAOlR,CAAP,EAAU;IACR,qBAAK8wB,SAAL,CAAe9wB,CAAf;IACH;IACJ;;IAED;;;;;;;4CAI6B;IAAA;;IAAA,gBAAf0G,KAAe,uEAAP,KAAO;;IACzB,gBAAI,CAACA,KAAL,EAAY;IACRioB,8BAAc,KAAKe,cAAnB;IACA,qBAAKnsB,QAAL,CAAcC,SAAd,CAAwB0D,eAAxB,CAAwC,iBAAxC;IACA;IACH;;IAED,gBAAM6K,SAAS,SAATA,MAAS,GAAM;IACjB,oBAAMa,OAAOD,WAAWvE,KAAKQ,GAAL,CAAS,OAAK0gB,OAAL,CAAamC,gBAAb,EAAT,EAA0C,CAA1C,CAAX,CAAb;IACA,oBAAMrb,QAAWvG,KAAKzO,GAAL,CAAS,eAAT,EAA0B,OAAKsL,MAAL,CAAYW,MAAtC,CAAX,WAA8DuF,IAApE;IACA,uBAAKrP,QAAL,CAAcC,SAAd,CAAwBsB,YAAxB,CAAqC,iBAArC,EAAwDsR,KAAxD;IACH,aAJD;;IAMA,iBAAKsZ,cAAL,GAAsBb,YAAY9c,MAAZ,EAAoB,GAApB,CAAtB;IACH;;IAED;;;;;;;+CAImBpR,OAAO;IAAA;;IACtB;IACA,gBAAMsT,WAAW,IAAIwO,OAAOkN,GAAP,CAAW+B,oBAAf,EAAjB;;IAEA;IACAzd,qBAAS0d,2CAAT,GAAuD,IAAvD;IACA1d,qBAAS2d,gBAAT,GAA4B,IAA5B;;IAEA;IACA;IACA,iBAAKtC,OAAL,GAAe3uB,MAAMkxB,aAAN,CAAoB,KAAKnlB,MAAzB,EAAiCuH,QAAjC,CAAf;;IAEA;IACA,iBAAKub,SAAL,GAAiB,KAAKF,OAAL,CAAawC,YAAb,EAAjB;;IAEA;IACA,gBAAI,CAAClwB,GAAGb,KAAH,CAAS,KAAKyuB,SAAd,CAAL,EAA+B;IAC3B,qBAAKA,SAAL,CAAeztB,OAAf,CAAuB,oBAAY;IAC/B,wBAAIgwB,aAAa,CAAb,IAAkBA,aAAa,CAAC,CAAhC,IAAqCA,WAAW,OAAKrlB,MAAL,CAAYgI,QAAhE,EAA0E;IACtE,4BAAMsd,cAAc,OAAKtlB,MAAL,CAAYnJ,QAAZ,CAAqB6Q,QAAzC;;IAEA,4BAAIxS,GAAGnB,OAAH,CAAWuxB,WAAX,CAAJ,EAA6B;IACzB,gCAAMC,gBAAgB,MAAM,OAAKvlB,MAAL,CAAYgI,QAAlB,GAA6Bqd,QAAnD;IACA,gCAAMnxB,MAAMmE,cAAc,MAAd,EAAsB;IAC9B6B,uCAAO,OAAK8F,MAAL,CAAYW,MAAZ,CAAmBuH,UAAnB,CAA8BqK;IADP,6BAAtB,CAAZ;;IAIAre,gCAAI2I,KAAJ,CAAUwP,IAAV,GAAoBkZ,cAAczjB,QAAd,EAApB;IACAwjB,wCAAY1tB,WAAZ,CAAwB1D,GAAxB;IACH;IACJ;IACJ,iBAdD;IAeH;;IAED;IACA;IACA;;IAEA;IACA,iBAAK0uB,OAAL,CAAa9E,SAAb,CAAuB,KAAK9d,MAAL,CAAY6H,MAAnC;;IAEA;IACA;IACA,iBAAK+a,OAAL,CAAajuB,gBAAb,CAA8BohB,OAAOkN,GAAP,CAAWiB,YAAX,CAAwBH,IAAxB,CAA6BI,QAA3D,EAAqE;IAAA,uBAAS,OAAKC,SAAL,CAAehc,KAAf,CAAT;IAAA,aAArE;;IAEA;IACAlX,mBAAO8B,IAAP,CAAY+iB,OAAOkN,GAAP,CAAWuC,OAAX,CAAmBzB,IAA/B,EAAqC1uB,OAArC,CAA6C,gBAAQ;IACjD,uBAAKutB,OAAL,CAAajuB,gBAAb,CAA8BohB,OAAOkN,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwBvuB,IAAxB,CAA9B,EAA6D;IAAA,2BAAS,OAAKiwB,SAAL,CAAexxB,KAAf,CAAT;IAAA,iBAA7D;IACH,aAFD;;IAIA;IACA,iBAAKivB,OAAL,CAAa,QAAb;IACH;;IAED;;;;;;;;;sCAMUjvB,OAAO;IAAA;;IAAA,gBACL6C,SADK,GACS,KAAKkJ,MAAL,CAAYnJ,QADrB,CACLC,SADK;;IAGb;IACA;;IACA,gBAAM4uB,KAAKzxB,MAAM0xB,KAAN,EAAX;;IAEA;IACA,gBAAMrvB,gBAAgB,SAAhBA,aAAgB,OAAQ;IAC1B,oBAAMrC,gBAAcuB,KAAKqE,OAAL,CAAa,IAAb,EAAmB,EAAnB,EAAuB4I,WAAvB,EAApB;IACAzM,6BAAaN,IAAb,CAAkB,OAAKsK,MAAvB,EAA+B,OAAKA,MAAL,CAAYjB,KAA3C,EAAkD9K,KAAlD;IACH,aAHD;;IAKA,oBAAQA,MAAMuB,IAAd;IACI,qBAAKugB,OAAOkN,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwB6B,MAA7B;IACI;IACA;IACA,yBAAK1C,OAAL,CAAa,QAAb;;IAEA;IACA5sB,kCAAcrC,MAAMuB,IAApB;;IAEA;IACA,yBAAKqwB,aAAL,CAAmB,IAAnB;;IAEA,wBAAI,CAACH,GAAGI,QAAH,EAAL,EAAoB;IAChB;IACAJ,2BAAGvZ,KAAH,GAAWrV,UAAU2tB,WAArB;IACAiB,2BAAGpW,MAAH,GAAYxY,UAAUkG,YAAtB;IACH;;IAED;IACA;IACA;;IAEJ,qBAAK+Y,OAAOkN,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwBgC,iBAA7B;IACI;IACA;;IAEA;IACAzvB,kCAAcrC,MAAMuB,IAApB;;IAEA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;IAEA;IACA;;IAEA,yBAAKwwB,OAAL;IACA;;IAEJ,qBAAKjQ,OAAOkN,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwBkC,uBAA7B;IACI;IACA;IACA;;IAEA3vB,kCAAcrC,MAAMuB,IAApB;;IAEA,yBAAK0wB,YAAL;;IAEA;;IAEJ,qBAAKnQ,OAAOkN,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwBoC,wBAA7B;IACI;IACA;IACA;IACA;;IAEA7vB,kCAAcrC,MAAMuB,IAApB;;IAEA,yBAAKqwB,aAAL;;IAEA,yBAAKO,aAAL;;IAEA;;IAEJ,qBAAKrQ,OAAOkN,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwBsC,OAA7B;IACA,qBAAKtQ,OAAOkN,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwBuC,QAA7B;IACA,qBAAKvQ,OAAOkN,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwBwC,QAA7B;IACA,qBAAKxQ,OAAOkN,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwByC,UAA7B;IACA,qBAAKzQ,OAAOkN,GAAP,CAAWuC,OAAX,CAAmBzB,IAAnB,CAAwB0C,KAA7B;IACInwB,kCAAcrC,MAAMuB,IAApB;IACA;;IAEJ;IACI;IAzFR;IA2FH;;IAED;;;;;;;sCAIUvB,OAAO;IACb,iBAAKyyB,MAAL;IACA,iBAAK1mB,MAAL,CAAYa,KAAZ,CAAkBwH,IAAlB,CAAuB,WAAvB,EAAoCpU,KAApC;IACH;;IAED;;;;;;;;wCAKY;IAAA;;IAAA,gBACA6C,SADA,GACc,KAAKkJ,MAAL,CAAYnJ,QAD1B,CACAC,SADA;;IAER,gBAAIoP,aAAJ;;IAEA;IACA,iBAAKlG,MAAL,CAAYvK,EAAZ,CAAe,OAAf,EAAwB,YAAM;IAC1B,uBAAKotB,MAAL,CAAY8D,eAAZ;IACH,aAFD;;IAIA,iBAAK3mB,MAAL,CAAYvK,EAAZ,CAAe,SAAf,EAA0B,YAAM;IAC5ByQ,uBAAO,OAAKlG,MAAL,CAAYE,WAAnB;IACA,uBAAOgG,IAAP;IACH,aAHD;;IAKA,iBAAKlG,MAAL,CAAYvK,EAAZ,CAAe,QAAf,EAAyB,YAAM;IAC3B,oBAAMmxB,aAAa,OAAK5mB,MAAL,CAAYE,WAA/B;;IAEA,oBAAIhL,GAAGb,KAAH,CAAS,OAAKyuB,SAAd,CAAJ,EAA8B;IAC1B;IACH;;IAED,uBAAKA,SAAL,CAAeztB,OAAf,CAAuB,UAACgwB,QAAD,EAAWhuB,KAAX,EAAqB;IACxC,wBAAI6O,OAAOmf,QAAP,IAAmBA,WAAWuB,UAAlC,EAA8C;IAC1C,+BAAKhE,OAAL,CAAaiE,cAAb;IACA,+BAAK/D,SAAL,CAAegE,MAAf,CAAsBzvB,KAAtB,EAA6B,CAA7B;IACH;IACJ,iBALD;IAMH,aAbD;;IAeA;IACA;IACA7E,mBAAOmC,gBAAP,CAAwB,QAAxB,EAAkC,YAAM;IACpC,oBAAI,OAAKiuB,OAAT,EAAkB;IACd,2BAAKA,OAAL,CAAamE,MAAb,CAAoBjwB,UAAU2tB,WAA9B,EAA2C3tB,UAAUkG,YAArD,EAAmE+Y,OAAOkN,GAAP,CAAW+D,QAAX,CAAoBC,MAAvF;IACH;IACJ,aAJD;IAKH;;IAED;;;;;;mCAGO;IAAA;;IAAA,gBACKnwB,SADL,GACmB,KAAKkJ,MAAL,CAAYnJ,QAD/B,CACKC,SADL;;;IAGH,gBAAI,CAAC,KAAK4jB,cAAV,EAA0B;IACtB,qBAAK0L,aAAL;IACH;;IAED;IACA,iBAAK1L,cAAL,CACK3jB,IADL,CACU,YAAM;IACR;IACA,uBAAKF,QAAL,CAAc8rB,gBAAd,CAA+BuE,UAA/B;;IAEA,oBAAI;IACA,wBAAI,CAAC,OAAKzM,WAAV,EAAuB;IACnB;IACA,+BAAKmI,OAAL,CAAauE,IAAb,CAAkBrwB,UAAU2tB,WAA5B,EAAyC3tB,UAAUkG,YAAnD,EAAiE+Y,OAAOkN,GAAP,CAAW+D,QAAX,CAAoBC,MAArF;;IAEA;IACA;IACA,+BAAKrE,OAAL,CAAa5oB,KAAb;IACH;;IAED,2BAAKygB,WAAL,GAAmB,IAAnB;IACH,iBAXD,CAWE,OAAO2M,OAAP,EAAgB;IACd;IACA;IACA,2BAAKhD,SAAL,CAAegD,OAAf;IACH;IACJ,aArBL,EAsBKxhB,KAtBL,CAsBW,YAAM,EAtBjB;IAuBH;;IAED;;;;;;4CAGgB;IACZ;IACA,iBAAK/O,QAAL,CAAcC,SAAd,CAAwB+F,KAAxB,CAA8BwqB,MAA9B,GAAuC,EAAvC;;IAEA;IACA,iBAAK9R,OAAL,GAAe,KAAf;;IAEA;IACA,gBAAI,KAAKvV,MAAL,CAAYE,WAAZ,GAA0B,KAAKF,MAAL,CAAYgI,QAA1C,EAAoD;IAChD,qBAAKhI,MAAL,CAAYO,IAAZ;IACH;IACJ;;IAED;;;;;;2CAGe;IACX;IACA,iBAAK1J,QAAL,CAAcC,SAAd,CAAwB+F,KAAxB,CAA8BwqB,MAA9B,GAAuC,CAAvC;;IAEA;IACA,iBAAK9R,OAAL,GAAe,IAAf;;IAEA;IACA,iBAAKvV,MAAL,CAAYkH,KAAZ;IACH;;IAED;;;;;;;;;qCAMS;IACL;IACA,gBAAI,KAAKuT,WAAT,EAAsB;IAClB,qBAAK2L,aAAL;IACH;;IAED;IACA,iBAAKlD,OAAL,CAAa,OAAb;;IAEA;IACA,iBAAK8C,OAAL;IACH;;IAED;;;;;;sCAGU;IAAA;;IACN;IACA,iBAAKtL,cAAL,CACK3jB,IADL,CACU,YAAM;IACR;IACA,oBAAI,QAAK6rB,OAAT,EAAkB;IACd,4BAAKA,OAAL,CAAa0E,OAAb;IACH;;IAED;IACA,wBAAK5M,cAAL,GAAsB,IAAIhkB,OAAJ,CAAY,mBAAW;IACzC,4BAAKjB,EAAL,CAAQ,QAAR,EAAkBmB,OAAlB;IACA,4BAAKoJ,MAAL,CAAYa,KAAZ,CAAkBC,GAAlB,CAAsB,QAAK8hB,OAA3B;IACH,iBAHqB,CAAtB;;IAKA;IACA,wBAAKgB,UAAL;IACH,aAfL,EAgBKhe,KAhBL,CAgBW,YAAM,EAhBjB;IAiBH;;IAED;;;;;;;oCAIQ3R,OAAgB;IAAA;;IAAA,8CAAN6B,IAAM;IAANA,oBAAM;IAAA;;IACpB,gBAAMyxB,WAAW,KAAKpyB,MAAL,CAAYlB,KAAZ,CAAjB;;IAEA,gBAAIiB,GAAGtB,KAAH,CAAS2zB,QAAT,CAAJ,EAAwB;IACpBA,yBAASlyB,OAAT,CAAiB,mBAAW;IACxB,wBAAIH,GAAGvB,QAAH,CAAY0kB,OAAZ,CAAJ,EAA0B;IACtBA,gCAAQtiB,KAAR,CAAc,OAAd,EAAoBD,IAApB;IACH;IACJ,iBAJD;IAKH;IACJ;;IAED;;;;;;;;;kCAMG7B,OAAOa,UAAU;IAChB,gBAAI,CAACI,GAAGtB,KAAH,CAAS,KAAKuB,MAAL,CAAYlB,KAAZ,CAAT,CAAL,EAAmC;IAC/B,qBAAKkB,MAAL,CAAYlB,KAAZ,IAAqB,EAArB;IACH;;IAED,iBAAKkB,MAAL,CAAYlB,KAAZ,EAAmBsB,IAAnB,CAAwBT,QAAxB;;IAEA,mBAAO,IAAP;IACH;;IAED;;;;;;;;;;;6CAQiBoR,MAAM/O,MAAM;IAAA;;IACzB,iBAAK6I,MAAL,CAAYa,KAAZ,CAAkBC,GAAlB,iCAAoD3J,IAApD;;IAEA,iBAAK4rB,WAAL,GAAmBpsB,WAAW,YAAM;IAChC,wBAAK+vB,MAAL;IACA,wBAAKtD,gBAAL,CAAsB,oBAAtB;IACH,aAHkB,EAGhBld,IAHgB,CAAnB;IAIH;;IAED;;;;;;;6CAIiB/O,MAAM;IACnB,gBAAI,CAACjC,GAAG3B,eAAH,CAAmB,KAAKwvB,WAAxB,CAAL,EAA2C;IACvC,qBAAK/iB,MAAL,CAAYa,KAAZ,CAAkBC,GAAlB,iCAAoD3J,IAApD;;IAEAkiB,6BAAa,KAAK0J,WAAlB;IACA,qBAAKA,WAAL,GAAmB,IAAnB;IACH;IACJ;;;mCAjiBa;IACV,mBACI,KAAK/iB,MAAL,CAAYlB,OAAZ,IAAuB,KAAKkB,MAAL,CAAY+Q,OAAnC,IAA8C,KAAK/Q,MAAL,CAAYW,MAAZ,CAAmB2U,GAAnB,CAAuBzR,OAArE,IAAgF,CAAC3O,GAAGb,KAAH,CAAS,KAAK2hB,WAAd,CADrF;IAGH;;;mCA4CY;IACT,gBAAMpF,SAAS;IACX4W,gCAAgB,0BADL;IAEXC,8BAAc,0BAFH;IAGXC,wBAAQl1B,OAAOmU,QAAP,CAAgBtT,QAHb;IAIXs0B,oBAAIC,KAAKC,GAAL,EAJO;IAKXC,0BAAU,GALC;IAMXC,2BAAW,GANA;IAOXC,0BAAU,KAAKhS;IAPJ,aAAf;;IAUA,gBAAMiS,OAAO,4CAAb;;IAEA,mBAAUA,IAAV,SAAkBtX,eAAeC,MAAf,CAAlB;IACH;;;;;IChHL;AACA;IAYA,IAAMjR,SAAS;IACX;IACAuoB,kBAFW,0BAEI1yB,IAFJ,EAEUuC,UAFV,EAEsB;IAAA;;IAC7B,YAAI7C,GAAG/B,MAAH,CAAU4E,UAAV,CAAJ,EAA2B;IACvBY,0BAAcnD,IAAd,EAAoB,KAAKuJ,KAAzB,EAAgC;IAC5BuB,qBAAKvI;IADuB,aAAhC;IAGH,SAJD,MAIO,IAAI7C,GAAGtB,KAAH,CAASmE,UAAT,CAAJ,EAA0B;IAC7BA,uBAAW1C,OAAX,CAAmB,qBAAa;IAC5BsD,8BAAcnD,IAAd,EAAoB,MAAKuJ,KAAzB,EAAgCopB,SAAhC;IACH,aAFD;IAGH;IACJ,KAZU;;;IAcX;IACA;IACAC,UAhBW,kBAgBJx3B,KAhBI,EAgBG;IAAA;;IACV,YAAI,CAACuQ,QAAQvQ,KAAR,EAAe,gBAAf,CAAL,EAAuC;IACnC,iBAAKiQ,KAAL,CAAWwH,IAAX,CAAgB,uBAAhB;IACA;IACH;;IAED;IACA7I,cAAMkB,cAAN,CAAqBhL,IAArB,CAA0B,IAA1B;;IAEA;IACA,aAAK4xB,OAAL,CAAa5xB,IAAb,CACI,IADJ,EAEI,YAAM;IACF;IACA,mBAAKlB,OAAL,CAAaiM,OAAb,GAAuB,EAAvB;;IAEA;IACA7H,0BAAc,OAAKmG,KAAnB;IACA,mBAAKA,KAAL,GAAa,IAAb;;IAEA;IACA,gBAAI7J,GAAGnB,OAAH,CAAW,OAAK8C,QAAL,CAAcC,SAAzB,CAAJ,EAAyC;IACrC,uBAAKD,QAAL,CAAcC,SAAd,CAAwB0D,eAAxB,CAAwC,OAAxC;IACH;;IAED;IAbE,gBAcMkF,OAdN,GAcwB9O,KAdxB,CAcM8O,OAdN;IAAA,gBAcelK,IAdf,GAcwB5E,KAdxB,CAce4E,IAdf;;IAAA,yCAe4CkK,OAf5C;IAAA;IAAA,+CAeOzB,QAfP;IAAA,gBAeOA,QAfP,sCAekBgY,UAAUzW,KAf5B;IAAA,gBAemCc,GAfnC,aAemCA,GAfnC;;IAgBF,gBAAM+nB,UAAUpqB,aAAa,OAAb,GAAuBzI,IAAvB,GAA8B,KAA9C;IACA,gBAAMuC,aAAakG,aAAa,OAAb,GAAuB,EAAvB,GAA4B,EAAEqC,QAAF,EAA/C;;IAEApP,mBAAOkF,MAAP,CAAc,MAAd,EAAoB;IAChB6H,kCADgB;IAEhBzI,0BAFgB;IAGhB;IACAjB,2BAAWsJ,QAAQG,KAAR,CAAcxI,IAAd,EAAoByI,QAApB,EAA8B,OAAK0C,MAAL,CAAYzC,WAA1C,CAJK;IAKhB;IACAa,uBAAO1G,cAAcgwB,OAAd,EAAuBtwB,UAAvB;IANS,aAApB;;IASA;IACA,mBAAKlB,QAAL,CAAcC,SAAd,CAAwBc,WAAxB,CAAoC,OAAKmH,KAAzC;;IAEA;IACA,gBAAI7J,GAAGxB,OAAH,CAAW9C,MAAMkiB,QAAjB,CAAJ,EAAgC;IAC5B,uBAAKnS,MAAL,CAAYmS,QAAZ,GAAuBliB,MAAMkiB,QAA7B;IACH;;IAED;IACA,gBAAI,OAAKhU,OAAT,EAAkB;IACd,oBAAI,OAAK6B,MAAL,CAAY2nB,WAAhB,EAA6B;IACzB,2BAAKvpB,KAAL,CAAW3G,YAAX,CAAwB,aAAxB,EAAuC,EAAvC;IACH;IACD,oBAAI,OAAKuI,MAAL,CAAYmS,QAAhB,EAA0B;IACtB,2BAAK/T,KAAL,CAAW3G,YAAX,CAAwB,UAAxB,EAAoC,EAApC;IACH;IACD,oBAAI,CAAClD,GAAGb,KAAH,CAASzD,MAAMwkB,MAAf,CAAL,EAA6B;IACzB,2BAAKA,MAAL,GAAcxkB,MAAMwkB,MAApB;IACH;IACD,oBAAI,OAAKzU,MAAL,CAAY2S,IAAZ,CAAiBhC,MAArB,EAA6B;IACzB,2BAAKvS,KAAL,CAAW3G,YAAX,CAAwB,MAAxB,EAAgC,EAAhC;IACH;IACD,oBAAI,OAAKuI,MAAL,CAAY2K,KAAhB,EAAuB;IACnB,2BAAKvM,KAAL,CAAW3G,YAAX,CAAwB,OAAxB,EAAiC,EAAjC;IACH;IACD,oBAAI,OAAKuI,MAAL,CAAYzC,WAAhB,EAA6B;IACzB,2BAAKa,KAAL,CAAW3G,YAAX,CAAwB,aAAxB,EAAuC,EAAvC;IACH;IACJ;;IAED;IACAiG,eAAGoa,YAAH,CAAgB/iB,IAAhB,CAAqB,MAArB;;IAEA;IACA,gBAAI,OAAKoJ,OAAT,EAAkB;IACda,uBAAOuoB,cAAP,CAAsBxyB,IAAtB,CAA2B,MAA3B,EAAiC,QAAjC,EAA2CgK,OAA3C;IACH;;IAED;IACA,mBAAKiB,MAAL,CAAY0C,KAAZ,GAAoBzS,MAAMyS,KAA1B;;IAEA;IACAtE,kBAAM+R,KAAN,CAAYpb,IAAZ,CAAiB,MAAjB;;IAEA;IACA,gBAAI,OAAKoJ,OAAT,EAAkB;IACd;IACA,oBAAI,YAAYlO,KAAhB,EAAuB;IACnB+O,2BAAOuoB,cAAP,CAAsBxyB,IAAtB,CAA2B,MAA3B,EAAiC,OAAjC,EAA0C9E,MAAMmd,MAAhD;IACH;;IAED;IACA,uBAAKhP,KAAL,CAAWyB,IAAX;IACH;;IAED;IACA,gBAAI,OAAK1B,OAAL,IAAiB,OAAKga,OAAL,IAAgB,CAAC,OAAKvkB,SAAL,CAAe8J,EAArD,EAA0D;IACtD;IACAA,mBAAGqa,KAAH,CAAShjB,IAAT,CAAc,MAAd;IACH;;IAED;IACA,mBAAK+R,UAAL,CAAgBpC,MAAhB;IACH,SA7FL,EA8FI,IA9FJ;IAgGH;IA1HU,CAAf;;ICbA;AACA;IA2BA;IACA;IACA;;IAEA;;QACMkjB;IACF,kBAAY7vB,MAAZ,EAAoBlE,OAApB,EAA6B;IAAA;;IAAA;;IACzB,aAAK8kB,MAAL,GAAc,EAAd;;IAEA;IACA,aAAK7iB,KAAL,GAAa,KAAb;IACA,aAAKgf,OAAL,GAAe,KAAf;IACA,aAAK+S,MAAL,GAAc,KAAd;;IAEA;IACA,aAAKppB,KAAL,GAAavB,QAAQuB,KAArB;;IAEA;IACA,aAAKL,KAAL,GAAarG,MAAb;;IAEA;IACA,YAAIxD,GAAG/B,MAAH,CAAU,KAAK4L,KAAf,CAAJ,EAA2B;IACvB,iBAAKA,KAAL,GAAaxG,SAAS2C,gBAAT,CAA0B,KAAK6D,KAA/B,CAAb;IACH;;IAED;IACA,YAAKvM,OAAOi2B,MAAP,IAAiB,KAAK1pB,KAAL,YAAsB0pB,MAAxC,IAAmDvzB,GAAGpB,QAAH,CAAY,KAAKiL,KAAjB,CAAnD,IAA8E7J,GAAGtB,KAAH,CAAS,KAAKmL,KAAd,CAAlF,EAAwG;IACpG;IACA,iBAAKA,KAAL,GAAa,KAAKA,KAAL,CAAW,CAAX,CAAb;IACH;;IAED;IACA,aAAK4B,MAAL,GAAcZ,OACV,EADU,EAEV8S,UAFU,EAGV0V,KAAK1V,QAHK,EAIVre,WAAW,EAJD,EAKT,YAAM;IACH,gBAAI;IACA,uBAAOwM,KAAKC,KAAL,CAAW,MAAKlC,KAAL,CAAWa,YAAX,CAAwB,kBAAxB,CAAX,CAAP;IACH,aAFD,CAEE,OAAOtM,CAAP,EAAU;IACR,uBAAO,EAAP;IACH;IACJ,SAND,EALU,CAAd;;IAcA;IACA,aAAKuD,QAAL,GAAgB;IACZC,uBAAW,IADC;IAEZmQ,qBAAS,EAFG;IAGZa,qBAAS,EAHG;IAIZJ,sBAAU,EAJE;IAKZC,oBAAQ,EALI;IAMZJ,sBAAU;IACN+B,sBAAM,IADA;IAEN4D,uBAAO,EAFD;IAGNF,sBAAM;IAHA,aANE;IAWZxF,sBAAU;IAXE,SAAhB;;IAcA;IACA,aAAKA,QAAL,GAAgB;IACZ8J,oBAAQ,IADI;IAEZ1D,0BAAc,CAAC,CAFH;IAGZ4D,kBAAM,IAAI1f,OAAJ;IAHM,SAAhB;;IAMA;IACA,aAAK2V,UAAL,GAAkB;IACd6J,oBAAQ;IADM,SAAlB;;IAIA;IACA,aAAK9c,OAAL,GAAe;IACX8Z,mBAAO,EADI;IAEX7N,qBAAS;IAFE,SAAf;;IAKA;IACA;IACA,aAAKI,KAAL,GAAa,IAAIwV,OAAJ,CAAY,KAAK1V,MAAL,CAAYE,KAAxB,CAAb;;IAEA;IACA,aAAKA,KAAL,CAAWC,GAAX,CAAe,QAAf,EAAyB,KAAKH,MAA9B;IACA,aAAKE,KAAL,CAAWC,GAAX,CAAe,SAAf,EAA0BjD,OAA1B;;IAEA;IACA,YAAI3I,GAAG3B,eAAH,CAAmB,KAAKwL,KAAxB,KAAkC,CAAC7J,GAAGnB,OAAH,CAAW,KAAKgL,KAAhB,CAAvC,EAA+D;IAC3D,iBAAK8B,KAAL,CAAWuH,KAAX,CAAiB,0CAAjB;IACA;IACH;;IAED;IACA,YAAI,KAAKrJ,KAAL,CAAW1I,IAAf,EAAqB;IACjB,iBAAKwK,KAAL,CAAWwH,IAAX,CAAgB,sBAAhB;IACA;IACH;;IAED;IACA,YAAI,CAAC,KAAK1H,MAAL,CAAYkD,OAAjB,EAA0B;IACtB,iBAAKhD,KAAL,CAAWuH,KAAX,CAAiB,kCAAjB;IACA;IACH;;IAED;IACA;IACA,YAAI,CAACvK,QAAQG,KAAR,GAAgBI,GAArB,EAA0B;IACtB,iBAAKyC,KAAL,CAAWuH,KAAX,CAAiB,0BAAjB;IACA;IACH;;IAED;IACA,YAAM8G,QAAQ,KAAKnQ,KAAL,CAAWxH,SAAX,CAAqB,IAArB,CAAd;IACA2X,cAAM4D,QAAN,GAAiB,KAAjB;IACA,aAAKjc,QAAL,CAAc6xB,QAAd,GAAyBxZ,KAAzB;;IAEA;IACA;IACA,YAAM1Z,OAAO,KAAKuJ,KAAL,CAAWspB,OAAX,CAAmB5lB,WAAnB,EAAb;;IAEA;IACA,YAAIqS,SAAS,IAAb;IACA,YAAI1gB,MAAM,IAAV;;IAEA;IACA,gBAAQoB,IAAR;IACI,iBAAK,KAAL;IACI;IACAsf,yBAAS,KAAK/V,KAAL,CAAWtD,aAAX,CAAyB,QAAzB,CAAT;;IAEA;IACA,oBAAIvG,GAAGnB,OAAH,CAAW+gB,MAAX,CAAJ,EAAwB;IACpB;IACA1gB,0BAAMmc,SAASuE,OAAOlV,YAAP,CAAoB,KAApB,CAAT,CAAN;IACA,yBAAK3B,QAAL,GAAgBkY,iBAAiB/hB,IAAI0N,QAAJ,EAAjB,CAAhB;;IAEA;IACA,yBAAKjL,QAAL,CAAcC,SAAd,GAA0B,KAAKiI,KAA/B;IACA,yBAAKA,KAAL,GAAa+V,MAAb;;IAEA;IACA,yBAAKje,QAAL,CAAcC,SAAd,CAAwB8C,SAAxB,GAAoC,EAApC;;IAEA;IACA,wBAAIxF,IAAIu0B,MAAJ,CAAW51B,MAAf,EAAuB;IACnB,4BAAM61B,SAAS,CAAC,GAAD,EAAM,MAAN,CAAf;;IAEA,4BAAIA,OAAOztB,QAAP,CAAgB/G,IAAIy0B,YAAJ,CAAiBn0B,GAAjB,CAAqB,UAArB,CAAhB,CAAJ,EAAuD;IACnD,iCAAKiM,MAAL,CAAYmS,QAAZ,GAAuB,IAAvB;IACH;IACD,4BAAI8V,OAAOztB,QAAP,CAAgB/G,IAAIy0B,YAAJ,CAAiBn0B,GAAjB,CAAqB,MAArB,CAAhB,CAAJ,EAAmD;IAC/C,iCAAKiM,MAAL,CAAY2S,IAAZ,CAAiBhC,MAAjB,GAA0B,IAA1B;IACH;;IAED;IACA;IACA,4BAAI,KAAKN,SAAT,EAAoB;IAChB,iCAAKrQ,MAAL,CAAYzC,WAAZ,GAA0B0qB,OAAOztB,QAAP,CAAgB/G,IAAIy0B,YAAJ,CAAiBn0B,GAAjB,CAAqB,aAArB,CAAhB,CAA1B;IACA,iCAAKiM,MAAL,CAAY+f,EAAZ,GAAiBtsB,IAAIy0B,YAAJ,CAAiBn0B,GAAjB,CAAqB,IAArB,CAAjB;IACH,yBAHD,MAGO;IACH,iCAAKiM,MAAL,CAAYzC,WAAZ,GAA0B,IAA1B;IACH;IACJ;IACJ,iBAhCD,MAgCO;IACH;IACA,yBAAKD,QAAL,GAAgB,KAAKc,KAAL,CAAWa,YAAX,CAAwB,KAAKe,MAAL,CAAY5I,UAAZ,CAAuBia,KAAvB,CAA6B/T,QAArD,CAAhB;;IAEA;IACA,yBAAKc,KAAL,CAAWvE,eAAX,CAA2B,KAAKmG,MAAL,CAAY5I,UAAZ,CAAuBia,KAAvB,CAA6B/T,QAAxD;IACH;;IAED;IACA,oBAAI/I,GAAGb,KAAH,CAAS,KAAK4J,QAAd,KAA2B,CAAC/M,OAAO8B,IAAP,CAAYijB,SAAZ,EAAuB9a,QAAvB,CAAgC,KAAK8C,QAArC,CAAhC,EAAgF;IAC5E,yBAAK4C,KAAL,CAAWuH,KAAX,CAAiB,gCAAjB;IACA;IACH;;IAED;IACA,qBAAK5S,IAAL,GAAY0gB,MAAMnY,KAAlB;;IAEA;;IAEJ,iBAAK,OAAL;IACA,iBAAK,OAAL;IACI,qBAAKvI,IAAL,GAAYA,IAAZ;IACA,qBAAKyI,QAAL,GAAgBgY,UAAUzW,KAA1B;;IAEA;IACA,oBAAI,KAAKT,KAAL,CAAWxE,YAAX,CAAwB,aAAxB,CAAJ,EAA4C;IACxC,yBAAKoG,MAAL,CAAY2nB,WAAZ,GAA0B,IAA1B;IACH;IACD,oBAAI,KAAKvpB,KAAL,CAAWxE,YAAX,CAAwB,UAAxB,CAAJ,EAAyC;IACrC,yBAAKoG,MAAL,CAAYmS,QAAZ,GAAuB,IAAvB;IACH;IACD,oBAAI,KAAK/T,KAAL,CAAWxE,YAAX,CAAwB,aAAxB,CAAJ,EAA4C;IACxC,yBAAKoG,MAAL,CAAYzC,WAAZ,GAA0B,IAA1B;IACH;IACD,oBAAI,KAAKa,KAAL,CAAWxE,YAAX,CAAwB,OAAxB,CAAJ,EAAsC;IAClC,yBAAKoG,MAAL,CAAY2K,KAAZ,GAAoB,IAApB;IACH;IACD,oBAAI,KAAKvM,KAAL,CAAWxE,YAAX,CAAwB,MAAxB,CAAJ,EAAqC;IACjC,yBAAKoG,MAAL,CAAY2S,IAAZ,CAAiBhC,MAAjB,GAA0B,IAA1B;IACH;;IAED;;IAEJ;IACI,qBAAKzQ,KAAL,CAAWuH,KAAX,CAAiB,gCAAjB;IACA;IAnFR;;IAsFA;IACA,aAAK7T,SAAL,GAAiBsJ,QAAQG,KAAR,CAAc,KAAKxI,IAAnB,EAAyB,KAAKyI,QAA9B,EAAwC,KAAK0C,MAAL,CAAYzC,WAApD,CAAjB;;IAEA;IACA,YAAI,CAAC,KAAK3J,SAAL,CAAe6J,GAApB,EAAyB;IACrB,iBAAKyC,KAAL,CAAWuH,KAAX,CAAiB,0BAAjB;IACA;IACH;;IAED,aAAK9S,cAAL,GAAsB,EAAtB;;IAEA;IACA,aAAK2f,SAAL,GAAiB,IAAIsE,SAAJ,CAAc,IAAd,CAAjB;;IAEA;IACA,aAAKzV,OAAL,GAAe,IAAIF,OAAJ,CAAY,IAAZ,CAAf;;IAEA;IACA,aAAK7E,KAAL,CAAW1I,IAAX,GAAkB,IAAlB;;IAEA;IACA,YAAI,CAACnB,GAAGnB,OAAH,CAAW,KAAK8C,QAAL,CAAcC,SAAzB,CAAL,EAA0C;IACtC,iBAAKD,QAAL,CAAcC,SAAd,GAA0BuB,cAAc,KAAd,CAA1B;IACArB,iBAAK,KAAK+H,KAAV,EAAiB,KAAKlI,QAAL,CAAcC,SAA/B;IACH;;IAED;IACAuH,WAAGoa,YAAH,CAAgB/iB,IAAhB,CAAqB,IAArB;;IAEA;IACAqJ,cAAM+R,KAAN,CAAYpb,IAAZ,CAAiB,IAAjB;;IAEA;IACA,YAAI,KAAKiL,MAAL,CAAYE,KAAhB,EAAuB;IACnBpL,eAAGC,IAAH,CAAQ,IAAR,EAAc,KAAKmB,QAAL,CAAcC,SAA5B,EAAuC,KAAK6J,MAAL,CAAYxL,MAAZ,CAAmBgU,IAAnB,CAAwB,GAAxB,CAAvC,EAAqE,iBAAS;IAC1E,sBAAKtI,KAAL,CAAWC,GAAX,aAAyB7M,MAAMuB,IAA/B;IACH,aAFD;IAGH;;IAED;IACA;IACA,YAAI,KAAKsJ,OAAL,IAAiB,KAAKga,OAAL,IAAgB,CAAC,KAAKvkB,SAAL,CAAe8J,EAArD,EAA0D;IACtDA,eAAGqa,KAAH,CAAShjB,IAAT,CAAc,IAAd;IACH;;IAED;IACA,aAAKuf,SAAL,CAAene,SAAf;;IAEA;IACA,aAAKme,SAAL,CAAexB,MAAf;;IAEA;IACA,aAAKhM,UAAL,GAAkB,IAAIuP,UAAJ,CAAe,IAAf,CAAlB;;IAEA;IACA,aAAK1B,GAAL,GAAW,IAAIoN,GAAJ,CAAQ,IAAR,CAAX;;IAEA;IACA,YAAI,KAAK/hB,MAAL,CAAYmS,QAAhB,EAA0B;IACtB,iBAAKvS,IAAL;IACH;IACJ;;IAED;IACA;IACA;;IAEA;;;;;;;;;IA2BA;;;mCAGO;IACH,gBAAI,CAACrL,GAAGvB,QAAH,CAAY,KAAKoL,KAAL,CAAWwB,IAAvB,CAAL,EAAmC;IAC/B,uBAAO,IAAP;IACH;;IAED;IACA,mBAAO,KAAKxB,KAAL,CAAWwB,IAAX,EAAP;IACH;;IAED;;;;;;oCAGQ;IACJ,gBAAI,CAAC,KAAKgV,OAAN,IAAiB,CAACrgB,GAAGvB,QAAH,CAAY,KAAKoL,KAAL,CAAWmI,KAAvB,CAAtB,EAAqD;IACjD;IACH;;IAED,iBAAKnI,KAAL,CAAWmI,KAAX;IACH;;IAED;;;;;;;;IA4BA;;;;uCAIWtW,OAAO;IACd;IACA,gBAAMmE,SAASG,GAAGxB,OAAH,CAAW9C,KAAX,IAAoBA,KAApB,GAA4B,CAAC,KAAK2kB,OAAjD;;IAEA,gBAAIxgB,MAAJ,EAAY;IACR,qBAAKwL,IAAL;IACH,aAFD,MAEO;IACH,qBAAK2G,KAAL;IACH;IACJ;;IAED;;;;;;mCAGO;IACH,gBAAI,KAAKpI,OAAT,EAAkB;IACd,qBAAKoI,KAAL;IACA,qBAAKC,OAAL;IACH,aAHD,MAGO,IAAIjS,GAAGvB,QAAH,CAAY,KAAKoL,KAAL,CAAW6e,IAAvB,CAAJ,EAAkC;IACrC,qBAAK7e,KAAL,CAAW6e,IAAX;IACH;IACJ;;IAED;;;;;;sCAGU;IACN,iBAAK1d,WAAL,GAAmB,CAAnB;IACH;;IAED;;;;;;;mCAIOkD,UAAU;IACb,iBAAKlD,WAAL,GAAmB,KAAKA,WAAL,IAAoBhL,GAAGzB,MAAH,CAAU2P,QAAV,IAAsBA,QAAtB,GAAiC,KAAKzC,MAAL,CAAYyC,QAAjE,CAAnB;IACH;;IAED;;;;;;;oCAIQA,UAAU;IACd,iBAAKlD,WAAL,GAAmB,KAAKA,WAAL,IAAoBhL,GAAGzB,MAAH,CAAU2P,QAAV,IAAsBA,QAAtB,GAAiC,KAAKzC,MAAL,CAAYyC,QAAjE,CAAnB;IACH;;IAED;;;;;;;;;IAyHA;;;;2CAIe+G,MAAM;IACjB,gBAAMtC,SAAS,KAAK9I,KAAL,CAAWuM,KAAX,GAAmB,CAAnB,GAAuB,KAAKzD,MAA3C;IACA,iBAAKA,MAAL,GAAcA,UAAU3S,GAAGzB,MAAH,CAAU0W,IAAV,IAAkBA,IAAlB,GAAyB,CAAnC,CAAd;IACH;;IAED;;;;;;;2CAIeA,MAAM;IACjB,iBAAKgQ,cAAL,CAAoB,CAAChQ,IAArB;IACH;;IAED;;;;;;;;;IAiQA;;;;2CAIevZ,OAAO;IAClB4W,qBAASzS,MAAT,CAAgBW,IAAhB,CAAqB,IAArB,EAA2B9E,KAA3B,EAAkC,KAAlC;IACH;;IAED;;;;;;;;;IAkEA;;;;sCAIU;IACN;IACA,gBAAIiN,QAAQY,OAAZ,EAAqB;IACjB,qBAAKM,KAAL,CAAW+pB,8BAAX;IACH;IACJ;;IAED;;;;;;;2CAIe/zB,QAAQ;IACnB;IACA,gBAAI,KAAKR,SAAL,CAAe8J,EAAf,IAAqB,CAAC,KAAKsc,OAA/B,EAAwC;IACpC;IACA,oBAAMoO,WAAWjuB,SAAS,KAAKjE,QAAL,CAAcC,SAAvB,EAAkC,KAAK6J,MAAL,CAAYuH,UAAZ,CAAuBiL,YAAzD,CAAjB;;IAEA;IACA,oBAAMzY,QAAQ,OAAO3F,MAAP,KAAkB,WAAlB,GAAgC+H,SAAhC,GAA4C,CAAC/H,MAA3D;;IAEA;IACA,oBAAMi0B,SAASvuB,YAAY,KAAK5D,QAAL,CAAcC,SAA1B,EAAqC,KAAK6J,MAAL,CAAYuH,UAAZ,CAAuBiL,YAA5D,EAA0EzY,KAA1E,CAAf;;IAEA;IACA,oBAAIsuB,UAAU,KAAKroB,MAAL,CAAY6F,QAAZ,CAAqBrL,QAArB,CAA8B,UAA9B,CAAV,IAAuD,CAACjG,GAAGb,KAAH,CAAS,KAAKsM,MAAL,CAAY4G,QAArB,CAA5D,EAA4F;IACxFf,6BAASmI,UAAT,CAAoBjZ,IAApB,CAAyB,IAAzB,EAA+B,KAA/B;IACH;IACD;IACA,oBAAIszB,WAAWD,QAAf,EAAyB;IACrB,wBAAME,YAAYD,SAAS,gBAAT,GAA4B,eAA9C;IACAhzB,iCAAaN,IAAb,CAAkB,IAAlB,EAAwB,KAAKqJ,KAA7B,EAAoCkqB,SAApC;IACH;IACD,uBAAO,CAACD,MAAR;IACH;IACD,mBAAO,KAAP;IACH;;IAED;;;;;;;;kCAKG/0B,OAAOa,UAAU;IAChBW,eAAGC,IAAH,CAAQ,IAAR,EAAc,KAAKmB,QAAL,CAAcC,SAA5B,EAAuC7C,KAAvC,EAA8Ca,QAA9C;IACH;;IAED;;;;;;;;oCAKKb,OAAOa,UAAU;IAClBc,iBAAKF,IAAL,CAAU,IAAV,EAAgB,KAAKmB,QAAL,CAAcC,SAA9B,EAAyC7C,KAAzC,EAAgDa,QAAhD;IACH;;IAED;;;;;;;;mCAKIb,OAAOa,UAAU;IACjBa,gBAAI,KAAKkB,QAAL,CAAcC,SAAlB,EAA6B7C,KAA7B,EAAoCa,QAApC;IACH;;IAED;;;;;;;;;;oCAOQA,UAAwB;IAAA;;IAAA,gBAAdo0B,IAAc,uEAAP,KAAO;;IAC5B,gBAAI,CAAC,KAAKzyB,KAAV,EAAiB;IACb;IACH;;IAED,gBAAMglB,OAAO,SAAPA,IAAO,GAAM;IACf;IACAljB,yBAASsD,IAAT,CAAcgB,KAAd,CAAoBka,QAApB,GAA+B,EAA/B;;IAEA;IACA,uBAAK/E,KAAL,GAAa,IAAb;;IAEA;IACA,oBAAIkX,IAAJ,EAAU;IACN,wBAAIh4B,OAAO8B,IAAP,CAAY,OAAK6D,QAAjB,EAA2B9D,MAA/B,EAAuC;IACnC;IACA6F,sCAAc,OAAK/B,QAAL,CAAcoQ,OAAd,CAAsB1G,IAApC;IACA3H,sCAAc,OAAK/B,QAAL,CAAc2Q,QAA5B;IACA5O,sCAAc,OAAK/B,QAAL,CAAc2P,QAA5B;IACA5N,sCAAc,OAAK/B,QAAL,CAAcI,OAA5B;;IAEA;IACA,+BAAKJ,QAAL,CAAcoQ,OAAd,CAAsB1G,IAAtB,GAA6B,IAA7B;IACA,+BAAK1J,QAAL,CAAc2Q,QAAd,GAAyB,IAAzB;IACA,+BAAK3Q,QAAL,CAAc2P,QAAd,GAAyB,IAAzB;IACA,+BAAK3P,QAAL,CAAcI,OAAd,GAAwB,IAAxB;IACH;;IAED;IACA,wBAAI/B,GAAGvB,QAAH,CAAYmB,QAAZ,CAAJ,EAA2B;IACvBA;IACH;IACJ,iBAnBD,MAmBO;IACH;IACAyB,oCAAgBb,IAAhB,CAAqB,MAArB;;IAEA;IACAuD,mCAAe,OAAKpC,QAAL,CAAc6xB,QAA7B,EAAuC,OAAK7xB,QAAL,CAAcC,SAArD;;IAEA;IACAd,iCAAaN,IAAb,CAAkB,MAAlB,EAAwB,OAAKmB,QAAL,CAAc6xB,QAAtC,EAAgD,WAAhD,EAA6D,IAA7D;;IAEA;IACA,wBAAIxzB,GAAGvB,QAAH,CAAYmB,QAAZ,CAAJ,EAA2B;IACvBA,iCAASY,IAAT,CAAc,OAAKmB,QAAL,CAAc6xB,QAA5B;IACH;;IAED;IACA,2BAAKjyB,KAAL,GAAa,KAAb;;IAEA;IACAE,+BAAW,YAAM;IACb,+BAAKE,QAAL,GAAgB,IAAhB;IACA,+BAAKkI,KAAL,GAAa,IAAb;IACH,qBAHD,EAGG,GAHH;IAIH;IACJ,aAnDD;;IAqDA;IACA,iBAAK6e,IAAL;;IAEA;IACA,gBAAI,KAAK9e,OAAT,EAAkB;IACd;IACAua,6BAAa,KAAKC,MAAL,CAAY7D,OAAzB;;IAEA;IACApX,mBAAGiK,oBAAH,CAAwB5S,IAAxB,CAA6B,IAA7B,EAAmC,IAAnC;;IAEA;IACA+lB;IACH,aATD,MASO,IAAI,KAAKzK,SAAT,EAAoB;IACvB;IACAiR,8BAAc,KAAK3I,MAAL,CAAY4I,SAA1B;IACAD,8BAAc,KAAK3I,MAAL,CAAY/D,OAA1B;;IAEA;IACA,oBAAI,KAAKvD,KAAL,KAAe,IAAf,IAAuB9c,GAAGvB,QAAH,CAAY,KAAKqe,KAAL,CAAWsV,OAAvB,CAA3B,EAA4D;IACxD,yBAAKtV,KAAL,CAAWsV,OAAX;IACH;;IAED;IACA7L;IACH,aAZM,MAYA,IAAI,KAAKlN,OAAT,EAAkB;IACrB;IACA;IACA,oBAAI,KAAKyD,KAAL,KAAe,IAAnB,EAAyB;IACrB,yBAAKA,KAAL,CAAWmX,MAAX,GAAoBpyB,IAApB,CAAyB0kB,IAAzB;IACH;;IAED;IACA9kB,2BAAW8kB,IAAX,EAAiB,GAAjB;IACH;IACJ;;IAED;;;;;;;qCAISjmB,MAAM;IACX,mBAAOqI,QAAQc,IAAR,CAAajJ,IAAb,CAAkB,IAAlB,EAAwBF,IAAxB,CAAP;IACH;;IAED;;;;;;;;;mCApwBc;IACV,mBAAOzE,QAAQ,KAAKkN,QAAL,KAAkBgY,UAAUzW,KAApC,CAAP;IACH;;;mCAEa;IACV,mBAAOzO,QAAQ,KAAKigB,SAAL,IAAkB,KAAKzC,OAA/B,CAAP;IACH;;;mCAEe;IACZ,mBAAOxd,QAAQ,KAAKkN,QAAL,KAAkBgY,UAAUlB,OAApC,CAAP;IACH;;;mCAEa;IACV,mBAAOhkB,QAAQ,KAAKkN,QAAL,KAAkBgY,UAAUrB,KAApC,CAAP;IACH;;;mCAEa;IACV,mBAAO7jB,QAAQ,KAAKyE,IAAL,KAAc0gB,MAAMnY,KAA5B,CAAP;IACH;;;mCAEa;IACV,mBAAOhN,QAAQ,KAAKyE,IAAL,KAAc0gB,MAAMpY,KAA5B,CAAP;IACH;;;mCA4Ba;IACV,mBAAO/M,QAAQ,KAAK0F,KAAL,IAAc,CAAC,KAAK0J,MAApB,IAA8B,CAAC,KAAKya,KAA5C,CAAP;IACH;;IAED;;;;;;mCAGa;IACT,mBAAO7pB,QAAQ,KAAKgO,KAAL,CAAWoB,MAAnB,CAAP;IACH;;IAED;;;;;;mCAGc;IACV,mBAAOpP,QAAQ,KAAKoP,MAAL,IAAe,KAAKD,WAAL,KAAqB,CAA5C,CAAP;IACH;;IAED;;;;;;mCAGY;IACR,mBAAOnP,QAAQ,KAAKgO,KAAL,CAAW6b,KAAnB,CAAP;IACH;;;iCAwDehqB,OAAO;IACnB;IACA,gBAAI,CAAC,KAAKoX,QAAV,EAAoB;IAChB;IACH;;IAED;IACA,gBAAMohB,eAAel0B,GAAGzB,MAAH,CAAU7C,KAAV,KAAoBA,QAAQ,CAAjD;;IAEA;IACA,iBAAKmO,KAAL,CAAWmB,WAAX,GAAyBkpB,eAAe1nB,KAAKwI,GAAL,CAAStZ,KAAT,EAAgB,KAAKoX,QAArB,CAAf,GAAgD,CAAzE;;IAEA;IACA,iBAAKnH,KAAL,CAAWC,GAAX,iBAA6B,KAAKZ,WAAlC;IACH;;IAED;;;;mCAGkB;IACd,mBAAO9O,OAAO,KAAK2N,KAAL,CAAWmB,WAAlB,CAAP;IACH;;IAED;;;;;;mCAGe;IAAA,gBACHyL,QADG,GACU,KAAK5M,KADf,CACH4M,QADG;;IAGX;;IACA,gBAAIzW,GAAGzB,MAAH,CAAUkY,QAAV,CAAJ,EAAyB;IACrB,uBAAOA,QAAP;IACH;;IAED;IACA;IACA;IACA,gBAAIA,YAAYA,SAAS5Y,MAArB,IAA+B,KAAKiV,QAAL,GAAgB,CAAnD,EAAsD;IAClD,uBAAO2D,SAAS0I,GAAT,CAAa,CAAb,IAAkB,KAAKrM,QAA9B;IACH;;IAED,mBAAO,CAAP;IACH;;IAED;;;;;;mCAGc;IACV,mBAAOjX,QAAQ,KAAKgO,KAAL,CAAW2N,OAAnB,CAAP;IACH;;IAED;;;;;;mCAGe;IACX;IACA,gBAAM2c,eAAe/c,WAAW,KAAK3L,MAAL,CAAYqH,QAAvB,CAArB;;IAEA;IACA,gBAAMshB,eAAe,CAAC,KAAKvqB,KAAL,IAAc,EAAf,EAAmBiJ,QAAxC;IACA,gBAAMA,WAAW,CAAC9S,GAAGzB,MAAH,CAAU61B,YAAV,CAAD,IAA4BA,iBAAiBC,QAA7C,GAAwD,CAAxD,GAA4DD,YAA7E;;IAEA;IACA,mBAAOD,gBAAgBrhB,QAAvB;IACH;;IAED;;;;;;;iCAIW9P,OAAO;IACd,gBAAI2P,SAAS3P,KAAb;IACA,gBAAMgK,MAAM,CAAZ;IACA,gBAAMgI,MAAM,CAAZ;;IAEA,gBAAIhV,GAAG/B,MAAH,CAAU0U,MAAV,CAAJ,EAAuB;IACnBA,yBAASzW,OAAOyW,MAAP,CAAT;IACH;;IAED;IACA,gBAAI,CAAC3S,GAAGzB,MAAH,CAAUoU,MAAV,CAAL,EAAwB;IACpBA,yBAAS,KAAK/D,OAAL,CAAapP,GAAb,CAAiB,QAAjB,CAAT;IACH;;IAED;IACA,gBAAI,CAACQ,GAAGzB,MAAH,CAAUoU,MAAV,CAAL,EAAwB;IACjBA,sBADiB,GACN,KAAKlH,MADC,CACjBkH,MADiB;IAEvB;;IAED;IACA,gBAAIA,SAAS3F,GAAb,EAAkB;IACd2F,yBAAS3F,GAAT;IACH;IACD;IACA,gBAAI2F,SAASqC,GAAb,EAAkB;IACdrC,yBAASqC,GAAT;IACH;;IAED;IACA,iBAAKvJ,MAAL,CAAYkH,MAAZ,GAAqBA,MAArB;;IAEA;IACA,iBAAK9I,KAAL,CAAW8I,MAAX,GAAoBA,MAApB;;IAEA;IACA,gBAAI,CAAC3S,GAAGb,KAAH,CAAS6D,KAAT,CAAD,IAAoB,KAAKoT,KAAzB,IAAkCzD,SAAS,CAA/C,EAAkD;IAC9C,qBAAKyD,KAAL,GAAa,KAAb;IACH;IACJ;;IAED;;;;mCAGa;IACT,mBAAOla,OAAO,KAAK2N,KAAL,CAAW8I,MAAlB,CAAP;IACH;;;iCAuBSP,MAAM;IACZ,gBAAIvS,SAASuS,IAAb;;IAEA;IACA,gBAAI,CAACpS,GAAGxB,OAAH,CAAWqB,MAAX,CAAL,EAAyB;IACrBA,yBAAS,KAAK+O,OAAL,CAAapP,GAAb,CAAiB,OAAjB,CAAT;IACH;;IAED;IACA,gBAAI,CAACQ,GAAGxB,OAAH,CAAWqB,MAAX,CAAL,EAAyB;IACrBA,yBAAS,KAAK4L,MAAL,CAAY2K,KAArB;IACH;;IAED;IACA,iBAAK3K,MAAL,CAAY2K,KAAZ,GAAoBvW,MAApB;;IAEA;IACA,iBAAKgK,KAAL,CAAWuM,KAAX,GAAmBvW,MAAnB;IACH;;IAED;;;;mCAGY;IACR,mBAAOhE,QAAQ,KAAKgO,KAAL,CAAWuM,KAAnB,CAAP;IACH;;IAED;;;;;;mCAGe;IACX;IACA,gBAAI,CAAC,KAAKxM,OAAV,EAAmB;IACf,uBAAO,IAAP;IACH;;IAED,gBAAI,KAAK6b,OAAT,EAAkB;IACd,uBAAO,IAAP;IACH;;IAED;IACA,mBACI5pB,QAAQ,KAAKgO,KAAL,CAAWyqB,WAAnB,KACAz4B,QAAQ,KAAKgO,KAAL,CAAW0qB,2BAAnB,CADA,IAEA14B,QAAQ,KAAKgO,KAAL,CAAW2qB,WAAX,IAA0B,KAAK3qB,KAAL,CAAW2qB,WAAX,CAAuB32B,MAAzD,CAHJ;IAKH;;IAED;;;;;;;iCAIUnC,OAAO;IACb,gBAAI0d,QAAQ,IAAZ;;IAEA,gBAAIpZ,GAAGzB,MAAH,CAAU7C,KAAV,CAAJ,EAAsB;IAClB0d,wBAAQ1d,KAAR;IACH;;IAED,gBAAI,CAACsE,GAAGzB,MAAH,CAAU6a,KAAV,CAAL,EAAuB;IACnBA,wBAAQ,KAAKxK,OAAL,CAAapP,GAAb,CAAiB,OAAjB,CAAR;IACH;;IAED,gBAAI,CAACQ,GAAGzB,MAAH,CAAU6a,KAAV,CAAL,EAAuB;IACnBA,wBAAQ,KAAK3N,MAAL,CAAY2N,KAAZ,CAAkBiF,QAA1B;IACH;;IAED;IACA,gBAAIjF,QAAQ,GAAZ,EAAiB;IACbA,wBAAQ,GAAR;IACH;IACD,gBAAIA,QAAQ,GAAZ,EAAiB;IACbA,wBAAQ,GAAR;IACH;;IAED,gBAAI,CAAC,KAAK3N,MAAL,CAAY2N,KAAZ,CAAkB9Z,OAAlB,CAA0B2G,QAA1B,CAAmCmT,KAAnC,CAAL,EAAgD;IAC5C,qBAAKzN,KAAL,CAAWwH,IAAX,yBAAsCiG,KAAtC;IACA;IACH;;IAED;IACA,iBAAK3N,MAAL,CAAY2N,KAAZ,CAAkBiF,QAAlB,GAA6BjF,KAA7B;;IAEA;IACA,iBAAKvP,KAAL,CAAWyiB,YAAX,GAA0BlT,KAA1B;IACH;;IAED;;;;mCAGY;IACR,mBAAOld,OAAO,KAAK2N,KAAL,CAAWyiB,YAAlB,CAAP;IACH;;IAED;;;;;;;;iCAKY5wB,OAAO;IACf,gBAAM+P,SAAS,KAAKA,MAAL,CAAYF,OAA3B;IACA,gBAAMjM,UAAU,KAAKA,OAAL,CAAaiM,OAA7B;;IAEA,gBAAI,CAACjM,QAAQzB,MAAb,EAAqB;IACjB;IACH;;IAED,gBAAI0N,UAAU,CACV,CAACvL,GAAGb,KAAH,CAASzD,KAAT,CAAD,IAAoBQ,OAAOR,KAAP,CADV,EAEV,KAAKkT,OAAL,CAAapP,GAAb,CAAiB,SAAjB,CAFU,EAGViM,OAAO4S,QAHG,EAIV5S,OAAOkN,OAJG,EAKZjR,IALY,CAKP1H,GAAGzB,MALI,CAAd;;IAOA,gBAAI,CAACe,QAAQ2G,QAAR,CAAiBsF,OAAjB,CAAL,EAAgC;IAC5B,oBAAMvI,QAAQsL,QAAQhP,OAAR,EAAiBiM,OAAjB,CAAd;IACA,qBAAKI,KAAL,CAAWwH,IAAX,kCAA+C5H,OAA/C,gBAAiEvI,KAAjE;IACAuI,0BAAUvI,KAAV;IACH;;IAED;IACAlC,yBAAaN,IAAb,CAAkB,IAAlB,EAAwB,KAAKqJ,KAA7B,EAAoC,kBAApC,EAAwD,KAAxD,EAA+D,EAAE0B,gBAAF,EAA/D;;IAEA;IACAE,mBAAO4S,QAAP,GAAkB9S,OAAlB;;IAEA;IACA,iBAAK1B,KAAL,CAAW0B,OAAX,GAAqBA,OAArB;IACH;;IAED;;;;mCAGc;IACV,mBAAO,KAAK1B,KAAL,CAAW0B,OAAlB;IACH;;IAED;;;;;;;;iCAKS7P,OAAO;IACZ,gBAAMmE,SAASG,GAAGxB,OAAH,CAAW9C,KAAX,IAAoBA,KAApB,GAA4B,KAAK+P,MAAL,CAAY2S,IAAZ,CAAiBhC,MAA5D;IACA,iBAAK3Q,MAAL,CAAY2S,IAAZ,CAAiBhC,MAAjB,GAA0Bvc,MAA1B;IACA,iBAAKgK,KAAL,CAAWuU,IAAX,GAAkBve,MAAlB;;IAEA;IACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAyCH;;IAED;;;;mCAGW;IACP,mBAAOhE,QAAQ,KAAKgO,KAAL,CAAWuU,IAAnB,CAAP;IACH;;IAED;;;;;;;iCAIW1iB,OAAO;IACd+O,mBAAOyoB,MAAP,CAAc1yB,IAAd,CAAmB,IAAnB,EAAyB9E,KAAzB;IACH;;IAED;;;;mCAGa;IACT,mBAAO,KAAKmO,KAAL,CAAWmf,UAAlB;IACH;;IAED;;;;;;;iCAIWttB,OAAO;IACd,gBAAI,CAAC,KAAKmgB,OAAV,EAAmB;IACf,qBAAKlQ,KAAL,CAAWwH,IAAX,CAAgB,kCAAhB;IACA;IACH;;IAEDhK,eAAGwa,SAAH,CAAanjB,IAAb,CAAkB,IAAlB,EAAwB9E,KAAxB,EAA+B,KAA/B,EAAsCgV,KAAtC,CAA4C,YAAM,EAAlD;IACH;;IAED;;;;mCAGa;IACT,gBAAI,CAAC,KAAKmL,OAAV,EAAmB;IACf,uBAAO,IAAP;IACH;;IAED,mBAAO,KAAKhS,KAAL,CAAWa,YAAX,CAAwB,QAAxB,CAAP;IACH;;IAED;;;;;;;iCAIahP,OAAO;IAChB,gBAAMmE,SAASG,GAAGxB,OAAH,CAAW9C,KAAX,IAAoBA,KAApB,GAA4B,KAAK+P,MAAL,CAAYmS,QAAvD;IACA,iBAAKnS,MAAL,CAAYmS,QAAZ,GAAuB/d,MAAvB;IACH;;IAED;;;;mCAGe;IACX,mBAAOhE,QAAQ,KAAK4P,MAAL,CAAYmS,QAApB,CAAP;IACH;;;iCAcgBliB,OAAO;IACpB4W,qBAASvH,GAAT,CAAavK,IAAb,CAAkB,IAAlB,EAAwB9E,KAAxB,EAA+B,KAA/B;IACH;;IAED;;;;mCAGmB;IAAA,4BACmB,KAAK4W,QADxB;IAAA,gBACPyG,OADO,aACPA,OADO;IAAA,gBACEL,YADF,aACEA,YADF;;IAEf,mBAAOK,UAAUL,YAAV,GAAyB,CAAC,CAAjC;IACH;;IAED;;;;;;;;iCAKahd,OAAO;IAChB4W,qBAASqK,WAAT,CAAqBnc,IAArB,CAA0B,IAA1B,EAAgC9E,KAAhC,EAAuC,KAAvC;IACH;;IAED;;;;mCAGe;IACX,mBAAO,CAAC4W,SAAS8K,eAAT,CAAyB5c,IAAzB,CAA8B,IAA9B,KAAuC,EAAxC,EAA4CwY,QAAnD;IACH;;IAED;;;;;;;;iCAKQtd,OAAO;IACX,gBAAM+4B,SAAS;IACXprB,qBAAK,oBADM;IAEXqrB,wBAAQ;IAFG,aAAf;;IAKA;IACA,gBAAI,CAAC/rB,QAAQU,GAAb,EAAkB;IACd;IACH;;IAED;IACA,gBAAMxJ,SAASG,GAAGxB,OAAH,CAAW9C,KAAX,IAAoBA,KAApB,GAA4B,KAAK2N,GAAL,KAAaorB,OAAOC,MAA/D;;IAEA;IACA,iBAAK7qB,KAAL,CAAWP,yBAAX,CAAqCzJ,SAAS40B,OAAOprB,GAAhB,GAAsBorB,OAAOC,MAAlE;IACH;;IAED;;;;mCAGU;IACN,gBAAI,CAAC/rB,QAAQU,GAAb,EAAkB;IACd,uBAAO,IAAP;IACH;;IAED,mBAAO,KAAKQ,KAAL,CAAW8qB,sBAAlB;IACH;;;sCA0LgBr0B,MAAMyI,UAAU2rB,QAAQ;IACrC,mBAAO/rB,QAAQG,KAAR,CAAcxI,IAAd,EAAoByI,QAApB,EAA8B2rB,MAA9B,CAAP;IACH;;IAED;;;;;;;;0CAKkBx1B,KAAK+F,IAAI;IACvB,mBAAO6K,WAAW5Q,GAAX,EAAgB+F,EAAhB,CAAP;IACH;;IAED;;;;;;;;kCAKaV,UAAwB;IAAA,gBAAdjF,OAAc,uEAAJ,EAAI;;IACjC,gBAAI0C,UAAU,IAAd;;IAEA,gBAAIhC,GAAG/B,MAAH,CAAUsG,QAAV,CAAJ,EAAyB;IACrBvC,0BAAUtF,MAAMuF,IAAN,CAAWoB,SAAS2C,gBAAT,CAA0BzB,QAA1B,CAAX,CAAV;IACH,aAFD,MAEO,IAAIvE,GAAGpB,QAAH,CAAY2F,QAAZ,CAAJ,EAA2B;IAC9BvC,0BAAUtF,MAAMuF,IAAN,CAAWsC,QAAX,CAAV;IACH,aAFM,MAEA,IAAIvE,GAAGtB,KAAH,CAAS6F,QAAT,CAAJ,EAAwB;IAC3BvC,0BAAUuC,SAASxB,MAAT,CAAgB/C,GAAGnB,OAAnB,CAAV;IACH;;IAED,gBAAImB,GAAGb,KAAH,CAAS6C,OAAT,CAAJ,EAAuB;IACnB,uBAAO,IAAP;IACH;;IAED,mBAAOA,QAAQ4I,GAAR,CAAY;IAAA,uBAAK,IAAIyoB,IAAJ,CAASuB,CAAT,EAAYt1B,OAAZ,CAAL;IAAA,aAAZ,CAAP;IACH;;;;;IAGL+zB,KAAK1V,QAAL,GAAgB9R,UAAU8R,UAAV,CAAhB","file":"plyr.js","sourcesContent":["// ==========================================================================\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 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 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 target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n // Inject the new <element>\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 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.hasAttribute('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.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 null;\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// Get the focused element\nexport function getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\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 = getFocusElement();\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// 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(event => element.style[event] !== undefined);\n\n return is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element) {\n setTimeout(() => {\n toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\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 });\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// 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 './utils/is';\nimport { getDeep } from './utils/objects';\nimport { replaceAll } from './utils/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// 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// 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// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n createElement,\n emptyElement,\n getAttributesFromSelector,\n getElement,\n getElements,\n hasClass,\n matches,\n removeElement,\n setAttributes,\n toggleClass,\n toggleHidden,\n} from './utils/elements';\nimport { off, on } from './utils/events';\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(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\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 // Toggle classname when pressed property is set\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 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: `plyr__time ${attributes.class}`,\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 // Create a settings menu item\n createMenuItem({ value, list, type, title, badge = null, checked = false }) {\n const item = createElement('li');\n\n const label = createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = createElement(\n 'input',\n extend(getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\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}%`);\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 toggleTab(setting, toggle) {\n toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n setQualityMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\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.toggleTab.call(this, type, toggle);\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 // Empty the menu\n emptyElement(list);\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 // 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}×`;\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 // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[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('ul');\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.tabs[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(`input[value=\"${value}\"]`);\n\n if (is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n toggleHidden(this.elements.settings.tabs.loop, false);\n toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.loop.options);\n controls.toggleTab.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 // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n const tracks = captions.getTracks.call(this);\n\n // Toggle the pane and tab\n controls.toggleTab.call(this, type, tracks.length);\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 (!tracks.length) {\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 // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\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.toggleTab.call(this, type, toggle);\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 list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n emptyElement(list);\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 { tabs } = this.elements.settings;\n const visible = !is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!is.element(form) || !is.element(button)) {\n return;\n }\n\n const show = is.boolean(event) ? event : is.element(form) && form.hasAttribute('hidden');\n\n if (is.event(event)) {\n const isMenuItem = is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form 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 && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (is.element(form)) {\n toggleHidden(form, !show);\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\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 // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!is.element(pane)) {\n return;\n }\n\n // Are we targeting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\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.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || !['width', 'height'].includes(e.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 current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n toggleHidden(pane, false);\n\n const tabs = getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (is.empty(this.config.controls)) {\n return null;\n }\n\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 // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\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 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 menu = createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = createElement('div');\n\n const home = createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = 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 id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\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 button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\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 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 (is.string(this.config.controls) || is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\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 // 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 i18n from './i18n';\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 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 languages = dedupe(\n Array.from(navigator.languages || navigator.language || navigator.userLanguage).map(language => language.split('-')[0]),\n );\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: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\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 'qualitychange',\n 'qualityrequested',\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 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 if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\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 i18n from './i18n';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\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 browser from './utils/browser';\nimport { getElement, getElements, getFocusElement, 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\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\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 this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\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 // 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 = getFocusElement();\n if (\n is.element(focused) &&\n (focused !== this.player.elements.inputs.seek &&\n matches(focused, this.player.config.selectors.editable))\n ) {\n return;\n }\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 this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.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 (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.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 this.player.touch = true;\n\n // Add touch class\n toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n toggleListener.call(this.player, window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n toggleListener.call(this.player, document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n once.call(this.player, document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n on.call(this.player, this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n on.call(this.player, this.player.elements.container, 'focusout', event => {\n toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n // Add classname to tabbed elements\n on.call(this.player, this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n toggleClass(getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n this.player,\n this.player.elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (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(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n },\n );\n }\n\n // Listen for media events\n media() {\n // Time change on media\n on.call(this.player, this.player.media, 'timeupdate seeking seeked', event =>\n controls.timeUpdate.call(this.player, event),\n );\n\n // Display duration\n on.call(this.player, this.player.media, 'durationchange loadeddata loadedmetadata', event =>\n controls.durationUpdate.call(this.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(this.player, this.player.media, 'canplay', () => {\n toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n on.call(this.player, this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n on.call(this.player, this.player.media, 'progress playing seeking seeked', event =>\n controls.updateProgress.call(this.player, event),\n );\n\n // Handle volume changes\n on.call(this.player, this.player.media, 'volumechange', event =>\n controls.updateVolume.call(this.player, event),\n );\n\n // Handle play/pause\n on.call(this.player, this.player.media, 'playing play pause ended emptied timeupdate', event =>\n ui.checkPlaying.call(this.player, event),\n );\n\n // Loading state\n on.call(this.player, this.player.media, 'waiting canplay seeked playing', event =>\n ui.checkLoading.call(this.player, event),\n );\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(this.player, this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(this.player, `.${this.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(this.player, wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n on.call(\n this.player,\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(this.player, this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n on.call(this.player, this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n on.call(this.player, this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n on.call(this.player, this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = this.player.config.events.concat(['keyup', 'keydown']).join(' ');\n on.call(this.player, this.player.media, proxyEvents, event => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n triggerEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.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(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const bind = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n this.player,\n element,\n type,\n event => proxy(event, defaultHandler, customHandlerKey),\n passive && !hasCustomHandler,\n );\n };\n\n // Play/pause toggle\n if (this.player.elements.buttons.play) {\n Array.from(this.player.elements.buttons.play).forEach(button => {\n bind(button, 'click', this.player.togglePlay, 'play');\n });\n }\n\n // Pause\n bind(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n bind(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n bind(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n bind(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n bind(this.player.elements.buttons.captions, 'click', () => this.player.toggleCaptions());\n\n // Fullscreen toggle\n bind(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n bind(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n bind(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n bind(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n bind(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.currentTrack = Number(event.target.value);\n showHomeTab();\n },\n 'language',\n );\n } else if (matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n bind(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n bind(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n const code = event.keyCode ? event.keyCode : event.which;\n const eventType = event.type;\n\n if ((eventType === 'keydown' || eventType === 'keyup') && (code !== 39 && code !== 37)) {\n return;\n }\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\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('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n bind(\n this.player.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 this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !is.element(this.player.elements.display.duration)) {\n bind(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n bind(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(getElements.call(this.player, 'input[type=\"range\"]')).forEach(element => {\n bind(element, 'input', event => controls.updateRangeFill.call(this.player, event.target));\n });\n }\n\n // Seek tooltip\n bind(this.player.elements.progress, 'mouseenter mouseleave mousemove', event =>\n controls.updateSeekTooltip.call(this.player, event),\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n bind(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n bind(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Focus in/out on controls\n bind(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\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 // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n bind(\n this.player.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 this.player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = this.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 controls from '../controls';\nimport ui from '../ui';\nimport { dedupe } from '../utils/arrays';\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// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n const qualities = {\n hd2160: 2160,\n hd1440: 1440,\n hd1080: 1080,\n hd720: 720,\n large: 480,\n medium: 360,\n small: 240,\n tiny: 144,\n };\n\n const entry = Object.entries(qualities).find(entry => entry.includes(input));\n\n if (entry) {\n // Get the match corresponding to the input\n return entry.find(value => value !== input);\n }\n\n return 'default';\n}\n\nfunction mapQualityUnits(levels) {\n if (is.empty(levels)) {\n return levels;\n }\n\n return dedupe(levels.map(level => mapQualityUnit(level)));\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 onPlaybackQualityChange() {\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\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 // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n instance.setPlaybackQuality(mapQualityUnit(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 // Get quality\n controls.setQualityMenu.call(\n player,\n mapQualityUnits(instance.getAvailableQualityLevels()),\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 i18n from '../i18n';\nimport { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\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 // 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 // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\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.3.23\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 buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\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');\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')) {\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 this.ads = new Ads(this);\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 // Trigger request event\n triggerEvent.call(this, this.media, 'qualityrequested', false, { quality });\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 // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n triggerEvent.call(this, this.media, eventName);\n }\n return !hiding;\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"]}
\ No newline at end of file diff --git a/dist/plyr.min.js.map b/dist/plyr.min.js.map index cbeb2b85..b8825ebb 100644 --- a/dist/plyr.min.js.map +++ b/dist/plyr.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["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/objects.js","src/js/utils/strings.js","src/js/i18n.js","src/js/utils/arrays.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":["getConstructor","input","constructor","instanceOf","Boolean","isNullOrUndefined","isObject","Object","isString","String","isArray","Array","isNodeList","NodeList","isEmpty","length","keys","is","nullOrUndefined","object","number","Number","isNaN","string","boolean","function","Function","array","weakMap","WeakMap","nodeList","element","Element","textNode","Text","event","Event","cue","window","TextTrackCue","VTTCue","track","TextTrack","kind","url","URL","startsWith","hostname","e","empty","supportsPassiveListeners","supported","options","defineProperty","get","addEventListener","removeEventListener","toggleListener","callback","toggle","arguments","undefined","_this","this","passive","capture","events","split","forEach","type","eventListeners","push","on","call","off","once","onceCallback","_len","args","_key","apply","triggerEvent","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","wrap","elements","wrapper","targets","from","reverse","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","setAttributes","attributes","entries","filter","_ref","value","slicedToArray","_ref3","_ref4","key","setAttribute","createElement","text","document","innerText","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","s","selector","trim","className","replace","parts","charAt","class","id","toggleHidden","hidden","hide","hasAttribute","removeAttribute","toggleClass","force","method","classList","contains","hasClass","matches","prototype","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelectorAll","includes","getElements","container","getElement","querySelector","getFocusElement","focused","activeElement","body","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","find","style","range","browser","isIE","documentMode","isWebkit","documentElement","test","navigator","userAgent","isIPhone","platform","isIos","defaultCodecs","audio/ogg","audio/wav","video/webm","video/mp4","video/ogg","support","audio","video","check","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","inputType","_inputType$split","mediaType","isHTML5","media","canPlayType","err","textTracks","touch","transitions","reducedMotion","matchMedia","html5","getSources","source","getAttribute","getQualityOptions","map","extend","player","set","_player$media","currentTime","paused","preload","readyState","src","play","load","quality","cancelRequests","config","blankVideo","debug","log","getDeep","path","reduce","obj","target","sources","shift","concat","format","toString","match","i","replaceAll","RegExp","toTitleCase","toUpperCase","substr","toLowerCase","toCamelCase","toPascalCase","slice","getHTML","innerHTML","i18n","{seektime}","seekTime","{title}","title","_ref2","dedupe","item","indexOf","Storage","classCallCheck","enabled","storage","store","localStorage","getItem","json","JSON","parse","setItem","stringify","removeItem","fetch","responseType","Promise","resolve","reject","request","XMLHttpRequest","responseText","response","Error","status","open","send","loadSprite","hasId","exists","getElementById","update","data","insertAdjacentElement","useStorage","cached","prefix","content","then","result","catch","getHours","parseInt","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","cors","iconUrl","location","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","classNames","tooltip","error","warn","toggleNativeControls","createIcon","iconPath","iconPrefix","icon","createElementNS","role","focusable","use","setAttributeNS","createLabel","attr","join","createBadge","badge","menu","createButton","buttonType","button","label","labelPressed","iconPressed","control","controlPressed","enumerable","pressed","createRange","min","max","step","autocomplete","aria-label","aria-valuemin","aria-valuemax","aria-valuenow","updateRangeFill","createProgress","aria-hidden","suffixKey","played","suffix","createTime","createMenuItem","list","_ref$badge","_ref$checked","checked","radio","name","faux","insertAdjacentHTML","updateTimeDisplay","updateVolume","setRange","muted","updateProgress","current","toFixed","getElementsByTagName","nodeValue","setProgress","buffered","percent","setProperty","updateSeekTooltip","_this2","tooltips","clientRect","getBoundingClientRect","visible","_toggle","width","pageX","left","parseFloat","timeUpdate","invert","invertTime","seeking","durationUpdate","Math","pow","hasDuration","displayDuration","toggleTab","setting","tabs","setQualityMenu","_this3","panes","checkMenu","sort","a","b","sorting","getLabel","getBadge","updateSetting","pane","currentTrack","default","setCaptionsMenu","_this4","tracks","getTracks","toggled","language","unshift","bind","setSpeedMenu","_this5","speed","isVimeo","values","some","tab","toggleMenu","form","show","isMenuItem","isButton","stopPropagation","getTabSize","clone","position","opacity","scrollWidth","height","scrollHeight","showTab","_this6","size","restore","propertyName","focus","create","_this7","aria-haspopup","aria-controls","aria-expanded","aria-labelled-by","tabindex","inner","home","back","inject","_this8","floor","random","props","seektime","setTimeout","offsetHeight","_config","labels","parseUrl","parser","href","buildUrlParams","params","URLSearchParams","setup","isVideo","isYouTube","protocol","blob","createObjectURL","languages","userLanguage","active","trackEvents","_captions","meta","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","toConsumableArray","embed","enableTextTrack","has","sortIsDefault","sorted","every","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","global","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","start","end","all","reset","disabled","advertisement","qualityBadge","2160","1440","1080","720","576","480","urls","vimeo","sdk","iframe","youtube","googleIMA","listeners","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","tabFocus","google","publisherId","providers","types","noop","Console","console","onChange","first","last","keyCode","shiftKey","preventDefault","toggleFallback","scrollPosition","x","scrollX","y","scrollY","scrollTo","overflow","Fullscreen","property","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exit","enter","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","loadImage","minWidth","image","Image","handler","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","ready","setTitle","setPoster","isEmbed","togglePoster","enable","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","Listeners","lastKey","handleKey","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","delay","hasAudio","initialized","managerPromise","isAudio","ended","proxyEvents","_event$detail","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","showHomeTab","currentTarget","eventType","done","seekTo","_player","webkitDirectionInvertedFromDevice","_map","deltaX","deltaY","_map2","direction","sign","abs","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","splice","executeCallbacks","depsNotFound","success","loadFile","callbackFn","numTries","isCss","doc","async","maxTries","numRetries","beforeCallbackFn","before","pathStripped","rel","onbeforeload","ev","sheet","cssText","defaultPrevented","head","loadjs","paths","arg1","arg2","fn","numWaiting","loadFiles","deps","bundleIds","r","subscribe","isDefined","module","exports","loadScript","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","_split","_split2","padding","paddingBottom","offset","transform","byline","portrait","transparent","gesture","$2","thumbnail_large","pathname","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","getRatio","w","h","getAspectRatio","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","_ref$cues","strippedCues","fragment","createDocumentFragment","firstChild","getPaused","seconds","mapQualityUnit","entry","hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","items","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","onPlaybackQualityChange","onPlaybackRateChange","instance","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","levels","getAvailableQualityLevels","level","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","_this9","initialize","init","adError","zIndex","_this10","destroy","_this11","handlers","_this12","base","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","Date","now","AV_WIDTH","AV_HEIGHT","AV_CDIM2","insertElements","attribute","change","_sources$","_sources$$provider","tagName","crossorigin","Plyr","failed","jQuery","original","getProviderByUrl","search","truthy","searchParams","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","Infinity","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","prev","curr","closest","states","webkitPresentationMode","inline","t"],"mappings":"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","file":"plyr.min.js","sourcesContent":["// ==========================================================================\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 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 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 target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n // Inject the new <element>\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 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.hasAttribute('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.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 null;\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// Get the focused element\nexport function getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\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 = getFocusElement();\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// 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(event => element.style[event] !== undefined);\n\n return is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element) {\n setTimeout(() => {\n toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\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 });\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// 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 './utils/is';\nimport { getDeep } from './utils/objects';\nimport { replaceAll } from './utils/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// 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// 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// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n createElement,\n emptyElement,\n getAttributesFromSelector,\n getElement,\n getElements,\n hasClass,\n matches,\n removeElement,\n setAttributes,\n toggleClass,\n toggleHidden,\n} from './utils/elements';\nimport { off, on } from './utils/events';\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(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\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 // Toggle classname when pressed property is set\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 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: `plyr__time ${attributes.class}`,\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 // Create a settings menu item\n createMenuItem({ value, list, type, title, badge = null, checked = false }) {\n const item = createElement('li');\n\n const label = createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = createElement(\n 'input',\n extend(getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\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}%`);\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 toggleTab(setting, toggle) {\n toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n setQualityMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\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.toggleTab.call(this, type, toggle);\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 // Empty the menu\n emptyElement(list);\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 // 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}×`;\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 // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[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('ul');\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.tabs[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(`input[value=\"${value}\"]`);\n\n if (is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n toggleHidden(this.elements.settings.tabs.loop, false);\n toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.loop.options);\n controls.toggleTab.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 // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n const tracks = captions.getTracks.call(this);\n\n // Toggle the pane and tab\n controls.toggleTab.call(this, type, tracks.length);\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 (!tracks.length) {\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 // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\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.toggleTab.call(this, type, toggle);\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 list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n emptyElement(list);\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 { tabs } = this.elements.settings;\n const visible = !is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!is.element(form) || !is.element(button)) {\n return;\n }\n\n const show = is.boolean(event) ? event : is.element(form) && form.hasAttribute('hidden');\n\n if (is.event(event)) {\n const isMenuItem = is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form 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 && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (is.element(form)) {\n toggleHidden(form, !show);\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\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 // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!is.element(pane)) {\n return;\n }\n\n // Are we targeting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\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.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || !['width', 'height'].includes(e.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 current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n toggleHidden(pane, false);\n\n const tabs = getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (is.empty(this.config.controls)) {\n return null;\n }\n\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 // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\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 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 menu = createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = createElement('div');\n\n const home = createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = 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 id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\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 button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\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 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 (is.string(this.config.controls) || is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\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 // 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 i18n from './i18n';\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 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 languages = dedupe(\n Array.from(navigator.languages || navigator.language || navigator.userLanguage).map(language => language.split('-')[0]),\n );\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: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\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 'qualitychange',\n 'qualityrequested',\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 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 if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\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 i18n from './i18n';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\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 browser from './utils/browser';\nimport { getElement, getElements, getFocusElement, 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\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\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 this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\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 // 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 = getFocusElement();\n if (\n is.element(focused) &&\n (focused !== this.player.elements.inputs.seek &&\n matches(focused, this.player.config.selectors.editable))\n ) {\n return;\n }\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 this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.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 (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.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 this.player.touch = true;\n\n // Add touch class\n toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n toggleListener.call(this.player, window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n toggleListener.call(this.player, document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n once.call(this.player, document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n on.call(this.player, this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n on.call(this.player, this.player.elements.container, 'focusout', event => {\n toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n // Add classname to tabbed elements\n on.call(this.player, this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n toggleClass(getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n this.player,\n this.player.elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (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(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n },\n );\n }\n\n // Listen for media events\n media() {\n // Time change on media\n on.call(this.player, this.player.media, 'timeupdate seeking seeked', event =>\n controls.timeUpdate.call(this.player, event),\n );\n\n // Display duration\n on.call(this.player, this.player.media, 'durationchange loadeddata loadedmetadata', event =>\n controls.durationUpdate.call(this.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(this.player, this.player.media, 'canplay', () => {\n toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n on.call(this.player, this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n on.call(this.player, this.player.media, 'progress playing seeking seeked', event =>\n controls.updateProgress.call(this.player, event),\n );\n\n // Handle volume changes\n on.call(this.player, this.player.media, 'volumechange', event =>\n controls.updateVolume.call(this.player, event),\n );\n\n // Handle play/pause\n on.call(this.player, this.player.media, 'playing play pause ended emptied timeupdate', event =>\n ui.checkPlaying.call(this.player, event),\n );\n\n // Loading state\n on.call(this.player, this.player.media, 'waiting canplay seeked playing', event =>\n ui.checkLoading.call(this.player, event),\n );\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(this.player, this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(this.player, `.${this.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(this.player, wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n on.call(\n this.player,\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(this.player, this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n on.call(this.player, this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n on.call(this.player, this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n on.call(this.player, this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = this.player.config.events.concat(['keyup', 'keydown']).join(' ');\n on.call(this.player, this.player.media, proxyEvents, event => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n triggerEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.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(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const bind = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n this.player,\n element,\n type,\n event => proxy(event, defaultHandler, customHandlerKey),\n passive && !hasCustomHandler,\n );\n };\n\n // Play/pause toggle\n if (this.player.elements.buttons.play) {\n Array.from(this.player.elements.buttons.play).forEach(button => {\n bind(button, 'click', this.player.togglePlay, 'play');\n });\n }\n\n // Pause\n bind(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n bind(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n bind(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n bind(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n bind(this.player.elements.buttons.captions, 'click', () => this.player.toggleCaptions());\n\n // Fullscreen toggle\n bind(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n bind(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n bind(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n bind(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n bind(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.currentTrack = Number(event.target.value);\n showHomeTab();\n },\n 'language',\n );\n } else if (matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n bind(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n bind(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n const code = event.keyCode ? event.keyCode : event.which;\n const eventType = event.type;\n\n if ((eventType === 'keydown' || eventType === 'keyup') && (code !== 39 && code !== 37)) {\n return;\n }\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\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('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n bind(\n this.player.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 this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !is.element(this.player.elements.display.duration)) {\n bind(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n bind(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(getElements.call(this.player, 'input[type=\"range\"]')).forEach(element => {\n bind(element, 'input', event => controls.updateRangeFill.call(this.player, event.target));\n });\n }\n\n // Seek tooltip\n bind(this.player.elements.progress, 'mouseenter mouseleave mousemove', event =>\n controls.updateSeekTooltip.call(this.player, event),\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n bind(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n bind(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Focus in/out on controls\n bind(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\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 // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n bind(\n this.player.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 this.player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = this.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 controls from '../controls';\nimport ui from '../ui';\nimport { dedupe } from '../utils/arrays';\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// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n const qualities = {\n hd2160: 2160,\n hd1440: 1440,\n hd1080: 1080,\n hd720: 720,\n large: 480,\n medium: 360,\n small: 240,\n tiny: 144,\n };\n\n const entry = Object.entries(qualities).find(entry => entry.includes(input));\n\n if (entry) {\n // Get the match corresponding to the input\n return entry.find(value => value !== input);\n }\n\n return 'default';\n}\n\nfunction mapQualityUnits(levels) {\n if (is.empty(levels)) {\n return levels;\n }\n\n return dedupe(levels.map(level => mapQualityUnit(level)));\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 onPlaybackQualityChange() {\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\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 // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n instance.setPlaybackQuality(mapQualityUnit(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 // Get quality\n controls.setQualityMenu.call(\n player,\n mapQualityUnits(instance.getAvailableQualityLevels()),\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 i18n from '../i18n';\nimport { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\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 // 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 // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\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.3.22\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 buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\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');\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')) {\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 this.ads = new Ads(this);\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 // Trigger request event\n triggerEvent.call(this, this.media, 'qualityrequested', false, { quality });\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 // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n triggerEvent.call(this, this.media, eventName);\n }\n return !hiding;\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"]}
\ No newline at end of file +{"version":3,"sources":["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/objects.js","src/js/utils/strings.js","src/js/i18n.js","src/js/utils/arrays.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":["getConstructor","input","constructor","instanceOf","Boolean","isNullOrUndefined","isObject","Object","isString","String","isArray","Array","isNodeList","NodeList","isEmpty","length","keys","is","nullOrUndefined","object","number","Number","isNaN","string","boolean","function","Function","array","weakMap","WeakMap","nodeList","element","Element","textNode","Text","event","Event","cue","window","TextTrackCue","VTTCue","track","TextTrack","kind","url","URL","startsWith","hostname","e","empty","supportsPassiveListeners","supported","options","defineProperty","get","addEventListener","removeEventListener","toggleListener","callback","toggle","arguments","undefined","_this","this","passive","capture","events","split","forEach","type","eventListeners","push","on","call","off","once","onceCallback","_len","args","_key","apply","triggerEvent","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","wrap","elements","wrapper","targets","from","reverse","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","setAttributes","attributes","entries","filter","_ref","value","slicedToArray","_ref3","_ref4","key","setAttribute","createElement","text","document","innerText","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","s","selector","trim","className","replace","parts","charAt","class","id","toggleHidden","hidden","hide","hasAttribute","removeAttribute","toggleClass","force","method","classList","contains","hasClass","matches","prototype","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelectorAll","includes","getElements","container","getElement","querySelector","getFocusElement","focused","activeElement","body","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","find","style","range","browser","isIE","documentMode","isWebkit","documentElement","test","navigator","userAgent","isIPhone","platform","isIos","defaultCodecs","audio/ogg","audio/wav","video/webm","video/mp4","video/ogg","support","audio","video","check","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","inputType","_inputType$split","mediaType","isHTML5","media","canPlayType","err","textTracks","touch","transitions","reducedMotion","matchMedia","html5","getSources","source","getAttribute","getQualityOptions","map","extend","player","set","_player$media","currentTime","paused","preload","readyState","src","play","load","quality","cancelRequests","config","blankVideo","debug","log","getDeep","path","reduce","obj","target","sources","shift","concat","format","toString","match","i","replaceAll","RegExp","toTitleCase","toUpperCase","substr","toLowerCase","toCamelCase","toPascalCase","slice","getHTML","innerHTML","i18n","{seektime}","seekTime","{title}","title","_ref2","dedupe","item","indexOf","Storage","classCallCheck","enabled","storage","store","localStorage","getItem","json","JSON","parse","setItem","stringify","removeItem","fetch","responseType","Promise","resolve","reject","request","XMLHttpRequest","responseText","response","Error","status","open","send","loadSprite","hasId","exists","getElementById","update","data","insertAdjacentElement","useStorage","cached","prefix","content","then","result","catch","getHours","parseInt","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","cors","iconUrl","location","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","classNames","tooltip","error","warn","toggleNativeControls","createIcon","iconPath","iconPrefix","icon","createElementNS","role","focusable","use","setAttributeNS","createLabel","attr","join","createBadge","badge","menu","createButton","buttonType","button","label","labelPressed","iconPressed","control","controlPressed","enumerable","pressed","createRange","min","max","step","autocomplete","aria-label","aria-valuemin","aria-valuemax","aria-valuenow","updateRangeFill","createProgress","aria-hidden","suffixKey","played","suffix","createTime","createMenuItem","list","_ref$badge","_ref$checked","checked","radio","name","faux","insertAdjacentHTML","updateTimeDisplay","updateVolume","setRange","muted","updateProgress","current","toFixed","getElementsByTagName","nodeValue","setProgress","buffered","percent","setProperty","updateSeekTooltip","_this2","tooltips","clientRect","getBoundingClientRect","visible","_toggle","width","pageX","left","parseFloat","timeUpdate","invert","invertTime","seeking","durationUpdate","Math","pow","hasDuration","displayDuration","toggleTab","setting","tabs","setQualityMenu","_this3","panes","checkMenu","sort","a","b","sorting","getLabel","getBadge","updateSetting","pane","currentTrack","default","setCaptionsMenu","_this4","tracks","getTracks","toggled","language","unshift","bind","setSpeedMenu","_this5","speed","isVimeo","values","some","tab","toggleMenu","form","show","isMenuItem","isButton","stopPropagation","getTabSize","clone","position","opacity","scrollWidth","height","scrollHeight","showTab","_this6","size","restore","propertyName","focus","create","_this7","aria-haspopup","aria-controls","aria-expanded","aria-labelled-by","tabindex","inner","home","back","inject","_this8","floor","random","props","seektime","setTimeout","offsetHeight","_config","labels","parseUrl","parser","href","buildUrlParams","params","URLSearchParams","setup","isVideo","isYouTube","protocol","blob","createObjectURL","languages","userLanguage","active","trackEvents","_captions","meta","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","toConsumableArray","embed","enableTextTrack","has","sortIsDefault","sorted","every","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","global","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","start","end","all","reset","disabled","advertisement","qualityBadge","2160","1440","1080","720","576","480","urls","vimeo","sdk","iframe","youtube","googleIMA","listeners","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","tabFocus","google","publisherId","providers","types","noop","Console","console","onChange","first","last","keyCode","shiftKey","preventDefault","toggleFallback","scrollPosition","x","scrollX","y","scrollY","scrollTo","overflow","Fullscreen","property","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exit","enter","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","loadImage","minWidth","image","Image","handler","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","ready","setTitle","setPoster","isEmbed","togglePoster","enable","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","Listeners","lastKey","handleKey","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","delay","hasAudio","initialized","managerPromise","isAudio","ended","proxyEvents","_event$detail","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","showHomeTab","currentTarget","eventType","done","seekTo","_player","webkitDirectionInvertedFromDevice","_map","deltaX","deltaY","_map2","direction","sign","abs","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","splice","executeCallbacks","depsNotFound","success","loadFile","callbackFn","numTries","isCss","doc","async","maxTries","numRetries","beforeCallbackFn","before","pathStripped","rel","onbeforeload","ev","sheet","cssText","defaultPrevented","head","loadjs","paths","arg1","arg2","fn","numWaiting","loadFiles","deps","bundleIds","r","subscribe","isDefined","module","exports","loadScript","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","_split","_split2","padding","paddingBottom","offset","transform","byline","portrait","transparent","gesture","$2","thumbnail_large","pathname","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","getRatio","w","h","getAspectRatio","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","_ref$cues","strippedCues","fragment","createDocumentFragment","firstChild","getPaused","seconds","mapQualityUnit","entry","hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","items","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","onPlaybackQualityChange","onPlaybackRateChange","instance","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","levels","getAvailableQualityLevels","level","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","_this9","initialize","init","adError","zIndex","_this10","destroy","_this11","handlers","_this12","base","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","Date","now","AV_WIDTH","AV_HEIGHT","AV_CDIM2","insertElements","attribute","change","_sources$","_sources$$provider","tagName","crossorigin","Plyr","failed","jQuery","original","getProviderByUrl","search","truthy","searchParams","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","Infinity","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","prev","curr","closest","states","webkitPresentationMode","inline","t"],"mappings":"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","file":"plyr.min.js","sourcesContent":["// ==========================================================================\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 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 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 target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n // Inject the new <element>\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 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.hasAttribute('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.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 null;\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// Get the focused element\nexport function getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\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 = getFocusElement();\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// 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(event => element.style[event] !== undefined);\n\n return is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element) {\n setTimeout(() => {\n toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\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 });\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// 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 './utils/is';\nimport { getDeep } from './utils/objects';\nimport { replaceAll } from './utils/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// 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// 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// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n createElement,\n emptyElement,\n getAttributesFromSelector,\n getElement,\n getElements,\n hasClass,\n matches,\n removeElement,\n setAttributes,\n toggleClass,\n toggleHidden,\n} from './utils/elements';\nimport { off, on } from './utils/events';\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(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\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 // Toggle classname when pressed property is set\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 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: `plyr__time ${attributes.class}`,\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 // Create a settings menu item\n createMenuItem({ value, list, type, title, badge = null, checked = false }) {\n const item = createElement('li');\n\n const label = createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = createElement(\n 'input',\n extend(getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\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}%`);\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 toggleTab(setting, toggle) {\n toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n setQualityMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\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.toggleTab.call(this, type, toggle);\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 // Empty the menu\n emptyElement(list);\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 // 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}×`;\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 // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[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('ul');\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.tabs[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(`input[value=\"${value}\"]`);\n\n if (is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n toggleHidden(this.elements.settings.tabs.loop, false);\n toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.loop.options);\n controls.toggleTab.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 // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n const tracks = captions.getTracks.call(this);\n\n // Toggle the pane and tab\n controls.toggleTab.call(this, type, tracks.length);\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 (!tracks.length) {\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 // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\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.toggleTab.call(this, type, toggle);\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 list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n emptyElement(list);\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 { tabs } = this.elements.settings;\n const visible = !is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!is.element(form) || !is.element(button)) {\n return;\n }\n\n const show = is.boolean(event) ? event : is.element(form) && form.hasAttribute('hidden');\n\n if (is.event(event)) {\n const isMenuItem = is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form 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 && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (is.element(form)) {\n toggleHidden(form, !show);\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\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 // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!is.element(pane)) {\n return;\n }\n\n // Are we targeting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\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.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || !['width', 'height'].includes(e.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 current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n toggleHidden(pane, false);\n\n const tabs = getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (is.empty(this.config.controls)) {\n return null;\n }\n\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 // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\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 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 menu = createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = createElement('div');\n\n const home = createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = 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 id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\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 button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\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 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 (is.string(this.config.controls) || is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\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 // 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 i18n from './i18n';\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 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 languages = dedupe(\n Array.from(navigator.languages || navigator.language || navigator.userLanguage).map(language => language.split('-')[0]),\n );\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: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\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 'qualitychange',\n 'qualityrequested',\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 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 if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\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 i18n from './i18n';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\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 browser from './utils/browser';\nimport { getElement, getElements, getFocusElement, 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\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\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 this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\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 // 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 = getFocusElement();\n if (\n is.element(focused) &&\n (focused !== this.player.elements.inputs.seek &&\n matches(focused, this.player.config.selectors.editable))\n ) {\n return;\n }\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 this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.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 (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.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 this.player.touch = true;\n\n // Add touch class\n toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n toggleListener.call(this.player, window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n toggleListener.call(this.player, document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n once.call(this.player, document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n on.call(this.player, this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n on.call(this.player, this.player.elements.container, 'focusout', event => {\n toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n // Add classname to tabbed elements\n on.call(this.player, this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n toggleClass(getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n this.player,\n this.player.elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (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(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n },\n );\n }\n\n // Listen for media events\n media() {\n // Time change on media\n on.call(this.player, this.player.media, 'timeupdate seeking seeked', event =>\n controls.timeUpdate.call(this.player, event),\n );\n\n // Display duration\n on.call(this.player, this.player.media, 'durationchange loadeddata loadedmetadata', event =>\n controls.durationUpdate.call(this.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(this.player, this.player.media, 'canplay', () => {\n toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n on.call(this.player, this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n on.call(this.player, this.player.media, 'progress playing seeking seeked', event =>\n controls.updateProgress.call(this.player, event),\n );\n\n // Handle volume changes\n on.call(this.player, this.player.media, 'volumechange', event =>\n controls.updateVolume.call(this.player, event),\n );\n\n // Handle play/pause\n on.call(this.player, this.player.media, 'playing play pause ended emptied timeupdate', event =>\n ui.checkPlaying.call(this.player, event),\n );\n\n // Loading state\n on.call(this.player, this.player.media, 'waiting canplay seeked playing', event =>\n ui.checkLoading.call(this.player, event),\n );\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(this.player, this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(this.player, `.${this.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(this.player, wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n on.call(\n this.player,\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(this.player, this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n on.call(this.player, this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n on.call(this.player, this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n on.call(this.player, this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = this.player.config.events.concat(['keyup', 'keydown']).join(' ');\n on.call(this.player, this.player.media, proxyEvents, event => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n triggerEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.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(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const bind = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n this.player,\n element,\n type,\n event => proxy(event, defaultHandler, customHandlerKey),\n passive && !hasCustomHandler,\n );\n };\n\n // Play/pause toggle\n if (this.player.elements.buttons.play) {\n Array.from(this.player.elements.buttons.play).forEach(button => {\n bind(button, 'click', this.player.togglePlay, 'play');\n });\n }\n\n // Pause\n bind(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n bind(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n bind(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n bind(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n bind(this.player.elements.buttons.captions, 'click', () => this.player.toggleCaptions());\n\n // Fullscreen toggle\n bind(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n bind(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n bind(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n bind(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n bind(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.currentTrack = Number(event.target.value);\n showHomeTab();\n },\n 'language',\n );\n } else if (matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n bind(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n bind(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n const code = event.keyCode ? event.keyCode : event.which;\n const eventType = event.type;\n\n if ((eventType === 'keydown' || eventType === 'keyup') && (code !== 39 && code !== 37)) {\n return;\n }\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\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('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n bind(\n this.player.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 this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !is.element(this.player.elements.display.duration)) {\n bind(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n bind(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(getElements.call(this.player, 'input[type=\"range\"]')).forEach(element => {\n bind(element, 'input', event => controls.updateRangeFill.call(this.player, event.target));\n });\n }\n\n // Seek tooltip\n bind(this.player.elements.progress, 'mouseenter mouseleave mousemove', event =>\n controls.updateSeekTooltip.call(this.player, event),\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n bind(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n bind(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Focus in/out on controls\n bind(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\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 // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n bind(\n this.player.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 this.player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = this.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 controls from '../controls';\nimport ui from '../ui';\nimport { dedupe } from '../utils/arrays';\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// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n const qualities = {\n hd2160: 2160,\n hd1440: 1440,\n hd1080: 1080,\n hd720: 720,\n large: 480,\n medium: 360,\n small: 240,\n tiny: 144,\n };\n\n const entry = Object.entries(qualities).find(entry => entry.includes(input));\n\n if (entry) {\n // Get the match corresponding to the input\n return entry.find(value => value !== input);\n }\n\n return 'default';\n}\n\nfunction mapQualityUnits(levels) {\n if (is.empty(levels)) {\n return levels;\n }\n\n return dedupe(levels.map(level => mapQualityUnit(level)));\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 onPlaybackQualityChange() {\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\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 // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n instance.setPlaybackQuality(mapQualityUnit(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 // Get quality\n controls.setQualityMenu.call(\n player,\n mapQualityUnits(instance.getAvailableQualityLevels()),\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 i18n from '../i18n';\nimport { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\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 // 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 // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\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.3.23\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 buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\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');\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')) {\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 this.ads = new Ads(this);\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 // Trigger request event\n triggerEvent.call(this, this.media, 'qualityrequested', false, { quality });\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 // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n triggerEvent.call(this, this.media, eventName);\n }\n return !hiding;\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"]}
\ No newline at end of file diff --git a/dist/plyr.polyfilled.js.map b/dist/plyr.polyfilled.js.map index 8307b1f6..1b311263 100644 --- a/dist/plyr.polyfilled.js.map +++ b/dist/plyr.polyfilled.js.map @@ -1 +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/_library.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/_perform.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/es6.promise.js","node_modules/core-js/modules/_wks-ext.js","node_modules/core-js/modules/_wks-define.js","node_modules/core-js/modules/_enum-keys.js","node_modules/core-js/modules/_object-gopn-ext.js","node_modules/core-js/modules/es6.symbol.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/_flags.js","node_modules/core-js/modules/es6.regexp.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/_user-agent.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/custom-event-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/objects.js","src/js/utils/strings.js","src/js/i18n.js","src/js/utils/arrays.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","src/js/plyr.polyfilled.js"],"names":["isObject","require$$0","document","require$$1","require$$2","anObject","toPrimitive","IE8_DOM_DEFINE","dP","createDesc","has","hide","global","aFunction","core","ctx","redefine","uid","toInteger","toLength","cof","IObject","defined","min","toIObject","toAbsoluteIndex","$keys","toObject","DESCRIPTORS","toIndex","$typed","anInstance","arrayFill","redefineAll","fails","setToStringTag","SPECIES","buffer","VIEW","$export","speciesConstructor","TAG","Iterators","enumBugKeys","getKeys","IE_PROTO","PROTOTYPE","dPs","ITERATOR","classof","isArray","asc","ArrayProto","create","descriptor","$iterCreate","getPrototypeOf","step","addToUnscopables","pIE","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","getIterFn","isArrayIter","call","forOf","validate","$iterDefine","setSpecies","meta","$iterDetect","inheritIfRequired","strong","gOPS","createArrayMethod","id","$has","weak","assign","invoke","bind","gOPD","getProto","Reflect","gOPN","setProto","cel","html","process","Promise","newPromiseCapability","TypeError","isNode","newPromiseCapabilityModule","perform","promiseResolve","LIBRARY","wksExt","toString","$GOPD","$DP","gOPNExt","wks","shared","ObjectProto","USE_NATIVE","$fails","_create","enumKeys","wksDefine","$getOwnPropertyDescriptor","$getPrototypeOf","isRegExp","MATCH","context","$defineProperty","createProperty","$find","KEY","forced","floor","isInteger","log1p","sign","$expm1","abs","exp","expm1","isEnum","ownKeys","repeat","navigator","userAgent","$pad","wrap","$task","i","NAME","$iterators","this","CustomEvent","getConstructor","input","constructor","instanceOf","Boolean","isNullOrUndefined","Object","isNumber","Number","isNaN","isString","String","isBoolean","isFunction","Function","Array","isWeakMap","WeakMap","isNodeList","NodeList","isElement","Element","isTextNode","Text","isEvent","Event","isCue","window","TextTrackCue","VTTCue","isTrack","TextTrack","kind","isEmpty","length","keys","isUrl","URL","string","startsWith","hostname","e","nullOrUndefined","object","number","boolean","function","array","weakMap","nodeList","element","textNode","event","cue","track","url","empty","supportsPassiveListeners","supported","options","defineProperty","get","addEventListener","removeEventListener","toggleListener","callback","toggle","passive","capture","is","events","split","forEach","eventListeners","push","type","on","off","once","onceCallback","args","apply","triggerEvent","bubbles","detail","plyr","dispatchEvent","unbindListeners","item","ready","setTimeout","resolve","elements","container","then","wrapper","targets","from","reverse","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","setAttributes","attributes","entries","filter","value","key","setAttribute","createElement","text","innerText","insertAfter","target","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","start","charAt","class","toggleHidden","hidden","hasAttribute","removeAttribute","toggleClass","force","method","classList","contains","hasClass","matches","prototype","match","querySelectorAll","includes","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","getElements","getElement","querySelector","getFocusElement","focused","activeElement","body","trapFocus","focusable","first","last","trap","keyCode","shiftKey","focus","preventDefault","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","find","style","undefined","repaint","offsetHeight","browser","isIE","documentMode","isWebkit","documentElement","test","isIPhone","platform","isIos","defaultCodecs","support","audio","video","check","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","inputType","mediaType","isHTML5","media","canPlayType","err","textTracks","range","touch","transitions","reducedMotion","matchMedia","html5","getSources","sources","source","getAttribute","getQualityOptions","map","extend","player","set","currentTime","paused","preload","readyState","src","play","load","quality","cancelRequests","config","blankVideo","debug","log","cloneDeep","JSON","parse","stringify","getDeep","path","reduce","obj","shift","generateId","prefix","Math","random","format","getPercentage","current","max","toFixed","replaceAll","RegExp","toTitleCase","toUpperCase","substr","toLowerCase","toPascalCase","toCamelCase","slice","stripHTML","fragment","createDocumentFragment","innerHTML","firstChild","getHTML","i18n","seekTime","title","dedupe","indexOf","closest","prev","curr","Storage","enabled","storage","store","localStorage","getItem","json","setItem","removeItem","fetch","responseType","reject","request","XMLHttpRequest","responseText","response","Error","status","open","send","loadSprite","hasId","isCached","exists","getElementById","update","data","insertAdjacentElement","useStorage","cached","content","result","catch","getHours","parseInt","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","iconUrl","location","cors","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","display","duration","seekTooltip","classNames","tooltip","error","warn","toggleNativeControls","createIcon","namespace","iconPath","iconPrefix","icon","createElementNS","role","use","setAttributeNS","createLabel","attr","universals","join","createBadge","badge","menu","createButton","buttonType","button","label","labelPressed","iconPressed","control","controlPressed","enumerable","pressed","createRange","autocomplete","updateRangeFill","createProgress","suffixKey","played","suffix","createTime","createMenuItem","list","checked","radio","name","faux","insertAdjacentHTML","forceHours","updateTimeDisplay","updateVolume","setRange","muted","updateProgress","setProgress","getElementsByTagName","nodeValue","buffered","percent","setProperty","updateSeekTooltip","tooltips","clientRect","getBoundingClientRect","visible","width","pageX","left","parseFloat","timeUpdate","invert","invertTime","seeking","durationUpdate","hasDuration","displayDuration","toggleTab","setting","tabs","setQualityMenu","panes","checkMenu","getBadge","sort","a","b","sorting","getLabel","updateSetting","pane","currentTrack","default","setCaptionsMenu","tracks","getTracks","toggled","language","unshift","setSpeedMenu","speed","isVimeo","values","some","tab","toggleMenu","form","show","isMenuItem","isButton","stopPropagation","getTabSize","clone","position","opacity","scrollWidth","height","scrollHeight","showTab","isTab","size","restore","propertyName","tabindex","inner","home","back","inject","props","seektime","insertMethod","labels","parseUrl","safe","parser","href","buildUrlParams","params","URLSearchParams","setup","isVideo","isYouTube","protocol","createObjectURL","blob","languages","userLanguage","active","trackEvents","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","embed","enableTextTrack","sortIsDefault","sorted","every","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","changed","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","end","all","reset","disabled","advertisement","qualityBadge","urls","vimeo","sdk","iframe","youtube","googleIMA","listeners","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","tabFocus","google","publisherId","providers","types","getProviderByUrl","noop","Console","console","onChange","toggleFallback","scrollPosition","x","scrollX","y","scrollY","scrollTo","overflow","Fullscreen","property","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","loadImage","minWidth","image","Image","handler","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","setTitle","setPoster","isEmbed","togglePoster","enable","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","Listeners","lastKey","handleKey","firstTouch","code","which","altKey","ctrlKey","metaKey","seekByKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","delay","hasAudio","initialized","managerPromise","isAudio","ended","proxyEvents","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showHomeTab","currentTarget","eventType","done","seekTo","webkitDirectionInvertedFromDevice","deltaX","deltaY","direction","define","loadScript","loadjs","success","parseId","regex","$2","getAspectRatio","getRatio","w","h","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","padding","paddingBottom","offset","transform","byline","portrait","transparent","gesture","thumbnail_large","pathname","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","strippedCues","getPaused","frame","seconds","mapQualityUnit","qualities","hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","entry","mapQualityUnits","levels","level","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","items","snippet","currentId","posterSrc","playerVars","hl","rel","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","onPlaybackQualityChange","onPlaybackRateChange","instance","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","seeked","getAvailableQualityLevels","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","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","handlers","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","Date","now","AV_WIDTH","AV_HEIGHT","AV_CDIM2","base","insertElements","attribute","change","tagName","crossorigin","Plyr","failed","jQuery","original","search","truthy","searchParams","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","Infinity","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","states","inline","webkitPresentationMode","t"],"mappings":"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","file":"plyr.polyfilled.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.3' };\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","module.exports = false;\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 global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\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 final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\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 has = require('./_has');\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 = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = 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 && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'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 existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\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 var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'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","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 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","'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 promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\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') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\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","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","// 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","// 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","// 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","'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","// 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';\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","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\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\ntry {\n var ce = new window.CustomEvent('test');\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(event, params.bubbles, params.cancelable, params.detail);\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","(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 searchString = '';\r\n this.forEach(function(value, name) {\r\n if(searchString.length > 0) searchString+= '&';\r\n searchString += serializeParam(name) + '=' + serializeParam(value);\r\n });\r\n return searchString;\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 var doc = document.implementation.createHTMLDocument('');\r\n window.doc = doc;\r\n if(base) {\r\n var baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\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 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 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 target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n // Inject the new <element>\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 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.hasAttribute('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.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 null;\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// Get the focused element\nexport function getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\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 = getFocusElement();\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// 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(event => element.style[event] !== undefined);\n\n return is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element) {\n setTimeout(() => {\n toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\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 });\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// 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 './utils/is';\nimport { getDeep } from './utils/objects';\nimport { replaceAll } from './utils/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// 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// 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// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n createElement,\n emptyElement,\n getAttributesFromSelector,\n getElement,\n getElements,\n hasClass,\n matches,\n removeElement,\n setAttributes,\n toggleClass,\n toggleHidden,\n} from './utils/elements';\nimport { off, on } from './utils/events';\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(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\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 // Toggle classname when pressed property is set\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 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: `plyr__time ${attributes.class}`,\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 // Create a settings menu item\n createMenuItem({ value, list, type, title, badge = null, checked = false }) {\n const item = createElement('li');\n\n const label = createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = createElement(\n 'input',\n extend(getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\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}%`);\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 toggleTab(setting, toggle) {\n toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n setQualityMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\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.toggleTab.call(this, type, toggle);\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 // Empty the menu\n emptyElement(list);\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 // 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}×`;\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 // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[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('ul');\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.tabs[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(`input[value=\"${value}\"]`);\n\n if (is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n toggleHidden(this.elements.settings.tabs.loop, false);\n toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.loop.options);\n controls.toggleTab.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 // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n const tracks = captions.getTracks.call(this);\n\n // Toggle the pane and tab\n controls.toggleTab.call(this, type, tracks.length);\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 (!tracks.length) {\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 // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\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.toggleTab.call(this, type, toggle);\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 list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n emptyElement(list);\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 { tabs } = this.elements.settings;\n const visible = !is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!is.element(form) || !is.element(button)) {\n return;\n }\n\n const show = is.boolean(event) ? event : is.element(form) && form.hasAttribute('hidden');\n\n if (is.event(event)) {\n const isMenuItem = is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form 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 && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (is.element(form)) {\n toggleHidden(form, !show);\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\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 // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!is.element(pane)) {\n return;\n }\n\n // Are we targeting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\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.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || !['width', 'height'].includes(e.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 current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n toggleHidden(pane, false);\n\n const tabs = getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (is.empty(this.config.controls)) {\n return null;\n }\n\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 // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\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 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 menu = createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = createElement('div');\n\n const home = createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = 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 id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\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 button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\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 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 (is.string(this.config.controls) || is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\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 // 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 i18n from './i18n';\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 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 languages = dedupe(\n Array.from(navigator.languages || navigator.language || navigator.userLanguage).map(language => language.split('-')[0]),\n );\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: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\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 'qualitychange',\n 'qualityrequested',\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 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 if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\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 i18n from './i18n';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\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 browser from './utils/browser';\nimport { getElement, getElements, getFocusElement, 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\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\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 this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\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 // 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 = getFocusElement();\n if (\n is.element(focused) &&\n (focused !== this.player.elements.inputs.seek &&\n matches(focused, this.player.config.selectors.editable))\n ) {\n return;\n }\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 this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.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 (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.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 this.player.touch = true;\n\n // Add touch class\n toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n toggleListener.call(this.player, window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n toggleListener.call(this.player, document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n once.call(this.player, document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n on.call(this.player, this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n on.call(this.player, this.player.elements.container, 'focusout', event => {\n toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n // Add classname to tabbed elements\n on.call(this.player, this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n toggleClass(getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n this.player,\n this.player.elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (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(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n },\n );\n }\n\n // Listen for media events\n media() {\n // Time change on media\n on.call(this.player, this.player.media, 'timeupdate seeking seeked', event =>\n controls.timeUpdate.call(this.player, event),\n );\n\n // Display duration\n on.call(this.player, this.player.media, 'durationchange loadeddata loadedmetadata', event =>\n controls.durationUpdate.call(this.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(this.player, this.player.media, 'canplay', () => {\n toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n on.call(this.player, this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n on.call(this.player, this.player.media, 'progress playing seeking seeked', event =>\n controls.updateProgress.call(this.player, event),\n );\n\n // Handle volume changes\n on.call(this.player, this.player.media, 'volumechange', event =>\n controls.updateVolume.call(this.player, event),\n );\n\n // Handle play/pause\n on.call(this.player, this.player.media, 'playing play pause ended emptied timeupdate', event =>\n ui.checkPlaying.call(this.player, event),\n );\n\n // Loading state\n on.call(this.player, this.player.media, 'waiting canplay seeked playing', event =>\n ui.checkLoading.call(this.player, event),\n );\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(this.player, this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(this.player, `.${this.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(this.player, wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n on.call(\n this.player,\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(this.player, this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n on.call(this.player, this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n on.call(this.player, this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n on.call(this.player, this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = this.player.config.events.concat(['keyup', 'keydown']).join(' ');\n on.call(this.player, this.player.media, proxyEvents, event => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n triggerEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.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(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const bind = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n this.player,\n element,\n type,\n event => proxy(event, defaultHandler, customHandlerKey),\n passive && !hasCustomHandler,\n );\n };\n\n // Play/pause toggle\n if (this.player.elements.buttons.play) {\n Array.from(this.player.elements.buttons.play).forEach(button => {\n bind(button, 'click', this.player.togglePlay, 'play');\n });\n }\n\n // Pause\n bind(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n bind(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n bind(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n bind(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n bind(this.player.elements.buttons.captions, 'click', () => this.player.toggleCaptions());\n\n // Fullscreen toggle\n bind(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n bind(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n bind(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n bind(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n bind(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.currentTrack = Number(event.target.value);\n showHomeTab();\n },\n 'language',\n );\n } else if (matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n bind(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n bind(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n const code = event.keyCode ? event.keyCode : event.which;\n const eventType = event.type;\n\n if ((eventType === 'keydown' || eventType === 'keyup') && (code !== 39 && code !== 37)) {\n return;\n }\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\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('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n bind(\n this.player.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 this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !is.element(this.player.elements.display.duration)) {\n bind(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n bind(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(getElements.call(this.player, 'input[type=\"range\"]')).forEach(element => {\n bind(element, 'input', event => controls.updateRangeFill.call(this.player, event.target));\n });\n }\n\n // Seek tooltip\n bind(this.player.elements.progress, 'mouseenter mouseleave mousemove', event =>\n controls.updateSeekTooltip.call(this.player, event),\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n bind(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n bind(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Focus in/out on controls\n bind(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\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 // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n bind(\n this.player.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 this.player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = this.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 controls from '../controls';\nimport ui from '../ui';\nimport { dedupe } from '../utils/arrays';\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// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n const qualities = {\n hd2160: 2160,\n hd1440: 1440,\n hd1080: 1080,\n hd720: 720,\n large: 480,\n medium: 360,\n small: 240,\n tiny: 144,\n };\n\n const entry = Object.entries(qualities).find(entry => entry.includes(input));\n\n if (entry) {\n // Get the match corresponding to the input\n return entry.find(value => value !== input);\n }\n\n return 'default';\n}\n\nfunction mapQualityUnits(levels) {\n if (is.empty(levels)) {\n return levels;\n }\n\n return dedupe(levels.map(level => mapQualityUnit(level)));\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 onPlaybackQualityChange() {\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\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 // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n instance.setPlaybackQuality(mapQualityUnit(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 // Get quality\n controls.setQualityMenu.call(\n player,\n mapQualityUnits(instance.getAvailableQualityLevels()),\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 i18n from '../i18n';\nimport { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\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 // 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 // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\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.3.22\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 buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\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');\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')) {\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 this.ads = new Ads(this);\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 // Trigger request event\n triggerEvent.call(this, this.media, 'qualityrequested', false, { quality });\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 // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n triggerEvent.call(this, this.media, eventName);\n }\n return !hiding;\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","// ==========================================================================\n// Plyr Polyfilled Build\n// plyr.js v3.3.22\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport 'babel-polyfill';\nimport 'custom-event-polyfill';\nimport 'url-polyfill';\nimport Plyr from './plyr';\n\nexport default Plyr;\n"]}
\ No newline at end of file +{"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/_library.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/_perform.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/es6.promise.js","node_modules/core-js/modules/_wks-ext.js","node_modules/core-js/modules/_wks-define.js","node_modules/core-js/modules/_enum-keys.js","node_modules/core-js/modules/_object-gopn-ext.js","node_modules/core-js/modules/es6.symbol.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/_flags.js","node_modules/core-js/modules/es6.regexp.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/_user-agent.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/custom-event-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/objects.js","src/js/utils/strings.js","src/js/i18n.js","src/js/utils/arrays.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","src/js/plyr.polyfilled.js"],"names":["isObject","require$$0","document","require$$1","require$$2","anObject","toPrimitive","IE8_DOM_DEFINE","dP","createDesc","has","hide","global","aFunction","core","ctx","redefine","uid","toInteger","toLength","cof","IObject","defined","min","toIObject","toAbsoluteIndex","$keys","toObject","DESCRIPTORS","toIndex","$typed","anInstance","arrayFill","redefineAll","fails","setToStringTag","SPECIES","buffer","VIEW","$export","speciesConstructor","TAG","Iterators","enumBugKeys","getKeys","IE_PROTO","PROTOTYPE","dPs","ITERATOR","classof","isArray","asc","ArrayProto","create","descriptor","$iterCreate","getPrototypeOf","step","addToUnscopables","pIE","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","getIterFn","isArrayIter","call","forOf","validate","$iterDefine","setSpecies","meta","$iterDetect","inheritIfRequired","strong","gOPS","createArrayMethod","id","$has","weak","assign","invoke","bind","gOPD","getProto","Reflect","gOPN","setProto","cel","html","process","Promise","newPromiseCapability","TypeError","isNode","newPromiseCapabilityModule","perform","promiseResolve","LIBRARY","wksExt","toString","$GOPD","$DP","gOPNExt","wks","shared","ObjectProto","USE_NATIVE","$fails","_create","enumKeys","wksDefine","$getOwnPropertyDescriptor","$getPrototypeOf","isRegExp","MATCH","context","$defineProperty","createProperty","$find","KEY","forced","floor","isInteger","log1p","sign","$expm1","abs","exp","expm1","isEnum","ownKeys","repeat","navigator","userAgent","$pad","wrap","$task","i","NAME","$iterators","this","CustomEvent","getConstructor","input","constructor","instanceOf","Boolean","isNullOrUndefined","Object","isNumber","Number","isNaN","isString","String","isBoolean","isFunction","Function","Array","isWeakMap","WeakMap","isNodeList","NodeList","isElement","Element","isTextNode","Text","isEvent","Event","isCue","window","TextTrackCue","VTTCue","isTrack","TextTrack","kind","isEmpty","length","keys","isUrl","URL","string","startsWith","hostname","e","nullOrUndefined","object","number","boolean","function","array","weakMap","nodeList","element","textNode","event","cue","track","url","empty","supportsPassiveListeners","supported","options","defineProperty","get","addEventListener","removeEventListener","toggleListener","callback","toggle","passive","capture","is","events","split","forEach","eventListeners","push","type","on","off","once","onceCallback","args","apply","triggerEvent","bubbles","detail","plyr","dispatchEvent","unbindListeners","item","ready","setTimeout","resolve","elements","container","then","wrapper","targets","from","reverse","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","insertBefore","setAttributes","attributes","entries","filter","value","key","setAttribute","createElement","text","innerText","insertAfter","target","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","start","charAt","class","toggleHidden","hidden","hasAttribute","removeAttribute","toggleClass","force","method","classList","contains","hasClass","matches","prototype","match","querySelectorAll","includes","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","getElements","getElement","querySelector","getFocusElement","focused","activeElement","body","trapFocus","focusable","first","last","trap","keyCode","shiftKey","focus","preventDefault","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","find","style","undefined","repaint","offsetHeight","browser","isIE","documentMode","isWebkit","documentElement","test","isIPhone","platform","isIos","defaultCodecs","support","audio","video","check","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","airplay","WebKitPlaybackTargetAvailabilityEvent","mime","inputType","mediaType","isHTML5","media","canPlayType","err","textTracks","range","touch","transitions","reducedMotion","matchMedia","html5","getSources","sources","source","getAttribute","getQualityOptions","map","extend","player","set","currentTime","paused","preload","readyState","src","play","load","quality","cancelRequests","config","blankVideo","debug","log","cloneDeep","JSON","parse","stringify","getDeep","path","reduce","obj","shift","generateId","prefix","Math","random","format","getPercentage","current","max","toFixed","replaceAll","RegExp","toTitleCase","toUpperCase","substr","toLowerCase","toPascalCase","toCamelCase","slice","stripHTML","fragment","createDocumentFragment","innerHTML","firstChild","getHTML","i18n","seekTime","title","dedupe","indexOf","closest","prev","curr","Storage","enabled","storage","store","localStorage","getItem","json","setItem","removeItem","fetch","responseType","reject","request","XMLHttpRequest","responseText","response","Error","status","open","send","loadSprite","hasId","isCached","exists","getElementById","update","data","insertAdjacentElement","useStorage","cached","content","result","catch","getHours","parseInt","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","iconUrl","location","cors","host","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","fullscreen","progress","inputs","seek","volume","display","duration","seekTooltip","classNames","tooltip","error","warn","toggleNativeControls","createIcon","namespace","iconPath","iconPrefix","icon","createElementNS","role","use","setAttributeNS","createLabel","attr","universals","join","createBadge","badge","menu","createButton","buttonType","button","label","labelPressed","iconPressed","control","controlPressed","enumerable","pressed","createRange","autocomplete","updateRangeFill","createProgress","suffixKey","played","suffix","createTime","createMenuItem","list","checked","radio","name","faux","insertAdjacentHTML","forceHours","updateTimeDisplay","updateVolume","setRange","muted","updateProgress","setProgress","getElementsByTagName","nodeValue","buffered","percent","setProperty","updateSeekTooltip","tooltips","clientRect","getBoundingClientRect","visible","width","pageX","left","parseFloat","timeUpdate","invert","invertTime","seeking","durationUpdate","hasDuration","displayDuration","toggleTab","setting","tabs","setQualityMenu","panes","checkMenu","getBadge","sort","a","b","sorting","getLabel","updateSetting","pane","currentTrack","default","setCaptionsMenu","tracks","getTracks","toggled","language","unshift","setSpeedMenu","speed","isVimeo","values","some","tab","toggleMenu","form","show","isMenuItem","isButton","stopPropagation","getTabSize","clone","position","opacity","scrollWidth","height","scrollHeight","showTab","isTab","size","restore","propertyName","tabindex","inner","home","back","inject","props","seektime","insertMethod","labels","parseUrl","safe","parser","href","buildUrlParams","params","URLSearchParams","setup","isVideo","isYouTube","protocol","createObjectURL","blob","languages","userLanguage","active","trackEvents","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","embed","enableTextTrack","sortIsDefault","sorted","every","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","changed","caption","defaults","autoplay","autopause","toggleInvert","ratio","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","end","all","reset","disabled","advertisement","qualityBadge","urls","vimeo","sdk","iframe","youtube","googleIMA","listeners","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","tabFocus","google","publisherId","providers","types","getProviderByUrl","noop","Console","console","onChange","toggleFallback","scrollPosition","x","scrollX","y","scrollY","scrollTo","overflow","Fullscreen","property","native","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","action","enter","exit","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","pre","loadImage","minWidth","image","Image","handler","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","setTitle","setPoster","isEmbed","togglePoster","enable","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","Listeners","lastKey","handleKey","firstTouch","code","which","altKey","ctrlKey","metaKey","seekByKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","delay","hasAudio","initialized","managerPromise","isAudio","ended","proxyEvents","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showHomeTab","currentTarget","eventType","done","seekTo","webkitDirectionInvertedFromDevice","deltaX","deltaY","direction","define","loadScript","loadjs","success","parseId","regex","$2","getAspectRatio","getRatio","w","h","assurePlaybackState","hasPlayed","setAspectRatio","Vimeo","padding","paddingBottom","offset","transform","byline","portrait","transparent","gesture","thumbnail_large","pathname","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","setLoop","currentSrc","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","strippedCues","getPaused","frame","seconds","mapQualityUnit","qualities","hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","entry","mapQualityUnits","levels","level","YT","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","getTitle","videoId","getVideoData","items","snippet","currentId","posterSrc","playerVars","hl","rel","showinfo","iv_load_policy","modestbranding","disablekb","widget_referrer","cc_load_policy","cc_lang_pref","onError","message","onPlaybackQualityChange","onPlaybackRateChange","instance","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","clearInterval","buffering","setInterval","getVideoLoadedFraction","lastBuffered","onStateChange","seeked","getAvailableQualityLevels","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","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","handlers","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","Date","now","AV_WIDTH","AV_HEIGHT","AV_CDIM2","base","insertElements","attribute","change","tagName","crossorigin","Plyr","failed","jQuery","original","search","truthy","searchParams","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","unload","inputIsValid","fauxDuration","realDuration","Infinity","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","states","inline","webkitPresentationMode","t"],"mappings":"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","file":"plyr.polyfilled.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.3' };\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","module.exports = false;\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 global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\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 final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\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 has = require('./_has');\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 = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = 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 && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'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 existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\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 var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'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","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 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","'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 promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\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') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\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","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","// 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","// 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","// 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","'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","// 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';\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","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\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\ntry {\n var ce = new window.CustomEvent('test');\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(event, params.bubbles, params.cancelable, params.detail);\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","(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 searchString = '';\r\n this.forEach(function(value, name) {\r\n if(searchString.length > 0) searchString+= '&';\r\n searchString += serializeParam(name) + '=' + serializeParam(value);\r\n });\r\n return searchString;\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 var doc = document.implementation.createHTMLDocument('');\r\n window.doc = doc;\r\n if(base) {\r\n var baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\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 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 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 target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n // Inject the new <element>\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 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.hasAttribute('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.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 null;\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// Get the focused element\nexport function getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\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 = getFocusElement();\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// 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(event => element.style[event] !== undefined);\n\n return is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element) {\n setTimeout(() => {\n toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\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 });\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// 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 './utils/is';\nimport { getDeep } from './utils/objects';\nimport { replaceAll } from './utils/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// 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// 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// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n createElement,\n emptyElement,\n getAttributesFromSelector,\n getElement,\n getElements,\n hasClass,\n matches,\n removeElement,\n setAttributes,\n toggleClass,\n toggleHidden,\n} from './utils/elements';\nimport { off, on } from './utils/events';\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(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\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 // Toggle classname when pressed property is set\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 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: `plyr__time ${attributes.class}`,\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 // Create a settings menu item\n createMenuItem({ value, list, type, title, badge = null, checked = false }) {\n const item = createElement('li');\n\n const label = createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = createElement(\n 'input',\n extend(getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\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}%`);\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 toggleTab(setting, toggle) {\n toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n setQualityMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\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.toggleTab.call(this, type, toggle);\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 // Empty the menu\n emptyElement(list);\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 // 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}×`;\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 // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[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('ul');\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.tabs[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(`input[value=\"${value}\"]`);\n\n if (is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n toggleHidden(this.elements.settings.tabs.loop, false);\n toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.loop.options);\n controls.toggleTab.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 // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n const tracks = captions.getTracks.call(this);\n\n // Toggle the pane and tab\n controls.toggleTab.call(this, type, tracks.length);\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 (!tracks.length) {\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 // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\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.toggleTab.call(this, type, toggle);\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 list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n emptyElement(list);\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 { tabs } = this.elements.settings;\n const visible = !is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!is.element(form) || !is.element(button)) {\n return;\n }\n\n const show = is.boolean(event) ? event : is.element(form) && form.hasAttribute('hidden');\n\n if (is.event(event)) {\n const isMenuItem = is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form 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 && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (is.element(form)) {\n toggleHidden(form, !show);\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\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 // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!is.element(pane)) {\n return;\n }\n\n // Are we targeting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\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.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || !['width', 'height'].includes(e.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 current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n toggleHidden(pane, false);\n\n const tabs = getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (is.empty(this.config.controls)) {\n return null;\n }\n\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 // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\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 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 menu = createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = createElement('div');\n\n const home = createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = 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 id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\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 button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\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 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 (is.string(this.config.controls) || is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\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 // 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 i18n from './i18n';\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 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 languages = dedupe(\n Array.from(navigator.languages || navigator.language || navigator.userLanguage).map(language => language.split('-')[0]),\n );\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: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\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 'qualitychange',\n 'qualityrequested',\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 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 if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\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 i18n from './i18n';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\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 browser from './utils/browser';\nimport { getElement, getElements, getFocusElement, 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\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\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 this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\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 // 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 = getFocusElement();\n if (\n is.element(focused) &&\n (focused !== this.player.elements.inputs.seek &&\n matches(focused, this.player.config.selectors.editable))\n ) {\n return;\n }\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 this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.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 (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.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 this.player.touch = true;\n\n // Add touch class\n toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n toggleListener.call(this.player, window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n toggleListener.call(this.player, document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n once.call(this.player, document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n on.call(this.player, this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n on.call(this.player, this.player.elements.container, 'focusout', event => {\n toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n // Add classname to tabbed elements\n on.call(this.player, this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n toggleClass(getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n this.player,\n this.player.elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (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(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n },\n );\n }\n\n // Listen for media events\n media() {\n // Time change on media\n on.call(this.player, this.player.media, 'timeupdate seeking seeked', event =>\n controls.timeUpdate.call(this.player, event),\n );\n\n // Display duration\n on.call(this.player, this.player.media, 'durationchange loadeddata loadedmetadata', event =>\n controls.durationUpdate.call(this.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(this.player, this.player.media, 'canplay', () => {\n toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n on.call(this.player, this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n on.call(this.player, this.player.media, 'progress playing seeking seeked', event =>\n controls.updateProgress.call(this.player, event),\n );\n\n // Handle volume changes\n on.call(this.player, this.player.media, 'volumechange', event =>\n controls.updateVolume.call(this.player, event),\n );\n\n // Handle play/pause\n on.call(this.player, this.player.media, 'playing play pause ended emptied timeupdate', event =>\n ui.checkPlaying.call(this.player, event),\n );\n\n // Loading state\n on.call(this.player, this.player.media, 'waiting canplay seeked playing', event =>\n ui.checkLoading.call(this.player, event),\n );\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(this.player, this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(this.player, `.${this.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(this.player, wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n on.call(\n this.player,\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(this.player, this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n on.call(this.player, this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n on.call(this.player, this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n on.call(this.player, this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = this.player.config.events.concat(['keyup', 'keydown']).join(' ');\n on.call(this.player, this.player.media, proxyEvents, event => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n triggerEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.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(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const bind = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n this.player,\n element,\n type,\n event => proxy(event, defaultHandler, customHandlerKey),\n passive && !hasCustomHandler,\n );\n };\n\n // Play/pause toggle\n if (this.player.elements.buttons.play) {\n Array.from(this.player.elements.buttons.play).forEach(button => {\n bind(button, 'click', this.player.togglePlay, 'play');\n });\n }\n\n // Pause\n bind(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n bind(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n bind(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n bind(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n bind(this.player.elements.buttons.captions, 'click', () => this.player.toggleCaptions());\n\n // Fullscreen toggle\n bind(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n bind(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n bind(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n bind(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n bind(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.currentTrack = Number(event.target.value);\n showHomeTab();\n },\n 'language',\n );\n } else if (matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n bind(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n bind(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n const code = event.keyCode ? event.keyCode : event.which;\n const eventType = event.type;\n\n if ((eventType === 'keydown' || eventType === 'keyup') && (code !== 39 && code !== 37)) {\n return;\n }\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\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('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n bind(\n this.player.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 this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !is.element(this.player.elements.display.duration)) {\n bind(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n bind(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(getElements.call(this.player, 'input[type=\"range\"]')).forEach(element => {\n bind(element, 'input', event => controls.updateRangeFill.call(this.player, event.target));\n });\n }\n\n // Seek tooltip\n bind(this.player.elements.progress, 'mouseenter mouseleave mousemove', event =>\n controls.updateSeekTooltip.call(this.player, event),\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n bind(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n bind(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Focus in/out on controls\n bind(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\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 // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n bind(\n this.player.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 this.player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = this.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 controls from '../controls';\nimport ui from '../ui';\nimport { dedupe } from '../utils/arrays';\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// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n const qualities = {\n hd2160: 2160,\n hd1440: 1440,\n hd1080: 1080,\n hd720: 720,\n large: 480,\n medium: 360,\n small: 240,\n tiny: 144,\n };\n\n const entry = Object.entries(qualities).find(entry => entry.includes(input));\n\n if (entry) {\n // Get the match corresponding to the input\n return entry.find(value => value !== input);\n }\n\n return 'default';\n}\n\nfunction mapQualityUnits(levels) {\n if (is.empty(levels)) {\n return levels;\n }\n\n return dedupe(levels.map(level => mapQualityUnit(level)));\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 onPlaybackQualityChange() {\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\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 // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n instance.setPlaybackQuality(mapQualityUnit(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 // Get quality\n controls.setQualityMenu.call(\n player,\n mapQualityUnits(instance.getAvailableQualityLevels()),\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 i18n from '../i18n';\nimport { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\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 // 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 // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\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.3.23\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 buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\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');\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')) {\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 this.ads = new Ads(this);\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 // Trigger request event\n triggerEvent.call(this, this.media, 'qualityrequested', false, { quality });\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 // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n triggerEvent.call(this, this.media, eventName);\n }\n return !hiding;\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","// ==========================================================================\n// Plyr Polyfilled Build\n// plyr.js v3.3.23\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport 'babel-polyfill';\nimport 'custom-event-polyfill';\nimport 'url-polyfill';\nimport Plyr from './plyr';\n\nexport default Plyr;\n"]}
\ No newline at end of file diff --git a/dist/plyr.polyfilled.min.js.map b/dist/plyr.polyfilled.min.js.map index 4cddd5a6..2b5ea54a 100644 --- a/dist/plyr.polyfilled.min.js.map +++ b/dist/plyr.polyfilled.min.js.map @@ -1 +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/_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/_user-agent.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/custom-event-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/objects.js","src/js/utils/strings.js","src/js/i18n.js","src/js/utils/arrays.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","_shared","shared","_sharedKey","arrayIndexOf","IE_PROTO","_objectKeysInternal","names","result","push","_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","final","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","task","microtask","head","last","notify","flush","parent","domain","exit","enter","navigator","standalone","then","toggle","node","createTextNode","observe","characterData","$Promise","empty","newPromiseCapability","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","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","_userAgent","userAgent","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","preventDefault","defaultPrevented","params","evt","origPrevent","bubbles","cancelable","detail","createEvent","initCustomEvent","Event","iteratorSupported","checkIfIteratorIsSupported","createIterator","items","shift","serializeParam","encodeURIComponent","deserializeParam","decodeURIComponent","URLSearchParams","attribute","append","_this","_entries","getAll","callback","thisArg","polyfillURLSearchParams","u","URL","pathname","href","searchParams","checkIfURLIsSupported","_URL","url","base","doc","implementation","createHTMLDocument","baseElement","anchorElement","body","protocol","attributeName","_anchorElement","linkURLWithAnchorAttribute","origin","expectedPort","http:","https:","ftp:","addPortToOrigin","hostname","password","username","methodName","createObjectURL","blob","revokeObjectURL","polyfillURL","location","getOrigin","input","instanceOf","Boolean","isNullOrUndefined","isString","isNodeList","isEmpty","is$1","nullOrUndefined","boolean","function","array","weakMap","WeakMap","nodeList","element","Element","textNode","Text","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","hasAttribute","removeAttribute","toggleClass","force","classList","contains","hasClass","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelectorAll","getElements","container","getElement","querySelector","getFocusElement","focused","activeElement","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","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","cancelRequests","config","blankVideo","debug","getDeep","path","sources","defineProperty$1","format","replaceAll","toTitleCase","toUpperCase","substr","toLowerCase","toCamelCase","toPascalCase","getHTML","innerHTML","i18n","{seektime}","seekTime","{title}","title","_ref2","dedupe","item","Storage","classCallCheck","enabled","storage","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","classNames","tooltip","warn","toggleNativeControls","createIcon","iconPath","iconPrefix","icon","createElementNS","role","focusable","use","setAttributeNS","createLabel","attr","createBadge","badge","menu","createButton","buttonType","button","label","labelPressed","iconPressed","control","controlPressed","pressed","createRange","autocomplete","aria-label","aria-valuemin","aria-valuemax","aria-valuenow","updateRangeFill","createProgress","aria-hidden","suffixKey","played","suffix","createTime","createMenuItem","_ref$badge","_ref$checked","checked","radio","faux","insertAdjacentHTML","updateTimeDisplay","updateVolume","setRange","muted","updateProgress","current","toFixed","getElementsByTagName","nodeValue","setProgress","buffered","percent","setProperty","updateSeekTooltip","_this2","tooltips","clientRect","getBoundingClientRect","visible","_toggle","width","pageX","parseFloat","timeUpdate","invert","invertTime","seeking","durationUpdate","hasDuration","displayDuration","toggleTab","setting","tabs","setQualityMenu","_this3","panes","checkMenu","sorting","getLabel","getBadge","updateSetting","pane","currentTrack","default","setCaptionsMenu","_this4","tracks","getTracks","toggled","language","unshift","setSpeedMenu","_this5","speed","isVimeo","tab","toggleMenu","form","show","isMenuItem","isButton","stopPropagation","getTabSize","clone","position","opacity","scrollWidth","height","scrollHeight","showTab","_this6","size","restore","propertyName","focus","_this7","aria-haspopup","aria-controls","aria-expanded","aria-labelled-by","tabindex","inner","home","back","inject","_this8","props","seektime","offsetHeight","_config","labels","parseUrl","parser","buildUrlParams","setup","isVideo","isYouTube","languages","userLanguage","active","trackEvents","_captions","currentTrackNode","languageExists","mode","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","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","listeners","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","tabFocus","google","publisherId","providers","types","noop","Console","onChange","keyCode","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","handleKey","firstTouch","which","altKey","ctrlKey","metaKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","delay","hasAudio","initialized","managerPromise","isAudio","ended","proxyEvents","_event$detail","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","showHomeTab","currentTarget","eventType","seekTo","_player","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","mapQualityUnit","hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","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","onPlaybackQualityChange","onPlaybackRateChange","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","clearInterval","buffering","getVideoLoadedFraction","lastBuffered","onStateChange","levels","getAvailableQualityLevels","level","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","_this9","initialize","adError","zIndex","_this10","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":"8YACA,IAAIA,EAASC,EAAAC,QAAkC,oBAAVC,QAAyBA,OAAOC,MAAQA,KACzED,OAAwB,oBAARE,MAAuBA,KAAKD,MAAQA,KAAOC,KAE3DC,SAAS,cAATA,GACc,iBAAPC,MAAiBA,IAAMP,qBCLlC,IAAIQ,EAAOP,EAAAC,SAAmBO,QAAS,SACrB,iBAAPC,MAAiBA,IAAMF,KCDlCG,aAAiB,SAAUC,GACzB,MAAqB,iBAAPA,EAAyB,OAAPA,EAA4B,mBAAPA,ICAvDC,EAAiB,SAAUD,GACzB,IAAKE,EAASF,GAAK,MAAMG,UAAUH,EAAK,sBACxC,OAAOA,GCHTI,EAAiB,SAAUC,GACzB,IACE,QAASA,IACT,MAAOC,GACP,OAAO,ICHXC,GAAkBC,EAAoB,WACpC,OAA+E,GAAxEC,OAAOC,kBAAmB,KAAOC,IAAK,WAAc,OAAO,KAAQC,ICDxEC,EAAWL,EAAqBK,SAEhCC,EAAKZ,EAASW,IAAaX,EAASW,EAASE,eACjDC,EAAiB,SAAUhB,GACzB,OAAOc,EAAKD,EAASE,cAAcf,OCLrCiB,GAAkBT,IAA8BU,EAAoB,WAClE,OAA4G,GAArGT,OAAOC,eAAeS,EAAyB,OAAQ,KAAOR,IAAK,WAAc,OAAO,KAAQC,ICGzGQ,EAAiB,SAAUpB,EAAIqB,GAC7B,IAAKnB,EAASF,GAAK,OAAOA,EAC1B,IAAIsB,EAAIC,EACR,GAAIF,GAAkC,mBAArBC,EAAKtB,EAAGwB,YAA4BtB,EAASqB,EAAMD,EAAGG,KAAKzB,IAAM,OAAOuB,EACzF,GAAgC,mBAApBD,EAAKtB,EAAG0B,WAA2BxB,EAASqB,EAAMD,EAAGG,KAAKzB,IAAM,OAAOuB,EACnF,IAAKF,GAAkC,mBAArBC,EAAKtB,EAAGwB,YAA4BtB,EAASqB,EAAMD,EAAGG,KAAKzB,IAAM,OAAOuB,EAC1F,MAAMpB,UAAU,4CCPdwB,EAAKlB,OAAOC,oBAEJF,EAA4BC,OAAOC,eAAiB,SAAwBkB,EAAGC,EAAGC,GAI5F,GAHAC,EAASH,GACTC,EAAIG,EAAYH,GAAG,GACnBE,EAASD,GACLG,EAAgB,IAClB,OAAON,EAAGC,EAAGC,EAAGC,GAChB,MAAOxB,IACT,GAAI,QAASwB,GAAc,QAASA,EAAY,MAAM3B,UAAU,4BAEhE,MADI,UAAW2B,IAAYF,EAAEC,GAAKC,EAAWI,OACtCN,ICdTO,EAAiB,SAAUC,EAAQF,GACjC,OACEG,aAAuB,EAATD,GACdE,eAAyB,EAATF,GAChBG,WAAqB,EAATH,GACZF,MAAOA,ICHXM,EAAiBhC,EAA4B,SAAUiC,EAAQC,EAAKR,GAClE,OAAOP,EAAGgB,EAAEF,EAAQC,EAAKE,EAAW,EAAGV,KACrC,SAAUO,EAAQC,EAAKR,GAEzB,OADAO,EAAOC,GAAOR,EACPO,GCNLI,KAAoBA,eACxBC,EAAiB,SAAU9C,EAAI0C,GAC7B,OAAOG,EAAepB,KAAKzB,EAAI0C,ICF7BK,EAAK,EACLC,EAAKxD,KAAKyD,SACdC,EAAiB,SAAUR,GACzB,MAAO,UAAUS,YAAeC,IAARV,EAAoB,GAAKA,EAAK,QAASK,EAAKC,GAAIxB,SAAS,sBCAnF,IAAI6B,EAAM7C,EAAkB,OAExB8C,EAAY5D,SAAkB,SAC9B6D,GAAO,GAAKD,GAAWE,MAFX,YAIhBtC,EAAmBuC,cAAgB,SAAUzD,GAC3C,OAAOsD,EAAU7B,KAAKzB,KAGvBX,EAAAC,QAAiB,SAAUsC,EAAGc,EAAKnB,EAAKmC,GACvC,IAAIC,EAA2B,mBAAPpC,EACpBoC,IAAYC,EAAIrC,EAAK,SAAWsC,EAAKtC,EAAK,OAAQmB,IAClDd,EAAEc,KAASnB,IACXoC,IAAYC,EAAIrC,EAAK8B,IAAQQ,EAAKtC,EAAK8B,EAAKzB,EAAEc,GAAO,GAAKd,EAAEc,GAAOa,EAAIO,KAAKC,OAAOrB,MACnFd,IAAMxC,EACRwC,EAAEc,GAAOnB,EACCmC,EAGD9B,EAAEc,GACXd,EAAEc,GAAOnB,EAETsC,EAAKjC,EAAGc,EAAKnB,WALNK,EAAEc,GACTmB,EAAKjC,EAAGc,EAAKnB,OAOd7B,SAASsE,UAxBI,WAwBkB,WAChC,MAAsB,mBAARC,MAAsBA,KAAKZ,IAAQC,EAAU7B,KAAKwC,UC7BlEC,EAAiB,SAAUlE,GACzB,GAAiB,mBAANA,EAAkB,MAAMG,UAAUH,EAAK,uBAClD,OAAOA,GCATmE,EAAiB,SAAU7C,EAAI8C,EAAMC,GAEnC,GADAC,EAAUhD,QACG8B,IAATgB,EAAoB,OAAO9C,EAC/B,OAAQ+C,GACN,KAAK,EAAG,OAAO,SAAUzD,GACvB,OAAOU,EAAGG,KAAK2C,EAAMxD,IAEvB,KAAK,EAAG,OAAO,SAAUA,EAAG2D,GAC1B,OAAOjD,EAAGG,KAAK2C,EAAMxD,EAAG2D,IAE1B,KAAK,EAAG,OAAO,SAAU3D,EAAG2D,EAAGC,GAC7B,OAAOlD,EAAGG,KAAK2C,EAAMxD,EAAG2D,EAAGC,IAG/B,OAAO,WACL,OAAOlD,EAAGmD,MAAML,EAAMM,aCVtBC,EAAU,SAAUC,EAAMC,EAAMC,GAClC,IAQIpC,EAAKqC,EAAKC,EAAKC,EARfC,EAAYN,EAAOD,EAAQQ,EAC3BC,EAAYR,EAAOD,EAAQU,EAC3BC,EAAYV,EAAOD,EAAQtD,EAC3BkE,EAAWX,EAAOD,EAAQ9C,EAC1B2D,EAAUZ,EAAOD,EAAQc,EACzBC,EAASN,EAAYhG,EAASkG,EAAYlG,EAAOyF,KAAUzF,EAAOyF,QAAezF,EAAOyF,QAAsB,UAC9GvF,EAAU8F,EAAYxF,EAAOA,EAAKiF,KAAUjF,EAAKiF,OACjDc,EAAWrG,EAAiB,YAAMA,EAAiB,cAGvD,IAAKoD,KADD0C,IAAWN,EAASD,GACZC,EAIVE,IAFAD,GAAOG,GAAaQ,QAA0BtC,IAAhBsC,EAAOhD,IAExBgD,EAASZ,GAAQpC,GAE9BuC,EAAMO,GAAWT,EAAMa,EAAIZ,EAAK5F,GAAUmG,GAA0B,mBAAPP,EAAoBY,EAAIlG,SAAS+B,KAAMuD,GAAOA,EAEvGU,GAAQG,EAASH,EAAQhD,EAAKsC,EAAKJ,EAAOD,EAAQmB,GAElDxG,EAAQoD,IAAQsC,GAAKnB,EAAKvE,EAASoD,EAAKuC,GACxCM,GAAYI,EAASjD,IAAQsC,IAAKW,EAASjD,GAAOsC,IAG1D5F,EAAOQ,KAAOA,EAEd+E,EAAQQ,EAAI,EACZR,EAAQU,EAAI,EACZV,EAAQtD,EAAI,EACZsD,EAAQ9C,EAAI,EACZ8C,EAAQc,EAAI,GACZd,EAAQoB,EAAI,GACZpB,EAAQmB,EAAI,GACZnB,EAAQqB,EAAI,IC1BZ,ID2BA,ICjCIC,EDiCJC,EAAiBvB,ECvCbwB,EAAQC,EAAI,eACZC,EAAOD,EAAI,QACXE,KAASlH,EAAOmH,cAAenH,EAAOoH,UACtCC,EAASH,EACTI,EAAI,EAIJC,EAAyB,iHAE3BnD,MAAM,KAEDkD,EAPC,IAQFT,EAAQ7G,EAAOuH,EAAuBD,QACxC7C,EAAKoC,EAAMjC,UAAWmC,GAAO,GAC7BtC,EAAKoC,EAAMjC,UAAWqC,GAAM,IACvBI,GAAS,EAGlB,IAAAG,GACEN,IAAKA,EACLG,OAAQA,EACRN,MAAOA,EACPE,KAAMA,GCzBRQ,EAAiB,SAAUnB,EAAQoB,EAAKpD,GACtC,IAAK,IAAIhB,KAAOoE,EAAKjB,EAASH,EAAQhD,EAAKoE,EAAIpE,GAAMgB,GACrD,OAAOgC,GCHTqB,EAAiB,SAAU/G,EAAIgH,EAAanC,EAAMoC,GAChD,KAAMjH,aAAcgH,SAAoC5D,IAAnB6D,GAAgCA,KAAkBjH,EACrF,MAAMG,UAAU0E,EAAO,2BACvB,OAAO7E,GCFPkH,EAAO1H,KAAK0H,KACZC,EAAQ3H,KAAK2H,MACjBC,EAAiB,SAAUpH,GACzB,OAAOqH,MAAMrH,GAAMA,GAAM,GAAKA,EAAK,EAAImH,EAAQD,GAAMlH,ICFnDsH,EAAM9H,KAAK8H,IACfC,EAAiB,SAAUvH,GACzB,OAAOA,EAAK,EAAIsH,EAAIE,EAAUxH,GAAK,kBAAoB,GCDzDyH,EAAiB,SAAUzH,GACzB,QAAWoD,IAAPpD,EAAkB,OAAO,EAC7B,IAAI0H,EAASF,EAAUxH,GACnBqE,EAASsD,EAASD,GACtB,GAAIA,IAAWrD,EAAQ,MAAMuD,WAAW,iBACxC,OAAOvD,GCRL7C,KAAcA,SAElBqG,EAAiB,SAAU7H,GACzB,OAAOwB,EAASC,KAAKzB,GAAI8H,MAAM,GAAI,ICArCC,EAAiBtH,OAAO,KAAKuH,qBAAqB,GAAKvH,OAAS,SAAUT,GACxE,MAAkB,UAAXiI,EAAIjI,GAAkBA,EAAGwD,MAAM,IAAM/C,OAAOT,ICHrDkI,EAAiB,SAAUlI,GACzB,GAAUoD,MAANpD,EAAiB,MAAMG,UAAU,yBAA2BH,GAChE,OAAOA,GCATmI,EAAiB,SAAUnI,GACzB,OAAOoI,EAAQC,EAAQrI,KCHrBsI,EAAM9I,KAAK8I,IACXhB,EAAM9H,KAAK8H,IACfiB,EAAiB,SAAUC,EAAOnE,GAEhC,OADAmE,EAAQhB,EAAUgB,IACH,EAAIF,EAAIE,EAAQnE,EAAQ,GAAKiD,EAAIkB,EAAOnE,ICAzDoE,EAAiB,SAAUC,GACzB,OAAO,SAAUC,EAAOC,EAAIC,GAC1B,IAGI3G,EAHAN,EAAIkH,EAAUH,GACdtE,EAASsD,EAAS/F,EAAEyC,QACpBmE,EAAQO,EAAgBF,EAAWxE,GAIvC,GAAIqE,GAAeE,GAAMA,GAAI,KAAOvE,EAASmE,GAG3C,IAFAtG,EAAQN,EAAE4G,OAEGtG,EAAO,OAAO,OAEtB,KAAMmC,EAASmE,EAAOA,IAAS,IAAIE,GAAeF,KAAS5G,IAC5DA,EAAE4G,KAAWI,EAAI,OAAOF,GAAeF,GAAS,EACpD,OAAQE,IAAgB,IClB1BM,EAAQ5J,EADC,wBACkBA,EADlB,0BAEb6J,EAAiB,SAAUvG,GACzB,OAAOsG,EAAMtG,KAASsG,EAAMtG,QCJ1BwG,GAAS1I,EAAqB,QAElC2I,GAAiB,SAAUzG,GACzB,OAAOwG,GAAOxG,KAASwG,GAAOxG,GAAO0D,EAAI1D,KCDvC0G,GAAe5I,GAA6B,GAC5C6I,GAAWnI,GAAyB,YAExCoI,GAAiB,SAAU7G,EAAQ8G,GACjC,IAGI7G,EAHAd,EAAIkH,EAAUrG,GACdiE,EAAI,EACJ8C,KAEJ,IAAK9G,KAAOd,EAAOc,GAAO2G,IAAUzF,EAAIhC,EAAGc,IAAQ8G,EAAOC,KAAK/G,GAE/D,KAAO6G,EAAMlF,OAASqC,GAAO9C,EAAIhC,EAAGc,EAAM6G,EAAM7C,SAC7C0C,GAAaI,EAAQ9G,IAAQ8G,EAAOC,KAAK/G,IAE5C,OAAO8G,GCdTE,GAAiB,gGAEflG,MAAM,KCDJmG,GAAanJ,GAA4B2C,OAAO,SAAU,mBAElD1C,OAAOmJ,qBAAuB,SAA6BhI,GACrE,OAAOiI,GAAMjI,EAAG+H,MCHlBG,GAAiB,SAAU9J,GACzB,OAAOS,OAAO4H,EAAQrI,KCExB+J,GAAiB,SAAc7H,GAO7B,IANA,IAAIN,EAAIoI,GAAS/F,MACbI,EAASsD,EAAS/F,EAAEyC,QACpB4F,EAAOvF,UAAUL,OACjBmE,EAAQO,EAAgBkB,EAAO,EAAIvF,UAAU,QAAKtB,EAAWiB,GAC7D6F,EAAMD,EAAO,EAAIvF,UAAU,QAAKtB,EAChC+G,OAAiB/G,IAAR8G,EAAoB7F,EAAS0E,EAAgBmB,EAAK7F,GACxD8F,EAAS3B,GAAO5G,EAAE4G,KAAWtG,EACpC,OAAON,oBCbT,IAAIoH,EAAQxI,EAAqB,OAE7B4J,EAASlJ,EAAqBkJ,OAC9BC,EAA8B,mBAAVD,GAET/K,EAAAC,QAAiB,SAAUuF,GACxC,OAAOmE,EAAMnE,KAAUmE,EAAMnE,GAC3BwF,GAAcD,EAAOvF,KAAUwF,EAAaD,EAAShE,GAAK,UAAYvB,MAGjEmE,MAAQA,ICVbsB,GAAM9J,EAAwBmC,EAE9B4H,GAAMrJ,GAAkB,eAE5BsJ,GAAiB,SAAUxK,EAAIyK,EAAKC,GAC9B1K,IAAO4D,EAAI5D,EAAK0K,EAAO1K,EAAKA,EAAGgE,UAAWuG,KAAMD,GAAItK,EAAIuK,IAAOjI,cAAc,EAAMJ,MAAOuI,wBCOhG,IAAIE,EAAOnK,GAA0BmC,EACjChB,EAAKT,EAAwByB,EAK7BiI,EAAY,YAEZC,EAAc,eACdC,EAAe1L,EAAmB,YAClC2L,EAAY3L,EAAgB,SAC5BI,EAAOJ,EAAOI,KACdoI,EAAaxI,EAAOwI,WAEpBoD,EAAW5L,EAAO4L,SAClBC,EAAaH,EACbI,EAAM1L,EAAK0L,IACXC,EAAM3L,EAAK2L,IACXhE,EAAQ3H,EAAK2H,MACbiE,EAAM5L,EAAK4L,IACXC,EAAM7L,EAAK6L,IAIXC,EAAUC,EAAc,KAHf,SAITC,EAAUD,EAAc,KAHV,aAIdE,EAAUF,EAAc,KAHV,aAMlB,SAASG,EAAYxJ,EAAOyJ,EAAMC,GAChC,IAOItL,EAAGuL,EAAGrH,EAPNsH,EAAS,IAAIC,MAAMH,GACnBI,EAAgB,EAATJ,EAAaD,EAAO,EAC3BM,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBE,EAAc,KAATR,EAAcR,EAAI,GAAI,IAAMA,EAAI,GAAI,IAAM,EAC/CzE,EAAI,EACJ0F,EAAIlK,EAAQ,GAAe,IAAVA,GAAe,EAAIA,EAAQ,EAAI,EAAI,EAkCxD,KAhCAA,EAAQgJ,EAAIhJ,KAECA,GAASA,IAAU8I,GAE9Ba,EAAI3J,GAASA,EAAQ,EAAI,EACzB5B,EAAI2L,IAEJ3L,EAAI6G,EAAMiE,EAAIlJ,GAASmJ,GACnBnJ,GAASsC,EAAI2G,EAAI,GAAI7K,IAAM,IAC7BA,IACAkE,GAAK,IAGLtC,GADE5B,EAAI4L,GAAS,EACNC,EAAK3H,EAEL2H,EAAKhB,EAAI,EAAG,EAAIe,IAEf1H,GAAK,IACflE,IACAkE,GAAK,GAEHlE,EAAI4L,GAASD,GACfJ,EAAI,EACJvL,EAAI2L,GACK3L,EAAI4L,GAAS,GACtBL,GAAK3J,EAAQsC,EAAI,GAAK2G,EAAI,EAAGQ,GAC7BrL,GAAQ4L,IAERL,EAAI3J,EAAQiJ,EAAI,EAAGe,EAAQ,GAAKf,EAAI,EAAGQ,GACvCrL,EAAI,IAGDqL,GAAQ,EAAGG,EAAOpF,KAAW,IAAJmF,EAASA,GAAK,IAAKF,GAAQ,GAG3D,IAFArL,EAAIA,GAAKqL,EAAOE,EAChBG,GAAQL,EACDK,EAAO,EAAGF,EAAOpF,KAAW,IAAJpG,EAASA,GAAK,IAAK0L,GAAQ,GAE1D,OADAF,IAASpF,IAAU,IAAJ0F,EACRN,EAET,SAASO,EAAcP,EAAQH,EAAMC,GACnC,IAOIC,EAPAG,EAAgB,EAATJ,EAAaD,EAAO,EAC3BM,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBK,EAAQN,EAAO,EACftF,EAAIkF,EAAS,EACbQ,EAAIN,EAAOpF,KACXpG,EAAQ,IAAJ8L,EAGR,IADAA,IAAM,EACCE,EAAQ,EAAGhM,EAAQ,IAAJA,EAAUwL,EAAOpF,GAAIA,IAAK4F,GAAS,GAIzD,IAHAT,EAAIvL,GAAK,IAAMgM,GAAS,EACxBhM,KAAOgM,EACPA,GAASX,EACFW,EAAQ,EAAGT,EAAQ,IAAJA,EAAUC,EAAOpF,GAAIA,IAAK4F,GAAS,GACzD,GAAU,IAANhM,EACFA,EAAI,EAAI4L,MACH,CAAA,GAAI5L,IAAM2L,EACf,OAAOJ,EAAIU,IAAMH,GAAKpB,EAAWA,EAEjCa,GAAQV,EAAI,EAAGQ,GACfrL,GAAQ4L,EACR,OAAQE,GAAK,EAAI,GAAKP,EAAIV,EAAI,EAAG7K,EAAIqL,GAGzC,SAASa,EAAUC,GACjB,OAAOA,EAAM,IAAM,GAAKA,EAAM,IAAM,GAAKA,EAAM,IAAM,EAAIA,EAAM,GAEjE,SAASC,EAAO1M,GACd,OAAa,IAALA,GAEV,SAAS2M,EAAQ3M,GACf,OAAa,IAALA,EAAWA,GAAM,EAAI,KAE/B,SAAS4M,EAAQ5M,GACf,OAAa,IAALA,EAAWA,GAAM,EAAI,IAAMA,GAAM,GAAK,IAAMA,GAAM,GAAK,KAEjE,SAAS6M,EAAQ7M,GACf,OAAO0L,EAAY1L,EAAI,GAAI,GAE7B,SAAS8M,EAAQ9M,GACf,OAAO0L,EAAY1L,EAAI,GAAI,GAG7B,SAAS+M,EAAUC,EAAGtK,EAAKuK,GACzBtL,EAAGqL,EAAEpC,GAAYlI,GAAO/B,IAAK,WAAc,OAAOsD,KAAKgJ,MAGzD,SAAStM,EAAIuM,EAAMT,EAAOjE,EAAO2E,GAC/B,IACIC,EAAWC,GADC7E,GAEhB,GAAI4E,EAAWX,EAAQS,EAAK1B,GAAU,MAAM5D,EAAWiD,GACvD,IAAI7B,EAAQkE,EAAK5B,GAASgC,GACtBC,EAAQH,EAAWF,EAAKzB,GACxB+B,EAAOxE,EAAMlB,MAAMyF,EAAOA,EAAQd,GACtC,OAAOU,EAAiBK,EAAOA,EAAKC,UAEtC,SAASC,EAAIR,EAAMT,EAAOjE,EAAOmF,EAAYzL,EAAOiL,GAClD,IACIC,EAAWC,GADC7E,GAEhB,GAAI4E,EAAWX,EAAQS,EAAK1B,GAAU,MAAM5D,EAAWiD,GAIvD,IAHA,IAAI7B,EAAQkE,EAAK5B,GAASgC,GACtBC,EAAQH,EAAWF,EAAKzB,GACxB+B,EAAOG,GAAYzL,GACdwE,EAAI,EAAGA,EAAI+F,EAAO/F,IAAKsC,EAAMuE,EAAQ7G,GAAK8G,EAAKL,EAAiBzG,EAAI+F,EAAQ/F,EAAI,GAG3F,GAAKkH,EAAOtH,IAgFL,CACL,IAAKuH,EAAM,WACT/C,EAAa,OACR+C,EAAM,WACX,IAAI/C,GAAc,MACd+C,EAAM,WAIV,OAHA,IAAI/C,EACJ,IAAIA,EAAa,KACjB,IAAIA,EAAayB,KApOF,eAqORzB,EAAajG,OAClB,CAMF,IADA,IACyCnC,EADrCoL,GAJJhD,EAAe,SAAqBzG,GAElC,OADA0J,EAAW9J,KAAM6G,GACV,IAAIG,EAAWoC,EAAQhJ,MAEIuG,GAAaK,EAAWL,GACnDoD,EAAOrD,EAAKM,GAAagD,EAAI,EAAQD,EAAK3J,OAAS4J,IACnDvL,EAAMsL,EAAKC,QAASnD,GAAejH,EAAKiH,EAAcpI,EAAKuI,EAAWvI,IAE/EoL,EAA+BI,YAAcpD,EAG/C,IAAIoC,EAAO,IAAInC,EAAU,IAAID,EAAa,IACtCqD,EAAWpD,EAAUH,GAAWwD,QACpClB,EAAKkB,QAAQ,EAAG,YAChBlB,EAAKkB,QAAQ,EAAG,aACZlB,EAAKmB,QAAQ,IAAOnB,EAAKmB,QAAQ,IAAIC,EAAYvD,EAAUH,IAC7DwD,QAAS,SAAiBG,EAAYrM,GACpCiM,EAAS1M,KAAKwC,KAAMsK,EAAYrM,GAAS,IAAM,KAEjDsM,SAAU,SAAkBD,EAAYrM,GACtCiM,EAAS1M,KAAKwC,KAAMsK,EAAYrM,GAAS,IAAM,OAEhD,QAhHH4I,EAAe,SAAqBzG,GAClC0J,EAAW9J,KAAM6G,EA9IF,eA+If,IAAI2D,EAAapB,EAAQhJ,GACzBJ,KAAKqJ,GAAKoB,GAAUjN,KAAK,IAAIsK,MAAM0C,GAAa,GAChDxK,KAAKuH,GAAWiD,GAGlB1D,EAAY,SAAkBe,EAAQyC,EAAYE,GAChDV,EAAW9J,KAAM8G,EApJL,YAqJZgD,EAAWjC,EAAQhB,EArJP,YAsJZ,IAAI6D,EAAe7C,EAAON,GACtBoD,EAASpH,EAAU+G,GACvB,GAAIK,EAAS,GAAKA,EAASD,EAAc,MAAM/G,EAAW,iBAE1D,GAAIgH,GADJH,OAA4BrL,IAAfqL,EAA2BE,EAAeC,EAASjH,EAAS8G,IAC/CE,EAAc,MAAM/G,EAxJ/B,iBAyJf3D,KAAKqH,GAAWQ,EAChB7H,KAAKwH,GAAWmD,EAChB3K,KAAKuH,GAAWiD,GAGdlD,IACFwB,EAAUjC,EAhJI,aAgJuB,MACrCiC,EAAUhC,EAlJD,SAkJoB,MAC7BgC,EAAUhC,EAlJI,aAkJoB,MAClCgC,EAAUhC,EAlJI,aAkJoB,OAGpCuD,EAAYvD,EAAUH,IACpByD,QAAS,SAAiBE,GACxB,OAAO5N,EAAIsD,KAAM,EAAGsK,GAAY,IAAM,IAAM,IAE9CM,SAAU,SAAkBN,GAC1B,OAAO5N,EAAIsD,KAAM,EAAGsK,GAAY,IAElCO,SAAU,SAAkBP,GAC1B,IAAI9B,EAAQ9L,EAAIsD,KAAM,EAAGsK,EAAY7J,UAAU,IAC/C,OAAQ+H,EAAM,IAAM,EAAIA,EAAM,KAAO,IAAM,IAE7CsC,UAAW,SAAmBR,GAC5B,IAAI9B,EAAQ9L,EAAIsD,KAAM,EAAGsK,EAAY7J,UAAU,IAC/C,OAAO+H,EAAM,IAAM,EAAIA,EAAM,IAE/BuC,SAAU,SAAkBT,GAC1B,OAAO/B,EAAU7L,EAAIsD,KAAM,EAAGsK,EAAY7J,UAAU,MAEtDuK,UAAW,SAAmBV,GAC5B,OAAO/B,EAAU7L,EAAIsD,KAAM,EAAGsK,EAAY7J,UAAU,OAAS,GAE/DwK,WAAY,SAAoBX,GAC9B,OAAOlC,EAAc1L,EAAIsD,KAAM,EAAGsK,EAAY7J,UAAU,IAAK,GAAI,IAEnEyK,WAAY,SAAoBZ,GAC9B,OAAOlC,EAAc1L,EAAIsD,KAAM,EAAGsK,EAAY7J,UAAU,IAAK,GAAI,IAEnE0J,QAAS,SAAiBG,EAAYrM,GACpCwL,EAAIzJ,KAAM,EAAGsK,EAAY7B,EAAQxK,IAEnCsM,SAAU,SAAkBD,EAAYrM,GACtCwL,EAAIzJ,KAAM,EAAGsK,EAAY7B,EAAQxK,IAEnCkN,SAAU,SAAkBb,EAAYrM,GACtCwL,EAAIzJ,KAAM,EAAGsK,EAAY5B,EAASzK,EAAOwC,UAAU,KAErD2K,UAAW,SAAmBd,EAAYrM,GACxCwL,EAAIzJ,KAAM,EAAGsK,EAAY5B,EAASzK,EAAOwC,UAAU,KAErD4K,SAAU,SAAkBf,EAAYrM,GACtCwL,EAAIzJ,KAAM,EAAGsK,EAAY3B,EAAS1K,EAAOwC,UAAU,KAErD6K,UAAW,SAAmBhB,EAAYrM,GACxCwL,EAAIzJ,KAAM,EAAGsK,EAAY3B,EAAS1K,EAAOwC,UAAU,KAErD8K,WAAY,SAAoBjB,EAAYrM,GAC1CwL,EAAIzJ,KAAM,EAAGsK,EAAYzB,EAAS5K,EAAOwC,UAAU,KAErD+K,WAAY,SAAoBlB,EAAYrM,GAC1CwL,EAAIzJ,KAAM,EAAGsK,EAAY1B,EAAS3K,EAAOwC,UAAU,OAsCzDgL,GAAe5E,EA/PI,eAgQnB4E,GAAe3E,EA/PC,YAgQhBlH,EAAKkH,EAAUH,GAAYgD,EAAOvH,MAAM,GACxC/G,EAAoB,YAAIwL,EACxBxL,EAAiB,SAAIyL,IChRjB4E,GAAUnP,GAAkB,WAChCoP,GAAiB,SAAUhO,EAAGiO,GAC5B,IACIxO,EADA2L,EAAIjL,EAASH,GAAGsM,YAEpB,YAAa9K,IAAN4J,GAAiD5J,OAA7B/B,EAAIU,EAASiL,GAAG2C,KAAyBE,EAAIvL,EAAUjD,ICHhFsO,GAAUnP,GAAkB,WAEhCsP,GAAiB,SAAUC,GACzB,IAAI/C,EAAI5N,EAAO2Q,GACXxE,GAAeyB,IAAMA,EAAE2C,KAAUhO,EAAGgB,EAAEqK,EAAG2C,IAC3CrN,cAAc,EACd3B,IAAK,WAAc,OAAOsD,SCF1BsC,GAAc/F,EAAqB+F,YAEnCuE,GAAegB,GAAOvF,YACtBwE,GAAYe,GAAOtF,SACnBwJ,GAAUpC,EAAOtH,KAAOC,GAAY0J,OACpCC,GAASpF,GAAa9G,UAAU8D,MAChCzB,GAAOuH,EAAOvH,KAGlB1B,EAAQA,EAAQU,EAAIV,EAAQoB,EAAIpB,EAAQQ,GAAKoB,KAAgBuE,KAAiBvE,YAAauE,KAE3FnG,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAKyI,EAAOnH,OAJrB,eAMjBwJ,OAAQ,SAAgBjQ,GACtB,OAAOgQ,IAAWA,GAAQhQ,IAAOE,EAASF,IAAOqG,MAAQrG,KAI7D2E,EAAQA,EAAQ9C,EAAI8C,EAAQmB,EAAInB,EAAQQ,EAAIjE,EAAoB,WAC9D,OAAQ,IAAI4J,GAAa,GAAGhD,MAAM,OAAG1E,GAAWqL,aAZ/B,eAejB3G,MAAO,SAAeyF,EAAOrD,GAC3B,QAAe9G,IAAX8M,SAAgC9M,IAAR8G,EAAmB,OAAOgG,GAAOzO,KAAKM,EAASkC,MAAOsJ,GAQlF,IAPA,IAAI4C,EAAMpO,EAASkC,MAAMwK,WACrB2B,EAAQrH,EAAgBwE,EAAO4C,GAC/BE,EAAQtH,OAAwB3F,IAAR8G,EAAoBiG,EAAMjG,EAAKiG,GACvD3G,EAAS,IAAK8G,GAAmBrM,KAAM6G,IAA9B,CAA6CnD,EAAS0I,EAAQD,IACvEG,EAAQ,IAAIxF,GAAU9G,MACtBuM,EAAQ,IAAIzF,GAAUvB,GACtBhB,EAAQ,EACL4H,EAAQC,GACbG,EAAMhC,SAAShG,IAAS+H,EAAM1B,SAASuB,MACvC,OAAO5G,KAIbrI,GA9BmB,eCbnB,IAAIoJ,GAAM/J,GAAkB,eAExBiQ,GAAkD,aAA5CxI,EAAI,WAAc,OAAOvD,UAArB,IASdgM,GAAiB,SAAU1Q,GACzB,IAAI4B,EAAG+O,EAAGlL,EACV,YAAcrC,IAAPpD,EAAmB,YAAqB,OAAPA,EAAc,OAEN,iBAApC2Q,EAVD,SAAU3Q,EAAI0C,GACzB,IACE,OAAO1C,EAAG0C,GACV,MAAOpC,KAOOsQ,CAAOhP,EAAInB,OAAOT,GAAKuK,KAAoBoG,EAEvDF,GAAMxI,EAAIrG,GAEM,WAAf6D,EAAIwC,EAAIrG,KAAsC,mBAAZA,EAAEiP,OAAuB,YAAcpL,GCrBhFqL,MCEIC,GAAWvQ,GAAkB,YAC7BwQ,GAAajF,MAAM/H,UAEvBiN,GAAiB,SAAUjR,GACzB,YAAcoD,IAAPpD,IAAqBkR,GAAUnF,QAAU/L,GAAMgR,GAAWD,MAAc/Q,ICFjFmR,GAAiB1Q,OAAOuN,MAAQ,SAAcpM,GAC5C,OAAOiI,GAAMjI,EAAGwP,KCDlBC,GAAiB7Q,EAA4BC,OAAO6Q,iBAAmB,SAA0B1P,EAAG2P,GAClGxP,EAASH,GAKT,IAJA,IAGIC,EAHAmM,EAAOwD,GAAQD,GACflN,EAAS2J,EAAK3J,OACdqC,EAAI,EAEDrC,EAASqC,GAAG/E,EAAGgB,EAAEf,EAAGC,EAAImM,EAAKtH,KAAM6K,EAAW1P,IACrD,OAAOD,GCXLf,GAAWL,EAAqBK,SACpC4Q,GAAiB5Q,IAAYA,GAAS6Q,gBCGlCrI,GAAW7I,GAAyB,YACpCmR,GAAQ,aAIRC,GAAa,WAEf,IAIIC,EAJAC,EAAS5Q,EAAyB,UAClCwF,EAAI0K,GAAY/M,OAcpB,IAVAyN,EAAOC,MAAMC,QAAU,OACvB7Q,GAAmB8Q,YAAYH,GAC/BA,EAAOhL,IAAM,eAGb+K,EAAiBC,EAAOI,cAAcrR,UACvBsR,OACfN,EAAeO,MAAMC,uCACrBR,EAAeS,QACfV,GAAaC,EAAe1M,EACrBuB,YAAYkL,GAAoB,UAAER,GAAY1K,IACrD,OAAOkL,MAGTW,GAAiB9R,OAAO+R,QAAU,SAAgB5Q,EAAG2P,GACnD,IAAI/H,EAQJ,OAPU,OAAN5H,GACF+P,GAAe,UAAI5P,EAASH,GAC5B4H,EAAS,IAAImI,GACbA,GAAe,UAAI,KAEnBnI,EAAOH,IAAYzH,GACd4H,EAASoI,UACMxO,IAAfmO,EAA2B/H,EAASiJ,GAAIjJ,EAAQ+H,ICpCrDlI,GAAW7I,GAAyB,YACpCkS,GAAcjS,OAAOuD,UAEzB2O,GAAiBlS,OAAOmS,gBAAkB,SAAUhR,GAElD,OADAA,EAAIoI,GAASpI,GACTgC,EAAIhC,EAAGyH,IAAkBzH,EAAEyH,IACH,mBAAjBzH,EAAEsM,aAA6BtM,aAAaA,EAAEsM,YAChDtM,EAAEsM,YAAYlK,UACdpC,aAAanB,OAASiS,GAAc,MCV3C3B,GAAWvQ,GAAkB,YAEjCqS,GAAiB3R,EAAmB4R,kBAAoB,SAAU9S,GAChE,GAAUoD,MAANpD,EAAiB,OAAOA,EAAG+Q,KAC1B/Q,EAAG,eACHkR,GAAU6B,GAAQ/S,KCJzBgT,GAAiBjH,MAAMkH,SAAW,SAAiBC,GACjD,MAAmB,SAAZjL,EAAIiL,ICDTvD,GAAUnP,GAAkB,WCChC2S,GAAiB,SAAUC,EAAU/O,GACnC,OAAO,IDAQ,SAAU+O,GACzB,IAAIpG,EASF,OAREiG,GAAQG,KAGM,mBAFhBpG,EAAIoG,EAASlF,cAEkBlB,IAAMjB,QAASkH,GAAQjG,EAAEhJ,aAAagJ,OAAI5J,GACrElD,EAAS8M,IAED,QADVA,EAAIA,EAAE2C,OACU3C,OAAI5J,SAETA,IAAN4J,EAAkBjB,MAAQiB,ECV5B,CAAwBoG,GAAxB,CAAmC/O,ICQ5CgP,GAAiB,SAAUC,EAAMC,GAC/B,IAAIC,EAAiB,GAARF,EACTG,EAAoB,GAARH,EACZI,EAAkB,GAARJ,EACVK,EAAmB,GAARL,EACXM,EAAwB,GAARN,EAChBO,EAAmB,GAARP,GAAaM,EACxBpB,EAASe,GAAWO,GACxB,OAAO,SAAUnL,EAAOoL,EAAY3P,GAQlC,IAPA,IAMI7C,EAAKyS,EANLpS,EAAIoI,GAASrB,GACblJ,EAAO2I,EAAQxG,GACfe,EAAIiD,EAAImO,EAAY3P,EAAM,GAC1BC,EAASsD,EAASlI,EAAK4E,QACvBmE,EAAQ,EACRgB,EAASgK,EAAShB,EAAO7J,EAAOtE,GAAUoP,EAAYjB,EAAO7J,EAAO,QAAKvF,EAEvEiB,EAASmE,EAAOA,IAAS,IAAIqL,GAAYrL,KAAS/I,KAEtDuU,EAAMrR,EADNpB,EAAM9B,EAAK+I,GACEA,EAAO5G,GAChB0R,GACF,GAAIE,EAAQhK,EAAOhB,GAASwL,OACvB,GAAIA,EAAK,OAAQV,GACpB,KAAK,EAAG,OAAO,EACf,KAAK,EAAG,OAAO/R,EACf,KAAK,EAAG,OAAOiH,EACf,KAAK,EAAGgB,EAAOC,KAAKlI,QACf,GAAIoS,EAAU,OAAO,EAGhC,OAAOC,GAAiB,EAAIF,GAAWC,EAAWA,EAAWnK,ICxC7DyK,GAAczT,GAAkB,eAChCwQ,GAAajF,MAAM/H,UACQZ,MAA3B4N,GAAWiD,KAA2B/S,EAAmB8P,GAAYiD,OACzE,IAAAC,GAAiB,SAAUxR,GACzBsO,GAAWiD,IAAavR,IAAO,GCLjCyR,GAAiB,SAAUC,EAAMlS,GAC/B,OAASA,MAAOA,EAAOkS,OAAQA,ICG7BC,MAGJ7T,EAAmB6T,GAAmBnT,GAAkB,YAAa,WAAc,OAAO+C,OAE1F,IAAAqQ,GAAiB,SAAUtN,EAAauN,EAAMC,GAC5CxN,EAAYhD,UAAYwO,GAAO6B,IAAqBG,KAAMC,EAAW,EAAGD,KACxE9E,GAAe1I,EAAauN,EAAO,cCDjCxD,GAAWvQ,GAAkB,YAC7BkU,QAAa1G,MAAQ,WAAaA,QAKlC2G,GAAa,WAAc,OAAO1Q,MAEtC2Q,GAAiB,SAAUC,EAAMN,EAAMvN,EAAawN,EAAMM,EAASC,EAAQC,GACzEC,GAAYjO,EAAauN,EAAMC,GAC/B,IAeIU,EAASxS,EAAK2R,EAfdc,EAAY,SAAUC,GACxB,IAAKV,IAASU,KAAQC,EAAO,OAAOA,EAAMD,GAC1C,OAAQA,GACN,IAVK,OAWL,IAVO,SAUM,OAAO,WAAoB,OAAO,IAAIpO,EAAY/C,KAAMmR,IACrE,OAAO,WAAqB,OAAO,IAAIpO,EAAY/C,KAAMmR,KAEzD7K,EAAMgK,EAAO,YACbe,EAdO,UAcMR,EACbS,GAAa,EACbF,EAAQR,EAAK7Q,UACbwR,EAAUH,EAAMtE,KAAasE,EAnBjB,eAmBuCP,GAAWO,EAAMP,GACpEW,GAAaf,IAASc,GAAYL,EAAUL,GAC5CY,EAAWZ,EAAWQ,EAAwBH,EAAU,WAArBM,OAAkCrS,EACrEuS,EAAqB,SAARpB,GAAkBc,EAAMO,SAAqBJ,EAwB9D,GArBIG,IACFtB,EAAoBzB,GAAe+C,EAAWlU,KAAK,IAAIoT,OAC7BpU,OAAOuD,WAAaqQ,EAAkBG,OAE9D9E,GAAe2E,EAAmB9J,GAAK,GAEtB3G,EAAIyQ,EAAmBtD,KAAWlN,EAAKwQ,EAAmBtD,GAAU4D,KAIrFW,GAAcE,GAjCP,WAiCkBA,EAAQ3Q,OACnC0Q,GAAa,EACbE,EAAW,WAAoB,OAAOD,EAAQ/T,KAAKwC,SAGjDyQ,IAAkCa,IAAeF,EAAMtE,MACzDlN,EAAKwR,EAAOtE,GAAU0E,GAGxBvE,GAAUqD,GAAQkB,EAClBvE,GAAU3G,GAAOoK,GACbG,EAMF,GALAI,GACEW,OAAQP,EAAaG,EAAWN,EA9CzB,UA+CPnH,KAAM+G,EAASU,EAAWN,EAhDrB,QAiDLS,QAASF,GAEPV,EAAQ,IAAKtS,KAAOwS,EAChBxS,KAAO2S,GAAQxP,EAASwP,EAAO3S,EAAKwS,EAAQxS,SAC7CiC,EAAQA,EAAQ9C,EAAI8C,EAAQQ,GAAKuP,IAASa,GAAahB,EAAMW,GAEtE,OAAOA,GC1DTY,GAAiBtV,GAA0BuL,MAAO,QAAS,SAAUgK,EAAUX,GAC7EnR,KAAK+R,GAAKlN,EAAUiN,GACpB9R,KAAKgS,GAAK,EACVhS,KAAKiS,GAAKd,GAET,WACD,IAAIxT,EAAIqC,KAAK+R,GACTZ,EAAOnR,KAAKiS,GACZ1N,EAAQvE,KAAKgS,KACjB,OAAKrU,GAAK4G,GAAS5G,EAAEyC,QACnBJ,KAAK+R,QAAK5S,EACH+S,GAAK,IAEaA,GAAK,EAApB,QAARf,EAA+B5M,EACvB,UAAR4M,EAAiCxT,EAAE4G,IACvBA,EAAO5G,EAAE4G,MACxB,UAGH0I,GAAUkF,UAAYlF,GAAUnF,MAEhCsK,GAAiB,QACjBA,GAAiB,UACjBA,GAAiB,WCjCjB,IAAItF,GAAWvQ,GAAkB,YAC7B8V,IAAe,EAEnB,KACe,GAAGvF,MACF,OAAI,WAAcuF,IAAe,GAG/C,MAAOhW,IAET,IAAAiW,GAAiB,SAAUlW,EAAMmW,GAC/B,IAAKA,IAAgBF,GAAc,OAAO,EAC1C,IAAI5S,GAAO,EACX,IACE,IAAI+S,GAAO,GACPC,EAAOD,EAAI1F,MACf2F,EAAKlC,KAAO,WAAc,OAASJ,KAAM1Q,GAAO,IAChD+S,EAAI1F,IAAY,WAAc,OAAO2F,GACrCrW,EAAKoW,GACL,MAAOnW,IACT,OAAOoD,GCdTiT,MAAoBC,YAAc,SAAoBlR,EAAkB6H,GACtE,IAAI3L,EAAIoI,GAAS/F,MACbkM,EAAMxI,EAAS/F,EAAEyC,QACjBwS,EAAK9N,EAAgBrD,EAAQyK,GAC7B2G,EAAO/N,EAAgBwE,EAAO4C,GAC9BjG,EAAMxF,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,EAC5C2T,EAAQvX,KAAK8H,UAAalE,IAAR8G,EAAoBiG,EAAMpH,EAAgBmB,EAAKiG,IAAQ2G,EAAM3G,EAAM0G,GACrFG,EAAM,EAMV,IALIF,EAAOD,GAAMA,EAAKC,EAAOC,IAC3BC,GAAO,EACPF,GAAQC,EAAQ,EAChBF,GAAME,EAAQ,GAETA,KAAU,GACXD,KAAQlV,EAAGA,EAAEiV,GAAMjV,EAAEkV,UACblV,EAAEiV,GACdA,GAAMG,EACNF,GAAQE,EACR,OAAOpV,YCxBIoG,sBCMXiP,GAAOxW,OAAOyW,+BAEN1W,EAA4ByW,GAAO,SAAkCrV,EAAGC,GAGlF,GAFAD,EAAIkH,EAAUlH,GACdC,EAAIG,EAAYH,GAAG,GACfI,EAAgB,IAClB,OAAOgV,GAAKrV,EAAGC,GACf,MAAOvB,IACT,GAAIsD,EAAIhC,EAAGC,GAAI,OAAOe,GAAYuU,GAAIxU,EAAElB,KAAKG,EAAGC,GAAID,EAAEC,uBCbxD,GAAIrB,EAA2B,CAE7B,IAAIpB,EAAS+B,EACT0M,EAAQuJ,EACRzS,EAAU0S,EACVzJ,EAAS0J,EACTC,EAAUC,GACV5R,EAAM6R,EACN1J,EAAa2J,EACbC,EAAeC,EACf/T,EAAOgU,EACPvJ,EAAcwJ,EACdtQ,EAAYuQ,EACZpQ,EAAWqQ,EACX3K,EAAU4K,EACVlP,EAAkBmP,EAClBlW,EAAcmW,EACdvU,EAAMwU,EACNrF,EAAUsF,GACVnY,EAAWoY,EACXtO,EAAWuO,GACXC,EAAcC,GACdjG,EAASkG,GACT9F,EAAiB+F,GACjBhO,EAAOiO,GAA0BjW,EACjCkW,EAAYC,GACZ1S,EAAM2S,EACNC,EAAMC,GACNC,EAAoBC,GACpBC,EAAsBC,EACtB/I,EAAqBgJ,GACrBC,EAAiBC,GACjBtI,EAAYuI,GACZC,EAAcC,GACdC,EAAaC,GACbnL,GAAYoL,GACZC,GAAkBC,GAClBC,GAAMC,EACNC,GAAQC,GACRzY,GAAKsY,GAAItX,EACTsU,GAAOkD,GAAMxX,EACbiF,GAAaxI,EAAOwI,WACpBzH,GAAYf,EAAOe,UACnBka,GAAajb,EAAOib,WAKpBrJ,GAAajF,MAAe,UAC5BjB,GAAeyM,EAAQhR,YACvBwE,GAAYwM,EAAQ/Q,SACpB8T,GAAepB,EAAkB,GACjCqB,GAAcrB,EAAkB,GAChCsB,GAAYtB,EAAkB,GAC9BuB,GAAavB,EAAkB,GAC/BwB,GAAYxB,EAAkB,GAC9ByB,GAAiBzB,EAAkB,GACnC0B,GAAgBxB,GAAoB,GACpChQ,GAAegQ,GAAoB,GACnCyB,GAActB,EAAe1D,OAC7BiF,GAAYvB,EAAevL,KAC3B+M,GAAexB,EAAe3D,QAC9BoF,GAAmBhK,GAAWiK,YAC9BC,GAAclK,GAAWmK,OACzBC,GAAmBpK,GAAWqK,YAC9BC,GAAYtK,GAAWlN,KACvByX,GAAYvK,GAAWwK,KACvBC,GAAazK,GAAWlJ,MACxB4T,GAAgB1K,GAAWxP,SAC3Bma,GAAsB3K,GAAW4K,eACjC7K,GAAWiI,EAAI,YACfzO,GAAMyO,EAAI,eACV6C,GAAoBzV,EAAI,qBACxB0V,GAAkB1V,EAAI,mBACtB2V,GAAmBnO,EAAOnH,OAC1BuV,GAAcpO,EAAOzH,MACrBE,GAAOuH,EAAOvH,KAGd4V,GAAO/C,EAAkB,EAAG,SAAUtX,EAAGyC,GAC3C,OAAO6X,GAAS5L,EAAmB1O,EAAGA,EAAEka,KAAmBzX,KAGzD8X,GAAgBtO,EAAM,WAExB,OAA0D,IAAnD,IAAIwM,GAAW,IAAI+B,aAAa,IAAItQ,QAAQ,KAGjDuQ,KAAehC,MAAgBA,GAAoB,UAAE3M,KAAOG,EAAM,WACpE,IAAIwM,GAAW,GAAG3M,UAGhB4O,GAAW,SAAUtc,EAAIuc,GAC3B,IAAI3N,EAASpH,EAAUxH,GACvB,GAAI4O,EAAS,GAAKA,EAAS2N,EAAO,MAAM3U,GAAW,iBACnD,OAAOgH,GAGL4N,GAAW,SAAUxc,GACvB,GAAIE,EAASF,IAAOgc,MAAehc,EAAI,OAAOA,EAC9C,MAAMG,GAAUH,EAAK,2BAGnBkc,GAAW,SAAUlP,EAAG3I,GAC1B,KAAMnE,EAAS8M,IAAM6O,MAAqB7O,GACxC,MAAM7M,GAAU,wCAChB,OAAO,IAAI6M,EAAE3I,IAGboY,GAAkB,SAAU7a,EAAG8a,GACjC,OAAOC,GAASrM,EAAmB1O,EAAGA,EAAEka,KAAmBY,IAGzDC,GAAW,SAAU3P,EAAG0P,GAI1B,IAHA,IAAIlU,EAAQ,EACRnE,EAASqY,EAAKrY,OACdmF,EAAS0S,GAASlP,EAAG3I,GAClBA,EAASmE,GAAOgB,EAAOhB,GAASkU,EAAKlU,KAC5C,OAAOgB,GAGLuD,GAAY,SAAU/M,EAAI0C,EAAKuK,GACjCtL,GAAG3B,EAAI0C,GAAO/B,IAAK,WAAc,OAAOsD,KAAK2Y,GAAG3P,OAG9C4P,GAAQ,SAAc/X,GACxB,IAKI4B,EAAGrC,EAAQwR,EAAQrM,EAAQ2M,EAAM2G,EALjClb,EAAIoI,EAASlF,GACbmF,EAAOvF,UAAUL,OACjB0Y,EAAQ9S,EAAO,EAAIvF,UAAU,QAAKtB,EAClC4Z,OAAoB5Z,IAAV2Z,EACVE,EAASpE,EAAUjX,GAEvB,GAAcwB,MAAV6Z,IAAwBzE,EAAYyE,GAAS,CAC/C,IAAKH,EAAWG,EAAOxb,KAAKG,GAAIiU,KAAanP,EAAI,IAAKyP,EAAO2G,EAAStI,QAAQJ,KAAM1N,IAClFmP,EAAOpM,KAAK0M,EAAKjU,OACjBN,EAAIiU,EAGR,IADImH,GAAW/S,EAAO,IAAG8S,EAAQnX,EAAImX,EAAOrY,UAAU,GAAI,IACrDgC,EAAI,EAAGrC,EAASsD,EAAS/F,EAAEyC,QAASmF,EAAS0S,GAASjY,KAAMI,GAASA,EAASqC,EAAGA,IACpF8C,EAAO9C,GAAKsW,EAAUD,EAAMnb,EAAE8E,GAAIA,GAAK9E,EAAE8E,GAE3C,OAAO8C,GAGL0T,GAAM,WAIR,IAHA,IAAI1U,EAAQ,EACRnE,EAASK,UAAUL,OACnBmF,EAAS0S,GAASjY,KAAMI,GACrBA,EAASmE,GAAOgB,EAAOhB,GAAS9D,UAAU8D,KACjD,OAAOgB,GAIL2T,KAAkB9C,IAAcxM,EAAM,WAAc8N,GAAoBla,KAAK,IAAI4Y,GAAW,MAE5F+C,GAAkB,WACpB,OAAOzB,GAAoBlX,MAAM0Y,GAAgB1B,GAAWha,KAAK+a,GAASvY,OAASuY,GAASvY,MAAOS,YAGjG2Q,IACFuB,WAAY,SAAoBlR,EAAQ6H,GACtC,OAAOwM,GAAgBtY,KAAK+a,GAASvY,MAAOyB,EAAQ6H,EAAO7I,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAEnGia,MAAO,SAAetJ,GACpB,OAAO0G,GAAW+B,GAASvY,MAAO8P,EAAYrP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAEtFka,KAAM,SAAcpb,GAClB,OAAOwM,GAAUjK,MAAM+X,GAASvY,MAAOS,YAEzC6Y,OAAQ,SAAgBxJ,GACtB,OAAO0I,GAAgBxY,KAAMsW,GAAYiC,GAASvY,MAAO8P,EACvDrP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,KAE1Coa,KAAM,SAAcC,GAClB,OAAO/C,GAAU8B,GAASvY,MAAOwZ,EAAW/Y,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAEpFsa,UAAW,SAAmBD,GAC5B,OAAO9C,GAAe6B,GAASvY,MAAOwZ,EAAW/Y,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAEzFua,QAAS,SAAiB5J,GACxBuG,GAAakC,GAASvY,MAAO8P,EAAYrP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAEjFwa,QAAS,SAAiBC,GACxB,OAAOzU,GAAaoT,GAASvY,MAAO4Z,EAAenZ,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAE3F0a,SAAU,SAAkBD,GAC1B,OAAOjD,GAAc4B,GAASvY,MAAO4Z,EAAenZ,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAE5FU,KAAM,SAAcia,GAClB,OAAOzC,GAAU7W,MAAM+X,GAASvY,MAAOS,YAEzCuW,YAAa,SAAqB4C,GAChC,OAAO7C,GAAiBvW,MAAM+X,GAASvY,MAAOS,YAEhDsZ,IAAK,SAAajB,GAChB,OAAOd,GAAKO,GAASvY,MAAO8Y,EAAOrY,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAE3E+X,OAAQ,SAAgBpH,GACtB,OAAOmH,GAAYzW,MAAM+X,GAASvY,MAAOS,YAE3C2W,YAAa,SAAqBtH,GAChC,OAAOqH,GAAiB3W,MAAM+X,GAASvY,MAAOS,YAEhD+I,QAAS,WAMP,IALA,IAIIvL,EAHAmC,EAASmY,GADFvY,MACiBI,OACxB4Z,EAASze,KAAK2H,MAAM9C,EAAS,GAC7BmE,EAAQ,EAELA,EAAQyV,GACb/b,EANS+B,KAMIuE,GANJvE,KAOJuE,KAPIvE,OAOcI,GAPdJ,KAQJI,GAAUnC,EACf,OATS+B,MAWbia,KAAM,SAAcnK,GAClB,OAAOyG,GAAUgC,GAASvY,MAAO8P,EAAYrP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAErFoY,KAAM,SAAc2C,GAClB,OAAO5C,GAAU9Z,KAAK+a,GAASvY,MAAOka,IAExCC,SAAU,SAAkBC,EAAOnU,GACjC,IAAItI,EAAI4a,GAASvY,MACbI,EAASzC,EAAEyC,OACXia,EAASvV,EAAgBsV,EAAOha,GACpC,OAAO,IAAKiM,EAAmB1O,EAAGA,EAAEka,KAA7B,CACLla,EAAEkK,OACFlK,EAAE2M,WAAa+P,EAAS1c,EAAE2c,kBAC1B5W,QAAkBvE,IAAR8G,EAAoB7F,EAAS0E,EAAgBmB,EAAK7F,IAAWia,MAKzEpO,GAAS,SAAe3C,EAAOrD,GACjC,OAAOuS,GAAgBxY,KAAMwX,GAAWha,KAAK+a,GAASvY,MAAOsJ,EAAOrD,KAGlEsU,GAAO,SAAaC,GACtBjC,GAASvY,MACT,IAAI2K,EAAS0N,GAAS5X,UAAU,GAAI,GAChCL,EAASJ,KAAKI,OACdyC,EAAMkD,EAASyU,GACftO,EAAMxI,EAASb,EAAIzC,QACnBmE,EAAQ,EACZ,GAAI2H,EAAMvB,EAASvK,EAAQ,MAAMuD,GAvKhB,iBAwKjB,KAAOY,EAAQ2H,GAAKlM,KAAK2K,EAASpG,GAAS1B,EAAI0B,MAG7CkW,IACF9I,QAAS,WACP,OAAOmF,GAAatZ,KAAK+a,GAASvY,QAEpC+J,KAAM,WACJ,OAAO8M,GAAUrZ,KAAK+a,GAASvY,QAEjC4R,OAAQ,WACN,OAAOgF,GAAYpZ,KAAK+a,GAASvY,SAIjC0a,GAAY,SAAUjZ,EAAQhD,GAChC,OAAOxC,EAASwF,IACXA,EAAOsW,KACO,iBAAPtZ,GACPA,KAAOgD,GACP3B,QAAQrB,IAAQqB,OAAOrB,IAE1Bkc,GAAW,SAAkClZ,EAAQhD,GACvD,OAAOic,GAAUjZ,EAAQhD,EAAMV,EAAYU,GAAK,IAC5CiV,EAAa,EAAGjS,EAAOhD,IACvBuU,GAAKvR,EAAQhD,IAEfmc,GAAW,SAAwBnZ,EAAQhD,EAAKoc,GAClD,QAAIH,GAAUjZ,EAAQhD,EAAMV,EAAYU,GAAK,KACxCxC,EAAS4e,IACTlb,EAAIkb,EAAM,WACTlb,EAAIkb,EAAM,QACVlb,EAAIkb,EAAM,QAEVA,EAAKxc,cACJsB,EAAIkb,EAAM,cAAeA,EAAKvc,UAC9BqB,EAAIkb,EAAM,gBAAiBA,EAAKzc,WAI9BV,GAAG+D,EAAQhD,EAAKoc,IAFvBpZ,EAAOhD,GAAOoc,EAAK5c,MACZwD,IAINqW,KACH5B,GAAMxX,EAAIic,GACV3E,GAAItX,EAAIkc,IAGVla,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAK4W,GAAkB,UACjD7E,yBAA0B0H,GAC1Ble,eAAgBme,KAGdhR,EAAM,WAAc6N,GAAcja,aACpCia,GAAgBC,GAAsB,WACpC,OAAOL,GAAU7Z,KAAKwC,QAI1B,IAAI8a,GAAwBzQ,KAAgB+G,IAC5C/G,EAAYyQ,GAAuBL,IACnC7a,EAAKkb,GAAuBhO,GAAU2N,GAAW7I,QACjDvH,EAAYyQ,IACVjX,MAAOoI,GACPxC,IAAK8Q,GACLtQ,YAAa,aACb1M,SAAUka,GACVE,eAAgBwB,KAElBrQ,GAAUgS,GAAuB,SAAU,KAC3ChS,GAAUgS,GAAuB,aAAc,KAC/ChS,GAAUgS,GAAuB,aAAc,KAC/ChS,GAAUgS,GAAuB,SAAU,KAC3Cpd,GAAGod,GAAuBxU,IACxB5J,IAAK,WAAc,OAAOsD,KAAK+X,OAIjC3c,EAAAC,QAAiB,SAAUyQ,EAAKwM,EAAOyC,EAASC,GAE9C,IAAI1K,EAAOxE,IADXkP,IAAYA,GACgB,UAAY,IAAM,QAC1CC,EAAS,MAAQnP,EACjBoP,EAAS,MAAQpP,EACjBqP,EAAahgB,EAAOmV,GACpBM,EAAOuK,MACPC,EAAMD,GAAcxM,EAAewM,GACnCpK,GAAUoK,IAAexR,EAAOtH,IAChC1E,KACA0d,EAAsBF,GAAcA,EAAoB,UAUxDG,EAAa,SAAUnb,EAAMoE,GAC/B7G,GAAGyC,EAAMoE,GACP7H,IAAK,WACH,OAZO,SAAUyD,EAAMoE,GAC3B,IAAIgX,EAAOpb,EAAKwY,GAChB,OAAO4C,EAAKC,EAAEP,GAAQ1W,EAAQ+T,EAAQiD,EAAKE,EAAGvD,IAUnCwD,CAAO1b,KAAMuE,IAEtBkF,IAAK,SAAUxL,GACb,OAXO,SAAUkC,EAAMoE,EAAOtG,GAClC,IAAIsd,EAAOpb,EAAKwY,GACZqC,IAAS/c,GAASA,EAAQ1C,KAAKogB,MAAM1d,IAAU,EAAI,EAAIA,EAAQ,IAAO,IAAe,IAARA,GACjFsd,EAAKC,EAAEN,GAAQ3W,EAAQ+T,EAAQiD,EAAKE,EAAGxd,EAAOia,IAQnC0D,CAAO5b,KAAMuE,EAAOtG,IAE7BG,YAAY,KAGZ2S,GACFoK,EAAaJ,EAAQ,SAAU5a,EAAMob,EAAMM,EAASC,GAClDhS,EAAW3J,EAAMgb,EAAY7K,EAAM,MACnC,IAEIzI,EAAQ2C,EAAYpK,EAAQ2b,EAF5BxX,EAAQ,EACRoG,EAAS,EAEb,GAAK1O,EAASsf,GAIP,CAAA,KAAIA,aAAgB1U,IAhUd,gBAgU+BkV,EAAQjN,EAAQyM,KA/T9C,qBA+TwEQ,GAa/E,OAAIhE,MAAewD,EACjB7C,GAASyC,EAAYI,GAErB3C,GAAMpb,KAAK2d,EAAYI,GAf9B1T,EAAS0T,EACT5Q,EAAS0N,GAASwD,EAASvD,GAC3B,IAAI0D,EAAOT,EAAK/Q,WAChB,QAAgBrL,IAAZ2c,EAAuB,CACzB,GAAIE,EAAO1D,EAAO,MAAM3U,GApSf,iBAsST,IADA6G,EAAawR,EAAOrR,GACH,EAAG,MAAMhH,GAtSjB,sBAyST,IADA6G,EAAa9G,EAASoY,GAAWxD,GAChB3N,EAASqR,EAAM,MAAMrY,GAzS7B,iBA2SXvD,EAASoK,EAAa8N,OAftBlY,EAASgJ,EAAQmS,GAEjB1T,EAAS,IAAIhB,GADb2D,EAAapK,EAASkY,GA2BxB,IAPA1Y,EAAKO,EAAM,MACTG,EAAGuH,EACH4T,EAAG9Q,EACHsR,EAAGzR,EACHnO,EAAG+D,EACHob,EAAG,IAAI1U,GAAUe,KAEZtD,EAAQnE,GAAQkb,EAAWnb,EAAMoE,OAE1C8W,EAAsBF,EAAoB,UAAI5M,EAAOuM,IACrDlb,EAAKyb,EAAqB,cAAeF,IAC/BvR,EAAM,WAChBuR,EAAW,MACNvR,EAAM,WACX,IAAIuR,GAAY,MACX1F,EAAY,SAAUhD,GAC3B,IAAI0I,EACJ,IAAIA,EAAW,MACf,IAAIA,EAAW,KACf,IAAIA,EAAW1I,KACd,KACD0I,EAAaJ,EAAQ,SAAU5a,EAAMob,EAAMM,EAASC,GAElD,IAAIC,EAGJ,OAJAjS,EAAW3J,EAAMgb,EAAY7K,GAIxBrU,EAASsf,GACVA,aAAgB1U,IA7WP,gBA6WwBkV,EAAQjN,EAAQyM,KA5WvC,qBA4WiEQ,OAC1D5c,IAAZ2c,EACH,IAAIlL,EAAK2K,EAAMlD,GAASwD,EAASvD,GAAQwD,QAC7B3c,IAAZ0c,EACE,IAAIjL,EAAK2K,EAAMlD,GAASwD,EAASvD,IACjC,IAAI1H,EAAK2K,GAEbxD,MAAewD,EAAa7C,GAASyC,EAAYI,GAC9C3C,GAAMpb,KAAK2d,EAAYI,GATF,IAAI3K,EAAKxH,EAAQmS,MAW/ClF,GAAa+E,IAAQ3f,SAASsE,UAAY2G,EAAKkK,GAAM1R,OAAOwH,EAAK0U,IAAQ1U,EAAKkK,GAAO,SAAUnS,GACvFA,KAAO0c,GAAavb,EAAKub,EAAY1c,EAAKmS,EAAKnS,MAEvD0c,EAAoB,UAAIE,EACxBA,EAAkCpR,YAAckR,GAElD,IAAIe,EAAkBb,EAAoBvO,IACtCqP,IAAsBD,IACI,UAAxBA,EAAgBtb,MAA4CzB,MAAxB+c,EAAgBtb,MACtDwb,EAAY3B,GAAW7I,OAC3BhS,EAAKub,EAAYvD,IAAmB,GACpChY,EAAKyb,EAAqBtD,GAAazH,GACvC1Q,EAAKyb,EAAqBjZ,IAAM,GAChCxC,EAAKyb,EAAqBxD,GAAiBsD,IAEvCH,EAAU,IAAIG,EAAW,GAAG7U,KAAQgK,EAAShK,MAAO+U,IACtD3d,GAAG2d,EAAqB/U,IACtB5J,IAAK,WAAc,OAAO4T,KAI9B3S,EAAE2S,GAAQ6K,EAEVza,EAAQA,EAAQU,EAAIV,EAAQoB,EAAIpB,EAAQQ,GAAKia,GAAcvK,GAAOjT,GAElE+C,EAAQA,EAAQtD,EAAGkT,GACjBgK,kBAAmBhC,IAGrB5X,EAAQA,EAAQtD,EAAIsD,EAAQQ,EAAI0I,EAAM,WAAcgH,EAAKyL,GAAG7e,KAAK2d,EAAY,KAAQ7K,GACnFuC,KAAM+F,GACNyD,GAAIpD,KApZgB,sBAuZKoC,GAAsBzb,EAAKyb,EAvZhC,oBAuZwE/C,GAE9F5X,EAAQA,EAAQ9C,EAAG0S,EAAMc,IAEzBuE,EAAWrF,GAEX5P,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAIkX,GAAY9H,GAAQ7G,IAAK8Q,KAEzD7Z,EAAQA,EAAQ9C,EAAI8C,EAAQQ,GAAKib,EAAmB7L,EAAMmK,IAEtDY,EAAgC9d,UAAYka,KAAe4D,EAAoB9d,SAAWka,IAE9F/W,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAI0I,EAAM,WACpC,IAAIuR,EAAW,GAAGtX,UAChByM,GAAQzM,MAAOoI,KAEnBvL,EAAQA,EAAQ9C,EAAI8C,EAAQQ,GAAK0I,EAAM,WACrC,OAAQ,EAAG,GAAG+N,kBAAoB,IAAIwD,GAAY,EAAG,IAAIxD,qBACpD/N,EAAM,WACXyR,EAAoB1D,eAAena,MAAM,EAAG,OACzC8S,GAAQqH,eAAgBwB,KAE7BlM,EAAUqD,GAAQ6L,EAAoBD,EAAkBE,EACvCD,GAAmBvc,EAAKyb,EAAqBvO,GAAUsP,SAErEhhB,EAAAC,QAAiB,eC/dxBkB,GAA0B,OAAQ,EAAG,SAAU+f,GAC7C,OAAO,SAAmBf,EAAMjR,EAAYlK,GAC1C,OAAOkc,EAAKtc,KAAMub,EAAMjR,EAAYlK,MCFxC7D,GAA0B,QAAS,EAAG,SAAU+f,GAC9C,OAAO,SAAoBf,EAAMjR,EAAYlK,GAC3C,OAAOkc,EAAKtc,KAAMub,EAAMjR,EAAYlK,MCFxC7D,GAA0B,QAAS,EAAG,SAAU+f,GAC9C,OAAO,SAA2Bf,EAAMjR,EAAYlK,GAClD,OAAOkc,EAAKtc,KAAMub,EAAMjR,EAAYlK,MAErC,GCJH7D,GAA0B,QAAS,EAAG,SAAU+f,GAC9C,OAAO,SAAoBf,EAAMjR,EAAYlK,GAC3C,OAAOkc,EAAKtc,KAAMub,EAAMjR,EAAYlK,MCFxC7D,GAA0B,SAAU,EAAG,SAAU+f,GAC/C,OAAO,SAAqBf,EAAMjR,EAAYlK,GAC5C,OAAOkc,EAAKtc,KAAMub,EAAMjR,EAAYlK,MCFxC7D,GAA0B,QAAS,EAAG,SAAU+f,GAC9C,OAAO,SAAoBf,EAAMjR,EAAYlK,GAC3C,OAAOkc,EAAKtc,KAAMub,EAAMjR,EAAYlK,MCFxC7D,GAA0B,SAAU,EAAG,SAAU+f,GAC/C,OAAO,SAAqBf,EAAMjR,EAAYlK,GAC5C,OAAOkc,EAAKtc,KAAMub,EAAMjR,EAAYlK,MCFxC7D,GAA0B,UAAW,EAAG,SAAU+f,GAChD,OAAO,SAAsBf,EAAMjR,EAAYlK,GAC7C,OAAOkc,EAAKtc,KAAMub,EAAMjR,EAAYlK,MCFxC7D,GAA0B,UAAW,EAAG,SAAU+f,GAChD,OAAO,SAAsBf,EAAMjR,EAAYlK,GAC7C,OAAOkc,EAAKtc,KAAMub,EAAMjR,EAAYlK,MCAxC,IAAAmc,GAAiB,SAAU1D,EAAUxb,EAAIY,EAAO0T,GAC9C,IACE,OAAOA,EAAUtU,EAAGS,EAASG,GAAO,GAAIA,EAAM,IAAMZ,EAAGY,GAEvD,MAAO5B,GACP,IAAImgB,EAAM3D,EAAiB,OAE3B,WADY1Z,IAARqd,GAAmB1e,EAAS0e,EAAIhf,KAAKqb,IACnCxc,qBCHV,IAAIogB,KACAC,KACArhB,EAAUD,EAAAC,QAAiB,SAAUshB,EAAUhL,EAAStU,EAAI8C,EAAM2M,GACpE,IAGI1M,EAAQ8R,EAAM2G,EAAUtT,EAHxByT,EAASlM,EAAW,WAAc,OAAO6P,GAAc/H,GAAU+H,GACjEje,EAAIiD,EAAItE,EAAI8C,EAAMwR,EAAU,EAAI,GAChCpN,EAAQ,EAEZ,GAAqB,mBAAVyU,EAAsB,MAAM9c,UAAUygB,EAAW,qBAE5D,GAAIpI,GAAYyE,IAAS,IAAK5Y,EAASsD,EAASiZ,EAASvc,QAASA,EAASmE,EAAOA,IAEhF,IADAgB,EAASoM,EAAUjT,EAAEZ,EAASoU,EAAOyK,EAASpY,IAAQ,GAAI2N,EAAK,IAAMxT,EAAEie,EAASpY,OACjEkY,GAASlX,IAAWmX,EAAQ,OAAOnX,OAC7C,IAAKsT,EAAWG,EAAOxb,KAAKmf,KAAazK,EAAO2G,EAAStI,QAAQJ,MAEtE,IADA5K,EAAS/H,GAAKqb,EAAUna,EAAGwT,EAAKjU,MAAO0T,MACxB8K,GAASlX,IAAWmX,EAAQ,OAAOnX,GAGtDlK,EAAQohB,MAAQA,EAChBphB,EAAQqhB,OAASA,qBCxBjB,IAAIE,EAAOrgB,EAAkB,QAGzBsgB,EAAU5f,EAAwByB,EAClCI,EAAK,EACLge,EAAetgB,OAAOsgB,cAAgB,WACxC,OAAO,GAELC,GAAU7f,EAAoB,WAChC,OAAO4f,EAAatgB,OAAOwgB,yBAEzBC,EAAU,SAAUlhB,GACtB8gB,EAAQ9gB,EAAI6gB,GAAQ3e,OAClBwE,EAAG,OAAQ3D,EACXoe,SAgCAC,EAAO/hB,EAAAC,SACTyQ,IAAK8Q,EACLQ,MAAM,EACNC,QAhCY,SAAUthB,EAAIwS,GAE1B,IAAKtS,EAASF,GAAK,MAAoB,iBAANA,EAAiBA,GAAmB,iBAANA,EAAiB,IAAM,KAAOA,EAC7F,IAAK4D,EAAI5D,EAAI6gB,GAAO,CAElB,IAAKE,EAAa/gB,GAAK,MAAO,IAE9B,IAAKwS,EAAQ,MAAO,IAEpB0O,EAAQlhB,GAER,OAAOA,EAAG6gB,GAAMna,GAsBlB6a,QApBY,SAAUvhB,EAAIwS,GAC1B,IAAK5O,EAAI5D,EAAI6gB,GAAO,CAElB,IAAKE,EAAa/gB,GAAK,OAAO,EAE9B,IAAKwS,EAAQ,OAAO,EAEpB0O,EAAQlhB,GAER,OAAOA,EAAG6gB,GAAMM,GAYlBK,SATa,SAAUxhB,GAEvB,OADIghB,GAAUI,EAAKC,MAAQN,EAAa/gB,KAAQ4D,EAAI5D,EAAI6gB,IAAOK,EAAQlhB,GAChEA,MC3CTyhB,qDAAiB,SAAUzhB,EAAIsT,GAC7B,IAAKpT,EAASF,IAAOA,EAAGgW,KAAO1C,EAAM,MAAMnT,UAAU,0BAA4BmT,EAAO,cACxF,OAAOtT,ICFL2B,GAAKnB,EAAwBmC,EAU7B2e,GAAUpgB,GAAmBogB,QAE7BI,GAAOnW,EAAc,KAAO,OAE5BoW,GAAW,SAAUvd,EAAM1B,GAE7B,IACIkf,EADApZ,EAAQ8Y,GAAQ5e,GAEpB,GAAc,MAAV8F,EAAe,OAAOpE,EAAK6R,GAAGzN,GAElC,IAAKoZ,EAAQxd,EAAKyd,GAAID,EAAOA,EAAQA,EAAME,EACzC,GAAIF,EAAMG,GAAKrf,EAAK,OAAOkf,GAI/BI,IACEC,eAAgB,SAAUjD,EAASzK,EAAMf,EAAQ0O,GAC/C,IAAIlV,EAAIgS,EAAQ,SAAU5a,EAAMwc,GAC9B7S,EAAW3J,EAAM4I,EAAGuH,EAAM,MAC1BnQ,EAAK4R,GAAKzB,EACVnQ,EAAK6R,GAAKzD,GAAO,MACjBpO,EAAKyd,QAAKze,EACVgB,EAAK+d,QAAK/e,EACVgB,EAAKsd,IAAQ,EACGte,MAAZwd,GAAuBwB,GAAMxB,EAAUpN,EAAQpP,EAAK8d,GAAQ9d,KAsDlE,OApDAkK,EAAYtB,EAAEhJ,WAGZqe,MAAO,WACL,IAAK,IAAIje,EAAOoY,GAASvY,KAAMsQ,GAAOiL,EAAOpb,EAAK6R,GAAI2L,EAAQxd,EAAKyd,GAAID,EAAOA,EAAQA,EAAME,EAC1FF,EAAMU,GAAI,EACNV,EAAMW,IAAGX,EAAMW,EAAIX,EAAMW,EAAET,OAAI1e,UAC5Boc,EAAKoC,EAAMlb,GAEpBtC,EAAKyd,GAAKzd,EAAK+d,QAAK/e,EACpBgB,EAAKsd,IAAQ,GAIfc,OAAU,SAAU9f,GAClB,IAAI0B,EAAOoY,GAASvY,KAAMsQ,GACtBqN,EAAQD,GAASvd,EAAM1B,GAC3B,GAAIkf,EAAO,CACT,IAAIpN,EAAOoN,EAAME,EACbW,EAAOb,EAAMW,SACVne,EAAK6R,GAAG2L,EAAMlb,GACrBkb,EAAMU,GAAI,EACNG,IAAMA,EAAKX,EAAItN,GACfA,IAAMA,EAAK+N,EAAIE,GACfre,EAAKyd,IAAMD,IAAOxd,EAAKyd,GAAKrN,GAC5BpQ,EAAK+d,IAAMP,IAAOxd,EAAK+d,GAAKM,GAChCre,EAAKsd,MACL,QAASE,GAIbjE,QAAS,SAAiB5J,GACxByI,GAASvY,KAAMsQ,GAGf,IAFA,IACIqN,EADAjf,EAAIiD,EAAImO,EAAYrP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,EAAW,GAElEwe,EAAQA,EAAQA,EAAME,EAAI7d,KAAK4d,IAGpC,IAFAlf,EAAEif,EAAMnC,EAAGmC,EAAMG,EAAG9d,MAEb2d,GAASA,EAAMU,GAAGV,EAAQA,EAAMW,GAK3C3e,IAAK,SAAalB,GAChB,QAASif,GAASnF,GAASvY,KAAMsQ,GAAO7R,MAGxC6I,GAAa5J,GAAGqL,EAAEhJ,UAAW,QAC/BrD,IAAK,WACH,OAAO6b,GAASvY,KAAMsQ,GAAMmN,OAGzB1U,GAET1C,IAAK,SAAUlG,EAAM1B,EAAKR,GACxB,IACIugB,EAAMja,EADNoZ,EAAQD,GAASvd,EAAM1B,GAoBzB,OAjBEkf,EACFA,EAAMnC,EAAIvd,GAGVkC,EAAK+d,GAAKP,GACRlb,EAAG8B,EAAQ8Y,GAAQ5e,GAAK,GACxBqf,EAAGrf,EACH+c,EAAGvd,EACHqgB,EAAGE,EAAOre,EAAK+d,GACfL,OAAG1e,EACHkf,GAAG,GAEAle,EAAKyd,KAAIzd,EAAKyd,GAAKD,GACpBa,IAAMA,EAAKX,EAAIF,GACnBxd,EAAKsd,MAES,MAAVlZ,IAAepE,EAAK6R,GAAGzN,GAASoZ,IAC7Bxd,GAEXud,SAAUA,GACVe,UAAW,SAAU1V,EAAGuH,EAAMf,GAG5BmP,GAAY3V,EAAGuH,EAAM,SAAUwB,EAAUX,GACvCnR,KAAK+R,GAAKwG,GAASzG,EAAUxB,GAC7BtQ,KAAKiS,GAAKd,EACVnR,KAAKke,QAAK/e,GACT,WAKD,IAJA,IACIgS,EADOnR,KACKiS,GACZ0L,EAFO3d,KAEMke,GAEVP,GAASA,EAAMU,GAAGV,EAAQA,EAAMW,EAEvC,OANWte,KAMD+R,KANC/R,KAMYke,GAAKP,EAAQA,EAAQA,EAAME,EANvC7d,KAMgD+R,GAAG6L,IAMnC1L,GAAK,EAApB,QAARf,EAA+BwM,EAAMG,EAC7B,UAAR3M,EAAiCwM,EAAMnC,GAC3BmC,EAAMG,EAAGH,EAAMnC,KAdpBxb,KAQJ+R,QAAK5S,EACH+S,GAAK,KAMb3C,EAAS,UAAY,UAAWA,GAAQ,GAG3CoG,GAAWrF,KCzIXqO,GAAQ,SAAUhhB,EAAGyT,GAEvB,GADAtT,EAASH,IACJ1B,EAASmV,IAAoB,OAAVA,EAAgB,MAAMlV,UAAUkV,EAAQ,8BAElEwN,IACEnV,IAAKjN,OAAOqiB,iBAAmB,gBAC7B,SAAUC,EAAMC,EAAOtV,GACrB,KACEA,EAAMlN,EAAkBd,SAAS+B,KAAMP,GAA0ByB,EAAElC,OAAOuD,UAAW,aAAa0J,IAAK,IACnGqV,MACJC,IAAUD,aAAgBhX,OAC1B,MAAOzL,GAAK0iB,GAAQ,EACtB,OAAO,SAAwBphB,EAAGyT,GAIhC,OAHAuN,GAAMhhB,EAAGyT,GACL2N,EAAOphB,EAAEqhB,UAAY5N,EACpB3H,EAAI9L,EAAGyT,GACLzT,GAVX,KAYM,QAASwB,GACjBwf,MAAOA,ICtBLE,GAAiBtiB,GAAwBkN,ICa7CwV,GAAiB,SAAU3O,EAAMyK,EAAS9J,EAASiO,EAAQ3P,EAAQ4P,GACjE,IAAIvO,EAAOzV,EAAOmV,GACdvH,EAAI6H,EACJqN,EAAQ1O,EAAS,MAAQ,MACzB6B,EAAQrI,GAAKA,EAAEhJ,UACfpC,KACAyhB,EAAY,SAAUtT,GACxB,IAAIzO,EAAK+T,EAAMtF,GACflK,EAASwP,EAAOtF,EACP,UAAPA,EAAkB,SAAUnP,GAC1B,QAAOwiB,IAAYljB,EAASU,KAAaU,EAAGG,KAAKwC,KAAY,IAANrD,EAAU,EAAIA,IAC5D,OAAPmP,EAAe,SAAanP,GAC9B,QAAOwiB,IAAYljB,EAASU,KAAaU,EAAGG,KAAKwC,KAAY,IAANrD,EAAU,EAAIA,IAC5D,OAAPmP,EAAe,SAAanP,GAC9B,OAAOwiB,IAAYljB,EAASU,QAAKwC,EAAY9B,EAAGG,KAAKwC,KAAY,IAANrD,EAAU,EAAIA,IAChE,OAAPmP,EAAe,SAAanP,GAAqC,OAAhCU,EAAGG,KAAKwC,KAAY,IAANrD,EAAU,EAAIA,GAAWqD,MACxE,SAAarD,EAAG2D,GAAwC,OAAnCjD,EAAGG,KAAKwC,KAAY,IAANrD,EAAU,EAAIA,EAAG2D,GAAWN,QAGvE,GAAgB,mBAAL+I,IAAqBoW,GAAW/N,EAAMsI,UAAY9P,EAAM,YACjE,IAAIb,GAAI4I,UAAUpB,UAMb,CACL,IAAI8O,EAAW,IAAItW,EAEfuW,EAAiBD,EAASpB,GAAOkB,MAAgB,EAAG,IAAME,EAE1DE,EAAuB3V,EAAM,WAAcyV,EAAS1f,IAAI,KAExD6f,EAAmB/J,GAAY,SAAUhD,GAAQ,IAAI1J,EAAE0J,KAEvDgN,GAAcN,GAAWvV,EAAM,WAIjC,IAFA,IAAI8V,EAAY,IAAI3W,EAChBxE,EAAQ,EACLA,KAASmb,EAAUzB,GAAO1Z,EAAOA,GACxC,OAAQmb,EAAU/f,KAAK,KAEpB6f,KACHzW,EAAIgS,EAAQ,SAAUtZ,EAAQkb,GAC5B7S,EAAWrI,EAAQsH,EAAGuH,GACtB,IAAInQ,EDzDK,SAAUA,EAAMsB,EAAQsH,GACvC,IACInL,EADAR,EAAIqE,EAAOwI,YAIb,OAFE7M,IAAM2L,GAAiB,mBAAL3L,IAAoBQ,EAAIR,EAAE2C,aAAegJ,EAAEhJ,WAAa9D,EAAS2B,IAAMihB,IAC3FA,GAAe1e,EAAMvC,GACduC,ECoDQwf,CAAkB,IAAI/O,EAAQnP,EAAQsH,GAEjD,OADgB5J,MAAZwd,GAAuBwB,GAAMxB,EAAUpN,EAAQpP,EAAK8d,GAAQ9d,GACzDA,KAEPJ,UAAYqR,EACdA,EAAMnH,YAAclB,IAElBwW,GAAwBE,KAC1BL,EAAU,UACVA,EAAU,OACV7P,GAAU6P,EAAU,SAElBK,GAAcH,IAAgBF,EAAUnB,GAExCkB,GAAW/N,EAAMgN,cAAchN,EAAMgN,WApCzCrV,EAAImW,EAAOlB,eAAejD,EAASzK,EAAMf,EAAQ0O,GACjD5T,EAAYtB,EAAEhJ,UAAWkR,GACzBkM,GAAKC,MAAO,EA4Cd,OAPA3R,GAAe1C,EAAGuH,GAElB3S,EAAE2S,GAAQvH,EACVrI,EAAQA,EAAQU,EAAIV,EAAQoB,EAAIpB,EAAQQ,GAAK6H,GAAK6H,GAAOjT,GAEpDwhB,GAASD,EAAOT,UAAU1V,EAAGuH,EAAMf,GAEjCxG,OC7EQxM,GAHP,MAGqC,SAAUG,GACvD,OAAO,WAAiB,OAAOA,EAAIsD,KAAMS,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MAG/EzC,IAAK,SAAa+B,GAChB,IAAIkf,EAAQiC,GAAOlC,SAASnF,GAASvY,KAR/B,OAQ2CvB,GACjD,OAAOkf,GAASA,EAAMnC,GAGxB/R,IAAK,SAAahL,EAAKR,GACrB,OAAO2hB,GAAOvZ,IAAIkS,GAASvY,KAbrB,OAayC,IAARvB,EAAY,EAAIA,EAAKR,KAE7D2hB,IAAQ,GCZMrjB,GAHP,MAGqC,SAAUG,GACvD,OAAO,WAAiB,OAAOA,EAAIsD,KAAMS,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MAG/E0gB,IAAK,SAAa5hB,GAChB,OAAO2hB,GAAOvZ,IAAIkS,GAASvY,KARrB,OAQiC/B,EAAkB,IAAVA,EAAc,EAAIA,EAAOA,KAEzE2hB,OCbSpjB,OAAOsjB,wBCOfC,GAAUvjB,OAAOwjB,OAGrBC,IAAkBF,IAAWxjB,EAAoB,WAC/C,IAAI2jB,KACA1e,KAEApE,EAAI+I,SACJga,EAAI,uBAGR,OAFAD,EAAE9iB,GAAK,EACP+iB,EAAE5gB,MAAM,IAAIma,QAAQ,SAAUoE,GAAKtc,EAAEsc,GAAKA,IACd,GAArBiC,MAAYG,GAAG9iB,IAAWZ,OAAOuN,KAAKgW,MAAYve,IAAI3B,KAAK,KAAOsgB,IACtE,SAAgB1e,EAAQZ,GAM3B,IALA,IAAI6L,EAAI3G,GAAStE,GACbuE,EAAOvF,UAAUL,OACjBmE,EAAQ,EACR6b,EAAaC,GAAK3hB,EAClB4hB,EAASpN,GAAIxU,EACVsH,EAAOzB,GAMZ,IALA,IAII9F,EAJArB,EAAI+G,EAAQ1D,UAAU8D,MACtBwF,EAAOqW,EAAa7S,GAAQnQ,GAAG8B,OAAOkhB,EAAWhjB,IAAMmQ,GAAQnQ,GAC/DgD,EAAS2J,EAAK3J,OACd4J,EAAI,EAED5J,EAAS4J,GAAOsW,EAAO9iB,KAAKJ,EAAGqB,EAAMsL,EAAKC,QAAO0C,EAAEjO,GAAOrB,EAAEqB,IACnE,OAAOiO,GACPqT,GC/BAzC,GAAU/gB,GAAmB+gB,QAQ7B7G,GAAYxB,GAAkB,GAC9ByB,GAAiBzB,GAAkB,GACnCnW,GAAK,EAGLyhB,GAAsB,SAAUpgB,GAClC,OAAOA,EAAK+d,KAAO/d,EAAK+d,GAAK,IAAIsC,KAE/BA,GAAsB,WACxBxgB,KAAKrD,MAEH8jB,GAAqB,SAAU1b,EAAOtG,GACxC,OAAOgY,GAAU1R,EAAMpI,EAAG,SAAUZ,GAClC,OAAOA,EAAG,KAAO0C,KAGrB+hB,GAAoBzgB,WAClBrD,IAAK,SAAU+B,GACb,IAAIkf,EAAQ8C,GAAmBzgB,KAAMvB,GACrC,GAAIkf,EAAO,OAAOA,EAAM,IAE1Bhe,IAAK,SAAUlB,GACb,QAASgiB,GAAmBzgB,KAAMvB,IAEpCgL,IAAK,SAAUhL,EAAKR,GAClB,IAAI0f,EAAQ8C,GAAmBzgB,KAAMvB,GACjCkf,EAAOA,EAAM,GAAK1f,EACjB+B,KAAKrD,EAAE6I,MAAM/G,EAAKR,KAEzBsgB,OAAU,SAAU9f,GAClB,IAAI8F,EAAQmS,GAAe1W,KAAKrD,EAAG,SAAUZ,GAC3C,OAAOA,EAAG,KAAO0C,IAGnB,OADK8F,GAAOvE,KAAKrD,EAAE+jB,OAAOnc,EAAO,MACvBA,IAId,IAAAoc,IACE3C,eAAgB,SAAUjD,EAASzK,EAAMf,EAAQ0O,GAC/C,IAAIlV,EAAIgS,EAAQ,SAAU5a,EAAMwc,GAC9B7S,EAAW3J,EAAM4I,EAAGuH,EAAM,MAC1BnQ,EAAK4R,GAAKzB,EACVnQ,EAAK6R,GAAKlT,KACVqB,EAAK+d,QAAK/e,EACMA,MAAZwd,GAAuBwB,GAAMxB,EAAUpN,EAAQpP,EAAK8d,GAAQ9d,KAoBlE,OAlBAkK,EAAYtB,EAAEhJ,WAGZwe,OAAU,SAAU9f,GAClB,IAAKxC,EAASwC,GAAM,OAAO,EAC3B,IAAI8c,EAAO+B,GAAQ7e,GACnB,OAAa,IAAT8c,EAAsBgF,GAAoBhI,GAASvY,KAAMsQ,IAAe,OAAE7R,GACvE8c,GAAQqF,EAAKrF,EAAMvb,KAAKgS,YAAcuJ,EAAKvb,KAAKgS,KAIzDrS,IAAK,SAAalB,GAChB,IAAKxC,EAASwC,GAAM,OAAO,EAC3B,IAAI8c,EAAO+B,GAAQ7e,GACnB,OAAa,IAAT8c,EAAsBgF,GAAoBhI,GAASvY,KAAMsQ,IAAO3Q,IAAIlB,GACjE8c,GAAQqF,EAAKrF,EAAMvb,KAAKgS,OAG5BjJ,GAET1C,IAAK,SAAUlG,EAAM1B,EAAKR,GACxB,IAAIsd,EAAO+B,GAAQxf,EAASW,IAAM,GAGlC,OAFa,IAAT8c,EAAegF,GAAoBpgB,GAAMsJ,IAAIhL,EAAKR,GACjDsd,EAAKpb,EAAK6R,IAAM/T,EACdkC,GAET0gB,QAASN,kBClFX,IAaIO,EAbAC,EAAOxkB,GAA4B,GASnC+gB,EAAUH,GAAKG,QACfR,EAAetgB,OAAOsgB,aACtByD,EAAsBS,GAAKH,QAC3BI,KAGAlG,EAAU,SAAUre,GACtB,OAAO,WACL,OAAOA,EAAIsD,KAAMS,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,KAIvD8R,GAEFvU,IAAK,SAAa+B,GAChB,GAAIxC,EAASwC,GAAM,CACjB,IAAI8c,EAAO+B,EAAQ7e,GACnB,OAAa,IAAT8c,EAAsBgF,EAAoBhI,GAASvY,KAlB9C,YAkB+DtD,IAAI+B,GACrE8c,EAAOA,EAAKvb,KAAKgS,SAAM7S,IAIlCsK,IAAK,SAAahL,EAAKR,GACrB,OAAO+iB,GAAK3a,IAAIkS,GAASvY,KAxBd,WAwB+BvB,EAAKR,KAK/CijB,EAAW9lB,EAAAC,QAAiB4B,GA7BjB,UA6BoD8d,EAAS9J,EAAS+P,IAAM,GAAM,GAG7FpX,EAAM,WAAc,OAAyE,IAAlE,IAAIsX,GAAWzX,KAAKjN,OAAO2kB,QAAU3kB,QAAQykB,GAAM,GAAGvkB,IAAIukB,OACvFH,EAAcE,GAAKhD,eAAejD,EAjCrB,WAkCbiF,GAAOc,EAAY/gB,UAAWkR,GAC9BkM,GAAKC,MAAO,EACZ2D,GAAM,SAAU,MAAO,MAAO,OAAQ,SAAUtiB,GAC9C,IAAI2S,EAAQ8P,EAASnhB,UACjBqhB,EAAShQ,EAAM3S,GACnBmD,EAASwP,EAAO3S,EAAK,SAAU9B,EAAG2D,GAEhC,GAAIrE,EAASU,KAAOmgB,EAAangB,GAAI,CAC9BqD,KAAK4d,KAAI5d,KAAK4d,GAAK,IAAIkD,GAC5B,IAAIvb,EAASvF,KAAK4d,GAAGnf,GAAK9B,EAAG2D,GAC7B,MAAc,OAAP7B,EAAeuB,KAAOuF,EAE7B,OAAO6b,EAAO5jB,KAAKwC,KAAMrD,EAAG2D,UCjDpC/D,GAHe,UAGoB,SAAUG,GAC3C,OAAO,WAAqB,OAAOA,EAAIsD,KAAMS,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MAGnF0gB,IAAK,SAAa5hB,GAChB,OAAO+iB,GAAK3a,IAAIkS,GAASvY,KARd,WAQ+B/B,GAAO,KAElD+iB,IAAM,GAAO,GCThB,IAAIK,IAAU9kB,EAAqB+kB,aAAe9gB,MAC9C+gB,GAAS9lB,SAAS+E,MAEtBE,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAKjE,EAAoB,WACnDokB,GAAO,gBACL,WACF7gB,MAAO,SAAeiB,EAAQ+f,EAAcC,GAC1C,IAAI/U,EAAIrM,EAAUoB,GACdigB,EAAI5jB,EAAS2jB,GACjB,OAAOJ,GAASA,GAAO3U,EAAG8U,EAAcE,GAAKH,GAAO/jB,KAAKkP,EAAG8U,EAAcE,MCZ9E,IAAAC,GAAiB,SAAUtkB,EAAIukB,EAAMzhB,GACnC,IAAI0hB,OAAc1iB,IAATgB,EACT,OAAQyhB,EAAKxhB,QACX,KAAK,EAAG,OAAOyhB,EAAKxkB,IACAA,EAAGG,KAAK2C,GAC5B,KAAK,EAAG,OAAO0hB,EAAKxkB,EAAGukB,EAAK,IACRvkB,EAAGG,KAAK2C,EAAMyhB,EAAK,IACvC,KAAK,EAAG,OAAOC,EAAKxkB,EAAGukB,EAAK,GAAIA,EAAK,IACjBvkB,EAAGG,KAAK2C,EAAMyhB,EAAK,GAAIA,EAAK,IAChD,KAAK,EAAG,OAAOC,EAAKxkB,EAAGukB,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC1BvkB,EAAGG,KAAK2C,EAAMyhB,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACzD,KAAK,EAAG,OAAOC,EAAKxkB,EAAGukB,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACnCvkB,EAAGG,KAAK2C,EAAMyhB,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAClE,OAAOvkB,EAAGmD,MAAML,EAAMyhB,ICVtBpK,MAAgB3T,MAChBie,MAUJC,GAAiBtmB,SAASumB,MAAQ,SAAc7hB,GAC9C,IAAI9C,EAAKgD,EAAUL,MACfiiB,EAAWzK,GAAWha,KAAKiD,UAAW,GACtCyhB,EAAQ,WACV,IAAIN,EAAOK,EAAS/iB,OAAOsY,GAAWha,KAAKiD,YAC3C,OAAOT,gBAAgBkiB,EAbX,SAAUhhB,EAAGgL,EAAK0V,GAChC,KAAM1V,KAAO4V,IAAY,CACvB,IAAK,IAAIjE,KAAQpb,EAAI,EAAGA,EAAIyJ,EAAKzJ,IAAKob,EAAEpb,GAAK,KAAOA,EAAI,IAExDqf,GAAU5V,GAAOzQ,SAAS,MAAO,gBAAkBoiB,EAAEhe,KAAK,KAAO,KACjE,OAAOiiB,GAAU5V,GAAKhL,EAAG0gB,GAQMO,CAAU9kB,EAAIukB,EAAKxhB,OAAQwhB,GAAQQ,GAAO/kB,EAAIukB,EAAMzhB,IAGrF,OADIlE,EAASoB,EAAG0C,aAAYmiB,EAAMniB,UAAY1C,EAAG0C,WAC1CmiB,GCfLG,IAAc9lB,EAAqB+kB,aAAea,UAIlDG,GAAiB1Y,EAAM,WACzB,SAAS1I,KACT,QAASmhB,GAAW,gBAAiCnhB,aAAcA,KAEjEqhB,IAAY3Y,EAAM,WACpByY,GAAW,gBAGb3hB,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAKohB,IAAkBC,IAAW,WAC5DJ,UAAW,SAAmBK,EAAQZ,GACpCvhB,EAAUmiB,GACV1kB,EAAS8jB,GACT,IAAIa,EAAYhiB,UAAUL,OAAS,EAAIoiB,EAASniB,EAAUI,UAAU,IACpE,GAAI8hB,KAAaD,GAAgB,OAAOD,GAAWG,EAAQZ,EAAMa,GACjE,GAAID,GAAUC,EAAW,CAEvB,OAAQb,EAAKxhB,QACX,KAAK,EAAG,OAAO,IAAIoiB,EACnB,KAAK,EAAG,OAAO,IAAIA,EAAOZ,EAAK,IAC/B,KAAK,EAAG,OAAO,IAAIY,EAAOZ,EAAK,GAAIA,EAAK,IACxC,KAAK,EAAG,OAAO,IAAIY,EAAOZ,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACjD,KAAK,EAAG,OAAO,IAAIY,EAAOZ,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAG5D,IAAIc,GAAS,MAEb,OADAA,EAAMld,KAAKhF,MAAMkiB,EAAOd,GACjB,IAAKI,GAAKxhB,MAAMgiB,EAAQE,IAGjC,IAAItR,EAAQqR,EAAU1iB,UAClBsf,EAAW9Q,GAAOtS,EAASmV,GAASA,EAAQ5U,OAAOuD,WACnDwF,EAAS9J,SAAS+E,MAAMhD,KAAKglB,EAAQnD,EAAUuC,GACnD,OAAO3lB,EAASsJ,GAAUA,EAAS8Z,KCrCvC3e,EAAQA,EAAQtD,EAAIsD,EAAQQ,EAAI3E,EAAoB,WAElD+kB,QAAQ7kB,eAAeiB,EAAGgB,KAAM,GAAKT,MAAO,IAAM,GAAKA,MAAO,MAC5D,WACFxB,eAAgB,SAAwBgF,EAAQkhB,EAAaC,GAC3D9kB,EAAS2D,GACTkhB,EAAc5kB,EAAY4kB,GAAa,GACvC7kB,EAAS8kB,GACT,IAEE,OADAllB,EAAGgB,EAAE+C,EAAQkhB,EAAaC,IACnB,EACP,MAAOvmB,GACP,OAAO,MCjBb,IAAI2W,GAAOzW,GAA0BmC,EAGrCgC,EAAQA,EAAQtD,EAAG,WACjBylB,eAAgB,SAAwBphB,EAAQkhB,GAC9C,IAAI9H,EAAO7H,GAAKlV,EAAS2D,GAASkhB,GAClC,QAAO9H,IAASA,EAAKxc,sBAA8BoD,EAAOkhB,MCY9DjiB,EAAQA,EAAQtD,EAAG,WAAaV,IAZhC,SAASA,EAAI+E,EAAQkhB,GACnB,IACI9H,EAAMzJ,EADN0R,EAAWriB,UAAUL,OAAS,EAAIqB,EAAShB,UAAU,GAEzD,OAAI3C,EAAS2D,KAAYqhB,EAAiBrhB,EAAOkhB,IAC7C9H,EAAO7H,GAAKtU,EAAE+C,EAAQkhB,IAAqBhjB,EAAIkb,EAAM,SACrDA,EAAK5c,WACQkB,IAAb0b,EAAKne,IACHme,EAAKne,IAAIc,KAAKslB,QACd3jB,EACFlD,EAASmV,EAAQzC,GAAelN,IAAiB/E,EAAI0U,EAAOuR,EAAaG,QAA7E,KCZFpiB,EAAQA,EAAQtD,EAAG,WACjB6V,yBAA0B,SAAkCxR,EAAQkhB,GAClE,OAAO3P,GAAKtU,EAAEZ,EAAS2D,GAASkhB,MCFpCjiB,EAAQA,EAAQtD,EAAG,WACjBuR,eAAgB,SAAwBlN,GACtC,OAAOshB,GAASjlB,EAAS2D,OCJ7Bf,EAAQA,EAAQtD,EAAG,WACjBuC,IAAK,SAAa8B,EAAQkhB,GACxB,OAAOA,KAAelhB,KCF1B,IAAIuhB,GAAgBxmB,OAAOsgB,aAE3Bpc,EAAQA,EAAQtD,EAAG,WACjB0f,aAAc,SAAsBrb,GAElC,OADA3D,EAAS2D,IACFuhB,IAAgBA,GAAcvhB,MCJzC,IAAI6f,GAAU/kB,EAAqB+kB,QACnC2B,GAAiB3B,IAAWA,GAAQ4B,SAAW,SAAiBnnB,GAC9D,IAAIgO,EAAOrD,GAAKhI,EAAEZ,EAAS/B,IACvBqkB,EAAaC,GAAK3hB,EACtB,OAAO0hB,EAAarW,EAAK7K,OAAOkhB,EAAWrkB,IAAOgO,GCLpDrJ,EAAQA,EAAQtD,EAAG,WAAa8lB,QAAS3mB,KCAzC,IAAI4mB,GAAqB3mB,OAAOwgB,kBAEhCtc,EAAQA,EAAQtD,EAAG,WACjB4f,kBAAmB,SAA2Bvb,GAC5C3D,EAAS2D,GACT,IAEE,OADI0hB,IAAoBA,GAAmB1hB,IACpC,EACP,MAAOpF,GACP,OAAO,MCkBbqE,EAAQA,EAAQtD,EAAG,WAAaqM,IApBhC,SAASA,EAAIhI,EAAQkhB,EAAaS,GAChC,IAEIC,EAAoBjS,EAFpB0R,EAAWriB,UAAUL,OAAS,EAAIqB,EAAShB,UAAU,GACrD6iB,EAAUtQ,GAAKtU,EAAEZ,EAAS2D,GAASkhB,GAEvC,IAAKW,EAAS,CACZ,GAAIrnB,EAASmV,EAAQzC,GAAelN,IAClC,OAAOgI,EAAI2H,EAAOuR,EAAaS,EAAGN,GAEpCQ,EAAU3kB,EAAW,GAEvB,OAAIgB,EAAI2jB,EAAS,YACU,IAArBA,EAAQhlB,WAAuBrC,EAAS6mB,MAC5CO,EAAqBrQ,GAAKtU,EAAEokB,EAAUH,IAAgBhkB,EAAW,IAC9CV,MAAQmlB,EAC3B1lB,EAAGgB,EAAEokB,EAAUH,EAAaU,GACrB,SAEclkB,IAAhBmkB,EAAQ7Z,MAA6B6Z,EAAQ7Z,IAAIjM,KAAKslB,EAAUM,IAAI,MCvBzEG,IAAU7iB,EAAQA,EAAQtD,EAAG,WAC/ByhB,eAAgB,SAAwBpd,EAAQ2P,GAC9CmS,GAAS5E,MAAMld,EAAQ2P,GACvB,IAEE,OADAmS,GAAS9Z,IAAIhI,EAAQ2P,IACd,EACP,MAAO/U,GACP,OAAO,MCNb,IAQImnB,GAAOC,GAASC,GARhBC,GAAUxoB,EAAOwoB,QACjBC,GAAUzoB,EAAO0oB,aACjBC,GAAY3oB,EAAO4oB,eACnBC,GAAiB7oB,EAAO6oB,eACxBC,GAAW9oB,EAAO8oB,SAClBC,GAAU,EACVC,MAGAC,GAAM,WACR,IAAItlB,GAAMkB,KAEV,GAAImkB,GAAMvlB,eAAeE,GAAK,CAC5B,IAAIzB,EAAK8mB,GAAMrlB,UACRqlB,GAAMrlB,GACbzB,MAGAgnB,GAAW,SAAUC,GACvBF,GAAI5mB,KAAK8mB,EAAM/I,OAGZqI,IAAYE,KACfF,GAAU,SAAsBvmB,GAG9B,IAFA,IAAIukB,KACAnf,EAAI,EACDhC,UAAUL,OAASqC,GAAGmf,EAAKpc,KAAK/E,UAAUgC,MAMjD,OALA0hB,KAAQD,IAAW,WAEjB9B,GAAoB,mBAAN/kB,EAAmBA,EAAK5B,SAAS4B,GAAKukB,IAEtD4B,GAAMU,IACCA,IAETJ,GAAY,SAAwBhlB,UAC3BqlB,GAAMrlB,IAGmB,WAA9BvC,EAAkBonB,IACpBH,GAAQ,SAAU1kB,GAChB6kB,GAAQY,SAAS5iB,EAAIyiB,GAAKtlB,EAAI,KAGvBmlB,IAAYA,GAASO,IAC9BhB,GAAQ,SAAU1kB,GAChBmlB,GAASO,IAAI7iB,EAAIyiB,GAAKtlB,EAAI,KAGnBklB,IAETN,IADAD,GAAU,IAAIO,IACCS,MACfhB,GAAQiB,MAAMC,UAAYN,GAC1Bb,GAAQ7hB,EAAI+hB,GAAKkB,YAAalB,GAAM,IAG3BvoB,EAAO0pB,kBAA0C,mBAAfD,cAA8BzpB,EAAO2pB,eAChFtB,GAAQ,SAAU1kB,GAChB3D,EAAOypB,YAAY9lB,EAAK,GAAI,MAE9B3D,EAAO0pB,iBAAiB,UAAWR,IAAU,IAG7Cb,GAvDqB,uBAsDUuB,EAAI,UAC3B,SAAUjmB,GAChBkmB,GAAKhX,YAAY+W,EAAI,WAA6B,mBAAI,WACpDC,GAAKC,YAAYjlB,MACjBokB,GAAI5mB,KAAKsB,KAKL,SAAUA,GAChBomB,WAAWvjB,EAAIyiB,GAAKtlB,EAAI,GAAI,KAIlC,IAAAqmB,IACE1b,IAAKma,GACLxF,MAAO0F,ICjFLsB,GAAY7oB,GAAmBkN,IAC/B4b,GAAWlqB,EAAOmqB,kBAAoBnqB,EAAOoqB,uBAC7C5B,GAAUxoB,EAAOwoB,QACjB6B,GAAUrqB,EAAOqqB,QACjBC,GAAuC,WAA9BxoB,EAAkB0mB,ICD/B,SAAS+B,GAAkB3c,GACzB,IAAI4c,EAASC,EACb5lB,KAAK6lB,QAAU,IAAI9c,EAAE,SAAU+c,EAAWC,GACxC,QAAgB5mB,IAAZwmB,QAAoCxmB,IAAXymB,EAAsB,MAAM1pB,UAAU,2BACnEypB,EAAUG,EACVF,EAASG,IAEX/lB,KAAK2lB,QAAUtlB,EAAUslB,GACzB3lB,KAAK4lB,OAASvlB,EAAUulB,GAG1B,ICOII,GAAUC,GAA6BC,GAAsBC,SDP9C,SAAUpd,GAC3B,OAAO,IAAI2c,GAAkB3c,KEhB/Bqd,GAAiB,SAAUhqB,GACzB,IACE,OAASC,GAAG,EAAOmf,EAAGpf,KACtB,MAAOC,GACP,OAASA,GAAG,EAAMmf,EAAGnf,KDOrBgqB,GAAO9pB,GAAmBkN,IAC1B6c,GFLa,WACf,IAAIC,EAAMC,EAAMC,EAEZC,EAAQ,WACV,IAAIC,EAAQtpB,EAEZ,IADIooB,KAAWkB,EAAShD,GAAQiD,SAASD,EAAOE,OACzCN,GAAM,CACXlpB,EAAKkpB,EAAKlpB,GACVkpB,EAAOA,EAAKhW,KACZ,IACElT,IACA,MAAOhB,GAGP,MAFIkqB,EAAME,IACLD,OAAOrnB,EACN9C,GAERmqB,OAAOrnB,EACLwnB,GAAQA,EAAOG,SAIrB,GAAIrB,GACFgB,EAAS,WACP9C,GAAQY,SAASmC,SAGd,IAAIrB,IAAclqB,EAAO4rB,WAAa5rB,EAAO4rB,UAAUC,WAQvD,GAAIxB,IAAWA,GAAQG,QAAS,CACrC,IAAIE,EAAUL,GAAQG,UACtBc,EAAS,WACPZ,EAAQoB,KAAKP,SASfD,EAAS,WAEPrB,GAAU5nB,KAAKrC,EAAQurB,QAtBgD,CACzE,IAAIQ,GAAS,EACTC,EAAOvqB,SAASwqB,eAAe,IACnC,IAAI/B,GAASqB,GAAOW,QAAQF,GAAQG,eAAe,IACnDb,EAAS,WACPU,EAAK5L,KAAO2L,GAAUA,GAqB1B,OAAO,SAAU7pB,GACf,IAAIgpB,GAAShpB,GAAIA,EAAIkT,UAAMpR,GACvBqnB,IAAMA,EAAKjW,KAAO8V,GACjBE,IACHA,EAAOF,EACPI,KACAD,EAAOH,GErDGppB,GAKZf,GAAYf,EAAOe,UACnBynB,GAAUxoB,EAAOwoB,QACjB4D,GAAWpsB,EAAc,QACzBsqB,GAA6B,WAApB3W,GAAQ6U,IACjB6D,GAAQ,aAERC,GAAuBxB,GAA8ByB,GAA2BhpB,EAEhFipB,KAAe,WACjB,IAEE,IAAI9B,EAAU0B,GAAS5B,QAAQ,GAC3BiC,GAAe/B,EAAQ5b,gBAAkB/M,GAAkB,YAAc,SAAUd,GACrFA,EAAKorB,GAAOA,KAGd,OAAQ/B,IAA0C,mBAAzBoC,wBAAwChC,EAAQoB,KAAKO,cAAkBI,EAChG,MAAOvrB,KATQ,GAafyrB,GAAa,SAAU/rB,GACzB,IAAIkrB,EACJ,SAAOhrB,EAASF,IAAkC,mBAAnBkrB,EAAOlrB,EAAGkrB,QAAsBA,GAE7DR,GAAS,SAAUZ,EAASkC,GAC9B,IAAIlC,EAAQmC,GAAZ,CACAnC,EAAQmC,IAAK,EACb,IAAIC,EAAQpC,EAAQqC,GACpB5B,GAAU,WAgCR,IA/BA,IAAIroB,EAAQ4nB,EAAQsC,GAChBC,EAAmB,GAAdvC,EAAQwC,GACb5lB,EAAI,EACJ2hB,EAAM,SAAUkE,GAClB,IAII/iB,EAAQ0hB,EAJRsB,EAAUH,EAAKE,EAASF,GAAKE,EAASE,KACtC7C,EAAU2C,EAAS3C,QACnBC,EAAS0C,EAAS1C,OAClBgB,EAAS0B,EAAS1B,OAEtB,IACM2B,GACGH,IACe,GAAdvC,EAAQ4C,IAASC,GAAkB7C,GACvCA,EAAQ4C,GAAK,IAEC,IAAZF,EAAkBhjB,EAAStH,GAEzB2oB,GAAQA,EAAOE,QACnBvhB,EAASgjB,EAAQtqB,GACb2oB,GAAQA,EAAOC,QAEjBthB,IAAW+iB,EAASzC,QACtBD,EAAO1pB,GAAU,yBACR+qB,EAAOa,GAAWviB,IAC3B0hB,EAAKzpB,KAAK+H,EAAQogB,EAASC,GACtBD,EAAQpgB,IACVqgB,EAAO3nB,GACd,MAAO5B,GACPupB,EAAOvpB,KAGJ4rB,EAAM7nB,OAASqC,GAAG2hB,EAAI6D,EAAMxlB,MACnCojB,EAAQqC,MACRrC,EAAQmC,IAAK,EACTD,IAAalC,EAAQ4C,IAAIE,GAAY9C,OAGzC8C,GAAc,SAAU9C,GAC1BQ,GAAK7oB,KAAKrC,EAAQ,WAChB,IAEIoK,EAAQgjB,EAASK,EAFjB3qB,EAAQ4nB,EAAQsC,GAChBU,EAAYC,GAAYjD,GAe5B,GAbIgD,IACFtjB,EAASwjB,GAAQ,WACXtD,GACF9B,GAAQqF,KAAK,qBAAsB/qB,EAAO4nB,IACjC0C,EAAUptB,EAAO8tB,sBAC1BV,GAAU1C,QAASA,EAASqD,OAAQjrB,KAC1B2qB,EAAUztB,EAAOytB,UAAYA,EAAQO,OAC/CP,EAAQO,MAAM,8BAA+BlrB,KAIjD4nB,EAAQ4C,GAAKhD,IAAUqD,GAAYjD,GAAW,EAAI,GAClDA,EAAQuD,QAAKjqB,EACX0pB,GAAatjB,EAAOlJ,EAAG,MAAMkJ,EAAOiW,KAGxCsN,GAAc,SAAUjD,GAC1B,OAAsB,IAAfA,EAAQ4C,IAAkD,KAArC5C,EAAQuD,IAAMvD,EAAQqC,IAAI9nB,QAEpDsoB,GAAoB,SAAU7C,GAChCQ,GAAK7oB,KAAKrC,EAAQ,WAChB,IAAIotB,EACA9C,GACF9B,GAAQqF,KAAK,mBAAoBnD,IACxB0C,EAAUptB,EAAOkuB,qBAC1Bd,GAAU1C,QAASA,EAASqD,OAAQrD,EAAQsC,QAI9CmB,GAAU,SAAUrrB,GACtB,IAAI4nB,EAAU7lB,KACV6lB,EAAQlN,KACZkN,EAAQlN,IAAK,GACbkN,EAAUA,EAAQ0D,IAAM1D,GAChBsC,GAAKlqB,EACb4nB,EAAQwC,GAAK,EACRxC,EAAQuD,KAAIvD,EAAQuD,GAAKvD,EAAQqC,GAAGrkB,SACzC4iB,GAAOZ,GAAS,KAEd2D,GAAW,SAAUvrB,GACvB,IACIgpB,EADApB,EAAU7lB,KAEd,IAAI6lB,EAAQlN,GAAZ,CACAkN,EAAQlN,IAAK,EACbkN,EAAUA,EAAQ0D,IAAM1D,EACxB,IACE,GAAIA,IAAY5nB,EAAO,MAAM/B,GAAU,qCACnC+qB,EAAOa,GAAW7pB,IACpBqoB,GAAU,WACR,IAAIvL,GAAYwO,GAAI1D,EAASlN,IAAI,GACjC,IACEsO,EAAKzpB,KAAKS,EAAO0D,EAAI6nB,GAAUzO,EAAS,GAAIpZ,EAAI2nB,GAASvO,EAAS,IAClE,MAAO1e,GACPitB,GAAQ9rB,KAAKud,EAAS1e,OAI1BwpB,EAAQsC,GAAKlqB,EACb4nB,EAAQwC,GAAK,EACb5B,GAAOZ,GAAS,IAElB,MAAOxpB,GACPitB,GAAQ9rB,MAAO+rB,GAAI1D,EAASlN,IAAI,GAAStc,MAKxCsrB,KAEHJ,GAAW,SAAiBkC,GAC1B3f,EAAW9J,KAAMunB,GA/IP,UA+I0B,MACpClnB,EAAUopB,GACVzD,GAASxoB,KAAKwC,MACd,IACEypB,EAAS9nB,EAAI6nB,GAAUxpB,KAAM,GAAI2B,EAAI2nB,GAAStpB,KAAM,IACpD,MAAO0pB,GACPJ,GAAQ9rB,KAAKwC,KAAM0pB,MAIvB1D,GAAW,SAAiByD,GAC1BzpB,KAAKkoB,MACLloB,KAAKopB,QAAKjqB,EACVa,KAAKqoB,GAAK,EACVroB,KAAK2Y,IAAK,EACV3Y,KAAKmoB,QAAKhpB,EACVa,KAAKyoB,GAAK,EACVzoB,KAAKgoB,IAAK,IAEHjoB,UAAYoT,EAA2BoU,GAASxnB,WAEvDknB,KAAM,SAAc0C,EAAaC,GAC/B,IAAItB,EAAWb,GAAqBpb,GAAmBrM,KAAMunB,KAO7D,OANAe,EAASF,GAA2B,mBAAfuB,GAA4BA,EACjDrB,EAASE,KAA4B,mBAAdoB,GAA4BA,EACnDtB,EAAS1B,OAASnB,GAAS9B,GAAQiD,YAASznB,EAC5Ca,KAAKkoB,GAAG1iB,KAAK8iB,GACTtoB,KAAKopB,IAAIppB,KAAKopB,GAAG5jB,KAAK8iB,GACtBtoB,KAAKqoB,IAAI5B,GAAOzmB,MAAM,GACnBsoB,EAASzC,SAGlBgE,MAAS,SAAUD,GACjB,OAAO5pB,KAAKinB,UAAK9nB,EAAWyqB,MAGhC1D,GAAuB,WACrB,IAAIL,EAAU,IAAIG,GAClBhmB,KAAK6lB,QAAUA,EACf7lB,KAAK2lB,QAAUhkB,EAAI6nB,GAAU3D,EAAS,GACtC7lB,KAAK4lB,OAASjkB,EAAI2nB,GAASzD,EAAS,IAEtC6B,GAA2BhpB,EAAI+oB,GAAuB,SAAU1e,GAC9D,OAAOA,IAAMwe,IAAYxe,IAAMod,GAC3B,IAAID,GAAqBnd,GACzBkd,GAA4Bld,KAIpCrI,EAAQA,EAAQU,EAAIV,EAAQoB,EAAIpB,EAAQQ,GAAKymB,IAAcnC,QAAS+B,KACpEnU,GAAgCmU,GAjMlB,WAkMdlU,GAlMc,WAmMd8S,GAAU5S,EAA0B,QAGpC7S,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAKymB,GAtMnB,WAwMZ/B,OAAQ,SAAgBvH,GACtB,IAAIyL,EAAarC,GAAqBznB,MAGtC,OADA+lB,EADe+D,EAAWlE,QACjBvH,GACFyL,EAAWjE,WAGtBnlB,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAiBymB,GA/M/B,WAiNZhC,QAAS,SAAiBoE,GACxB,OE9Na,SAAUhhB,EAAGghB,GAE5B,GADAjsB,EAASiL,GACL9M,EAAS8tB,IAAMA,EAAE9f,cAAgBlB,EAAG,OAAOghB,EAC/C,IAAIC,EAAoBvC,GAAqB/oB,EAAEqK,GAG/C,OADA4c,EADcqE,EAAkBrE,SACxBoE,GACDC,EAAkBnE,QFwNhBoE,CAAwDjqB,KAAM+pB,MAGzErpB,EAAQA,EAAQtD,EAAIsD,EAAQQ,IAAMymB,IAAcnU,GAA0B,SAAUf,GAClF8U,GAAS2C,IAAIzX,GAAa,MAAE+U,OAtNhB,WAyNZ0C,IAAK,SAAavN,GAChB,IAAI5T,EAAI/I,KACJ8pB,EAAarC,GAAqB1e,GAClC4c,EAAUmE,EAAWnE,QACrBC,EAASkE,EAAWlE,OACpBrgB,EAASwjB,GAAQ,WACnB,IAAInX,KACArN,EAAQ,EACR4lB,EAAY,EAChBhM,GAAMxB,GAAU,EAAO,SAAUkJ,GAC/B,IAAIuE,EAAS7lB,IACT8lB,GAAgB,EACpBzY,EAAOpM,UAAKrG,GACZgrB,IACAphB,EAAE4c,QAAQE,GAASoB,KAAK,SAAUhpB,GAC5BosB,IACJA,GAAgB,EAChBzY,EAAOwY,GAAUnsB,IACfksB,GAAaxE,EAAQ/T,KACtBgU,OAEHuE,GAAaxE,EAAQ/T,KAGzB,OADIrM,EAAOlJ,GAAGupB,EAAOrgB,EAAOiW,GACrBsO,EAAWjE,SAGpByE,KAAM,SAAc3N,GAClB,IAAI5T,EAAI/I,KACJ8pB,EAAarC,GAAqB1e,GAClC6c,EAASkE,EAAWlE,OACpBrgB,EAASwjB,GAAQ,WACnB5K,GAAMxB,GAAU,EAAO,SAAUkJ,GAC/B9c,EAAE4c,QAAQE,GAASoB,KAAK6C,EAAWnE,QAASC,OAIhD,OADIrgB,EAAOlJ,GAAGupB,EAAOrgB,EAAOiW,GACrBsO,EAAWjE,WG9QtB,UAAYtpB,ICIRE,GAAiBF,EAAwBmC,EAC7C6rB,GAAiB,SAAU3pB,GACzB,IAAI4pB,EAAU7uB,EAAKwK,SAAWxK,EAAKwK,OAASskB,EAAsBtkB,YAC5C,KAAlBvF,EAAK8pB,OAAO,IAAe9pB,KAAQ4pB,GAAU/tB,GAAe+tB,EAAS5pB,GAAQ3C,MAAO0sB,GAAOjsB,EAAEkC,MCL/F8F,GAAOnK,GAA0BmC,EACjCnB,MAAcA,SAEdqtB,GAA+B,iBAAVtvB,QAAsBA,QAAUkB,OAAOmJ,oBAC5DnJ,OAAOmJ,oBAAoBrK,iBAUZ,SAA6BS,GAC9C,OAAO6uB,IAAoC,mBAArBrtB,GAASC,KAAKzB,GATjB,SAAUA,GAC7B,IACE,OAAO2K,GAAK3K,GACZ,MAAOM,GACP,OAAOuuB,GAAY/mB,SAK0CgnB,CAAe9uB,GAAM2K,GAAK7B,EAAU9I,MCVjG6gB,GAAOrgB,GAAmBuP,IAoB1BkH,GAAOkD,GAAMxX,EACbhB,GAAKsY,EAAItX,EACTgI,GAAOokB,GAAQpsB,EACf8rB,GAAUrvB,EAAOgL,OACjB4kB,GAAQ5vB,EAAO6vB,KACfC,GAAaF,IAASA,GAAMG,UAE5BC,GAASpW,GAAI,WACbqW,GAAerW,GAAI,eACnBuL,MAAYvc,qBACZsnB,GAAiBpmB,EAAO,mBACxBqmB,GAAarmB,EAAO,WACpBsmB,GAAYtmB,EAAO,cACnBwJ,GAAcjS,OAAgB,UAC9BmrB,GAA+B,mBAAX6C,GACpBgB,GAAUrwB,EAAOqwB,QAEjB5P,IAAU4P,KAAYA,GAAiB,YAAMA,GAAiB,UAAEC,UAGhEC,GAAgBpkB,GAAeqkB,EAAO,WACxC,OAES,GAFFC,GAAQluB,MAAO,KACpBhB,IAAK,WAAc,OAAOgB,GAAGsC,KAAM,KAAO/B,MAAO,IAAKtB,MACpDA,IACD,SAAUZ,EAAI0C,EAAKmN,GACtB,IAAIigB,EAAY7Y,GAAKvE,GAAahQ,GAC9BotB,UAAkBpd,GAAYhQ,GAClCf,GAAG3B,EAAI0C,EAAKmN,GACRigB,GAAa9vB,IAAO0S,IAAa/Q,GAAG+Q,GAAahQ,EAAKotB,IACxDnuB,GAEAouB,GAAO,SAAUtlB,GACnB,IAAIulB,EAAMT,GAAW9kB,GAAOolB,GAAQpB,GAAiB,WAErD,OADAuB,EAAI9Z,GAAKzL,EACFulB,GAGLC,GAAWrE,IAAyC,iBAApB6C,GAAQ3R,SAAuB,SAAU9c,GAC3E,MAAoB,iBAANA,GACZ,SAAUA,GACZ,OAAOA,aAAcyuB,IAGnByB,GAAkB,SAAwBlwB,EAAI0C,EAAKmN,GAKrD,OAJI7P,IAAO0S,IAAawd,GAAgBV,GAAW9sB,EAAKmN,GACxD9N,EAAS/B,GACT0C,EAAMV,EAAYU,GAAK,GACvBX,EAAS8N,GACLjM,EAAI2rB,GAAY7sB,IACbmN,EAAExN,YAIDuB,EAAI5D,EAAIovB,KAAWpvB,EAAGovB,IAAQ1sB,KAAM1C,EAAGovB,IAAQ1sB,IAAO,GAC1DmN,EAAIggB,GAAQhgB,GAAKxN,WAAYO,EAAW,GAAG,OAJtCgB,EAAI5D,EAAIovB,KAASztB,GAAG3B,EAAIovB,GAAQxsB,EAAW,OAChD5C,EAAGovB,IAAQ1sB,IAAO,GAIXitB,GAAc3vB,EAAI0C,EAAKmN,IACzBlO,GAAG3B,EAAI0C,EAAKmN,IAEnBsgB,GAAoB,SAA0BnwB,EAAI6B,GACpDE,EAAS/B,GAKT,IAJA,IAGI0C,EAHAsL,ECnFW,SAAUhO,GACzB,IAAIwJ,EAASgI,GAAQxR,GACjBqkB,EAAaC,GAAK3hB,EACtB,GAAI0hB,EAKF,IAJA,IAGI3hB,EAHA0tB,EAAU/L,EAAWrkB,GACrBukB,EAASpN,GAAIxU,EACb+D,EAAI,EAED0pB,EAAQ/rB,OAASqC,GAAO6d,EAAO9iB,KAAKzB,EAAI0C,EAAM0tB,EAAQ1pB,OAAO8C,EAAOC,KAAK/G,GAChF,OAAO8G,ED0EE6mB,CAASxuB,EAAIiH,EAAUjH,IAC9B6E,EAAI,EACJwZ,EAAIlS,EAAK3J,OAEN6b,EAAIxZ,GAAGwpB,GAAgBlwB,EAAI0C,EAAMsL,EAAKtH,KAAM7E,EAAEa,IACrD,OAAO1C,GAKLswB,GAAwB,SAA8B5tB,GACxD,IAAI6tB,EAAIhM,GAAO9iB,KAAKwC,KAAMvB,EAAMV,EAAYU,GAAK,IACjD,QAAIuB,OAASyO,IAAe9O,EAAI2rB,GAAY7sB,KAASkB,EAAI4rB,GAAW9sB,QAC7D6tB,IAAM3sB,EAAIK,KAAMvB,KAASkB,EAAI2rB,GAAY7sB,IAAQkB,EAAIK,KAAMmrB,KAAWnrB,KAAKmrB,IAAQ1sB,KAAO6tB,IAE/FC,GAA4B,SAAkCxwB,EAAI0C,GAGpE,GAFA1C,EAAK8I,EAAU9I,GACf0C,EAAMV,EAAYU,GAAK,GACnB1C,IAAO0S,KAAe9O,EAAI2rB,GAAY7sB,IAASkB,EAAI4rB,GAAW9sB,GAAlE,CACA,IAAImN,EAAIoH,GAAKjX,EAAI0C,GAEjB,OADImN,IAAKjM,EAAI2rB,GAAY7sB,IAAUkB,EAAI5D,EAAIovB,KAAWpvB,EAAGovB,IAAQ1sB,KAAOmN,EAAExN,YAAa,GAChFwN,IAEL4gB,GAAuB,SAA6BzwB,GAKtD,IAJA,IAGI0C,EAHA6G,EAAQoB,GAAK7B,EAAU9I,IACvBwJ,KACA9C,EAAI,EAED6C,EAAMlF,OAASqC,GACf9C,EAAI2rB,GAAY7sB,EAAM6G,EAAM7C,OAAShE,GAAO0sB,IAAU1sB,GAAOme,IAAMrX,EAAOC,KAAK/G,GACpF,OAAO8G,GAEPknB,GAAyB,SAA+B1wB,GAM1D,IALA,IAII0C,EAJAiuB,EAAQ3wB,IAAO0S,GACfnJ,EAAQoB,GAAKgmB,EAAQnB,GAAY1mB,EAAU9I,IAC3CwJ,KACA9C,EAAI,EAED6C,EAAMlF,OAASqC,IAChB9C,EAAI2rB,GAAY7sB,EAAM6G,EAAM7C,OAAUiqB,IAAQ/sB,EAAI8O,GAAahQ,IAAc8G,EAAOC,KAAK8lB,GAAW7sB,IACxG,OAAO8G,GAINoiB,KAYH/lB,GAXA4oB,GAAU,WACR,GAAIxqB,gBAAgBwqB,GAAS,MAAMtuB,UAAU,gCAC7C,IAAIsK,EAAMrE,EAAI1B,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,GAChDob,EAAO,SAAUtc,GACf+B,OAASyO,IAAa8L,EAAK/c,KAAK+tB,GAAWttB,GAC3C0B,EAAIK,KAAMmrB,KAAWxrB,EAAIK,KAAKmrB,IAAS3kB,KAAMxG,KAAKmrB,IAAQ3kB,IAAO,GACrEklB,GAAc1rB,KAAMwG,EAAK7H,EAAW,EAAGV,KAGzC,OADIqJ,GAAesU,IAAQ8P,GAAcjd,GAAajI,GAAOnI,cAAc,EAAMoL,IAAK8Q,IAC/EuR,GAAKtlB,KAEY,UAAG,WAAY,WACvC,OAAOxG,KAAKiS,KAGdiE,GAAMxX,EAAI6tB,GACVvW,EAAItX,EAAIutB,GACRhvB,GAA0ByB,EAAIosB,GAAQpsB,EAAI8tB,GAC1CtvB,GAAyBwB,EAAI2tB,GAC7BlZ,GAA0BzU,EAAI+tB,GAE1BnlB,GACF1F,EAAS6M,GAAa,uBAAwB4d,IAAuB,GAGvE1B,GAAOjsB,EAAI,SAAUkC,GACnB,OAAOkrB,GAAK/W,GAAInU,MAIpBF,EAAQA,EAAQU,EAAIV,EAAQoB,EAAIpB,EAAQQ,GAAKymB,IAAcxhB,OAAQqkB,KAEnE,IAAK,IAAImC,GAAa,iHAGpBptB,MAAM,KAAMyK,GAAI,EAAG2iB,GAAWvsB,OAAS4J,IAAG+K,GAAI4X,GAAW3iB,OAE3D,IAAK,IAAI4iB,GAAmBhnB,GAAMmP,GAAIhQ,OAAQ+Y,GAAI,EAAG8O,GAAiBxsB,OAAS0d,IAAI+O,GAAUD,GAAiB9O,OAE9Gpd,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAKymB,GAAY,UAE3CmF,IAAO,SAAUruB,GACf,OAAOkB,EAAI0rB,GAAgB5sB,GAAO,IAC9B4sB,GAAe5sB,GACf4sB,GAAe5sB,GAAO+rB,GAAQ/rB,IAGpCsuB,OAAQ,SAAgBhB,GACtB,IAAKC,GAASD,GAAM,MAAM7vB,UAAU6vB,EAAM,qBAC1C,IAAK,IAAIttB,KAAO4sB,GAAgB,GAAIA,GAAe5sB,KAASstB,EAAK,OAAOttB,GAE1EuuB,UAAW,WAAcpR,IAAS,GAClCqR,UAAW,WAAcrR,IAAS,KAGpClb,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAKymB,GAAY,UAE3CpZ,OA/FY,SAAgBxS,EAAI6B,GAChC,YAAauB,IAANvB,EAAkBguB,GAAQ7vB,GAAMmwB,GAAkBN,GAAQ7vB,GAAK6B,IAgGtEnB,eAAgBwvB,GAEhB5e,iBAAkB6e,GAElBjZ,yBAA0BsZ,GAE1B5mB,oBAAqB6mB,GAErB1M,sBAAuB2M,KAIzB1B,IAASrqB,EAAQA,EAAQtD,EAAIsD,EAAQQ,IAAMymB,IAAcgE,EAAO,WAC9D,IAAIvuB,EAAIotB,KAIR,MAA0B,UAAnBS,IAAY7tB,KAA2C,MAAxB6tB,IAAatuB,EAAGS,KAAyC,MAAzB6tB,GAAWzuB,OAAOY,OACrF,QACH8tB,UAAW,SAAmBnvB,GAI5B,IAHA,IAEImxB,EAAUC,EAFVvL,GAAQ7lB,GACR0G,EAAI,EAEDhC,UAAUL,OAASqC,GAAGmf,EAAKpc,KAAK/E,UAAUgC,MAEjD,GADA0qB,EAAYD,EAAWtL,EAAK,IACvB3lB,EAASixB,SAAoB/tB,IAAPpD,KAAoBiwB,GAASjwB,GAMxD,OALKiT,GAAQke,KAAWA,EAAW,SAAUzuB,EAAKR,GAEhD,GADwB,mBAAbkvB,IAAyBlvB,EAAQkvB,EAAU3vB,KAAKwC,KAAMvB,EAAKR,KACjE+tB,GAAS/tB,GAAQ,OAAOA,IAE/B2jB,EAAK,GAAKsL,EACHjC,GAAWzqB,MAAMuqB,GAAOnJ,MAKnC4I,GAAiB,UAAEY,KAAiB/X,EAAmBmX,GAAiB,UAAGY,GAAcZ,GAAiB,UAAE/sB,SAE5GgO,GAAe+e,GAAS,UAExB/e,GAAelQ,KAAM,QAAQ,GAE7BkQ,GAAetQ,EAAO6vB,KAAM,QAAQ,GErOpC,IAAAoC,GAAiB,SAAUthB,EAAK1P,GAC9B,IAAIiB,GAAM1B,EAAKa,YAAcsP,IAAQtP,OAAOsP,GACxC9K,KACJA,EAAI8K,GAAO1P,EAAKiB,GAChBqD,EAAQA,EAAQtD,EAAIsD,EAAQQ,EAAI0I,EAAM,WAAcvM,EAAG,KAAQ,SAAU2D,ICNvEmc,GAAO5gB,GAAmBghB,SAE9BtgB,GAAyB,SAAU,SAAUowB,GAC3C,OAAO,SAAgBtxB,GACrB,OAAOsxB,GAAWpxB,EAASF,GAAMsxB,EAAQlQ,GAAKphB,IAAOA,KCJzD,IAAIohB,GAAO5gB,GAAmBghB,SAE9BtgB,GAAyB,OAAQ,SAAUqwB,GACzC,OAAO,SAAcvxB,GACnB,OAAOuxB,GAASrxB,EAASF,GAAMuxB,EAAMnQ,GAAKphB,IAAOA,KCJrD,IAAIohB,GAAO5gB,GAAmBghB,SAE9BtgB,GAAyB,oBAAqB,SAAUkmB,GACtD,OAAO,SAA2BpnB,GAChC,OAAOonB,GAAsBlnB,EAASF,GAAMonB,EAAmBhG,GAAKphB,IAAOA,KCH/EQ,GAAyB,WAAY,SAAUgxB,GAC7C,OAAO,SAAkBxxB,GACvB,OAAOE,EAASF,MAAMwxB,GAAYA,EAAUxxB,MCFhDQ,GAAyB,WAAY,SAAUixB,GAC7C,OAAO,SAAkBzxB,GACvB,OAAOE,EAASF,MAAMyxB,GAAYA,EAAUzxB,MCFhDQ,GAAyB,eAAgB,SAAUymB,GACjD,OAAO,SAAsBjnB,GAC3B,QAAOE,EAASF,MAAMinB,GAAgBA,EAAcjnB,OCHxD,IAAIwwB,GAA4BhwB,GAA0BmC,EAE1DzB,GAAyB,2BAA4B,WACnD,OAAO,SAAkClB,EAAI0C,GAC3C,OAAO8tB,GAA0B1nB,EAAU9I,GAAK0C,MCFpDlC,GAAyB,iBAAkB,WACzC,OAAO,SAAwBR,GAC7B,OAAO0xB,GAAgB1nB,GAAShK,OCFpCQ,GAAyB,OAAQ,WAC/B,OAAO,SAAcR,GACnB,OAAO6J,GAAMG,GAAShK,OCL1BQ,GAAyB,sBAAuB,WAC9C,OAAOU,GAA8ByB,ICCvCgC,EAAQA,EAAQtD,EAAIsD,EAAQQ,EAAG,UAAY8e,OAAQzjB,KCFnD,IAAAmxB,GAAiBlxB,OAAOK,IAAM,SAAYktB,EAAG4D,GAE3C,OAAO5D,IAAM4D,EAAU,IAAN5D,GAAW,EAAIA,GAAM,EAAI4D,EAAI5D,GAAKA,GAAK4D,GAAKA,GCD/DjtB,EAAQA,EAAQtD,EAAG,UAAYP,GAAIN,KCFnC,IAAImB,GAAKnB,EAAwBmC,EAC7BkvB,GAASnyB,SAASsE,UAClB8tB,GAAS,wBACF,SAGHD,IAAU3wB,GAA6BS,GAAGkwB,GAHvC,QAITvvB,cAAc,EACd3B,IAAK,WACH,IACE,OAAQ,GAAKsD,MAAM8tB,MAAMD,IAAQ,GACjC,MAAOxxB,GACP,MAAO,OCRbqE,EAAQA,EAAQtD,EAAG,UAEjB2wB,IAAK,SAAaC,GAMhB,IALA,IAAIC,EAAMppB,EAAUmpB,EAASD,KACzB7hB,EAAMxI,EAASuqB,EAAI7tB,QACnB4F,EAAOvF,UAAUL,OACjB2P,KACAtN,EAAI,EACDyJ,EAAMzJ,GACXsN,EAAIvK,KAAK1F,OAAOmuB,EAAIxrB,OAChBA,EAAIuD,GAAM+J,EAAIvK,KAAK1F,OAAOW,UAAUgC,KACxC,OAAOsN,EAAIlQ,KAAK,OCbtB,IAAIquB,GAAepuB,OAAOouB,aACtBC,GAAiBruB,OAAOsuB,cAG5B1tB,EAAQA,EAAQtD,EAAIsD,EAAQQ,KAAOitB,IAA2C,GAAzBA,GAAe/tB,QAAc,UAEhFguB,cAAe,SAAuBrE,GAKpC,IAJA,IAGIsE,EAHAte,KACA/J,EAAOvF,UAAUL,OACjBqC,EAAI,EAEDuD,EAAOvD,GAAG,CAEf,GADA4rB,GAAQ5tB,UAAUgC,KACdqC,EAAgBupB,EAAM,WAAcA,EAAM,MAAM1qB,WAAW0qB,EAAO,8BACtEte,EAAIvK,KAAK6oB,EAAO,MACZH,GAAaG,GACbH,GAAyC,QAA1BG,GAAQ,QAAY,IAAcA,EAAO,KAAQ,QAEpE,OAAOte,EAAIlQ,KAAK,OChBtB,IAA2ByuB,GCFvBC,IDEuBD,ICFO,EDGzB,SAAUnuB,EAAMquB,GACrB,IAGI7xB,EAAG2D,EAHH6H,EAAIrI,OAAOsE,EAAQjE,IACnBsC,EAAIc,EAAUirB,GACdvS,EAAI9T,EAAE/H,OAEV,OAAIqC,EAAI,GAAKA,GAAKwZ,EAAUqS,GAAY,QAAKnvB,GAC7CxC,EAAIwL,EAAEsmB,WAAWhsB,IACN,OAAU9F,EAAI,OAAU8F,EAAI,IAAMwZ,IAAM3b,EAAI6H,EAAEsmB,WAAWhsB,EAAI,IAAM,OAAUnC,EAAI,MACxFguB,GAAYnmB,EAAEuiB,OAAOjoB,GAAK9F,EAC1B2xB,GAAYnmB,EAAEtE,MAAMpB,EAAGA,EAAI,GAA2BnC,EAAI,OAAzB3D,EAAI,OAAU,IAAqB,QCX5E+D,EAAQA,EAAQ9C,EAAG,UAEjB8wB,YAAa,SAAqBF,GAChC,OAAOD,GAAIvuB,KAAMwuB,MCFrB,IAAAG,GAAiB,SAAgB7b,GAC/B,IAAI8b,EAAM9uB,OAAOsE,EAAQpE,OACrB+P,EAAM,GACN8N,EAAIta,EAAUuP,GAClB,GAAI+K,EAAI,GAAKA,GAAK9W,EAAAA,EAAU,MAAMpD,WAAW,2BAC7C,KAAMka,EAAI,GAAIA,KAAO,KAAO+Q,GAAOA,GAAc,EAAJ/Q,IAAO9N,GAAO6e,GAC3D,OAAO7e,GCRTrP,EAAQA,EAAQ9C,EAAG,UAEjBixB,OAAQtyB,KCDV,IAAIuyB,GAAQvyB,GAAkB,SAC9BwyB,GAAiB,SAAUhzB,GACzB,IAAIizB,EACJ,OAAO/yB,EAASF,UAAmCoD,KAA1B6vB,EAAWjzB,EAAG+yB,OAA0BE,EAAsB,UAAXhrB,EAAIjI,KCFlFkzB,GAAiB,SAAU9uB,EAAM+uB,EAAc5e,GAC7C,GAAI0e,GAASE,GAAe,MAAMhzB,UAAU,UAAYoU,EAAO,0BAC/D,OAAOxQ,OAAOsE,EAAQjE,KCNpB2uB,GAAQvyB,GAAkB,SAC9B4yB,GAAiB,SAAUrjB,GACzB,IAAIsjB,EAAK,IACT,IACE,MAAMtjB,GAAKsjB,GACX,MAAO/yB,GACP,IAEE,OADA+yB,EAAGN,KAAS,GACJ,MAAMhjB,GAAKsjB,GACnB,MAAO1wB,KACT,OAAO,GCJP2wB,GAAc,GAAc,WAEhC3uB,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAI3E,GAHd,cAG0D,UAC1E+yB,WAAY,SAAoBJ,GAC9B,IAAI/uB,EAAOovB,GAAQvvB,KAAMkvB,EALX,cAMV3qB,EAAQb,EAASnI,KAAK8H,IAAI5C,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,EAAWgB,EAAKC,SAChFovB,EAAS1vB,OAAOovB,GACpB,OAAOG,GACHA,GAAY7xB,KAAK2C,EAAMqvB,EAAQjrB,GAC/BpE,EAAK0D,MAAMU,EAAOA,EAAQirB,EAAOpvB,UAAYovB,KCVrD,IACIC,GAAY,GAAY,SAE5B/uB,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAI3E,GAHhB,YAG0D,UACxEmzB,SAAU,SAAkBR,GAC1B,IAAI/uB,EAAOovB,GAAQvvB,KAAMkvB,EALb,YAMRS,EAAclvB,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,EACpD+M,EAAMxI,EAASvD,EAAKC,QACpB6F,OAAsB9G,IAAhBwwB,EAA4BzjB,EAAM3Q,KAAK8H,IAAIK,EAASisB,GAAczjB,GACxEsjB,EAAS1vB,OAAOovB,GACpB,OAAOO,GACHA,GAAUjyB,KAAK2C,EAAMqvB,EAAQvpB,GAC7B9F,EAAK0D,MAAMoC,EAAMupB,EAAOpvB,OAAQ6F,KAASupB,KCXjD9uB,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAI3E,GAFjB,YAE0D,UACvEsd,SAAU,SAAkBqV,GAC1B,SAAUK,GAAQvvB,KAAMkvB,EAJb,YAKRvV,QAAQuV,EAAczuB,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MCR/D5C,GAA2C,KAAd,KAAKqzB,OAAc3yB,EAAwByB,EAAEmxB,OAAO9vB,UAAW,SAC9F1B,cAAc,EACd3B,ICAe,WACf,IAAIyD,EAAOrC,EAASkC,MAChBuF,EAAS,GAMb,OALIpF,EAAKhF,SAAQoK,GAAU,KACvBpF,EAAK2vB,aAAYvqB,GAAU,KAC3BpF,EAAK4vB,YAAWxqB,GAAU,KAC1BpF,EAAK6vB,UAASzqB,GAAU,KACxBpF,EAAK8vB,SAAQ1qB,GAAU,KACpBA,KCJT,IAAA2qB,GAAiB,SAAUpkB,EAAK1L,EAAQhE,GACtC,IAAI+zB,EAASpb,GAAIjJ,GACbskB,EAAMh0B,EAAKgI,EAAS+rB,EAAQ,GAAGrkB,IAC/BukB,EAAQD,EAAI,GACZE,EAAOF,EAAI,GACXxmB,EAAM,WACR,IAAIjM,KAEJ,OADAA,EAAEwyB,GAAU,WAAc,OAAO,GACZ,GAAd,GAAGrkB,GAAKnO,OAEfiE,EAAS9B,OAAOC,UAAW+L,EAAKukB,GAChCzwB,EAAKiwB,OAAO9vB,UAAWowB,EAAkB,GAAV/vB,EAG3B,SAAUmwB,EAAQthB,GAAO,OAAOqhB,EAAK9yB,KAAK+yB,EAAQvwB,KAAMiP,IAGxD,SAAUshB,GAAU,OAAOD,EAAK9yB,KAAK+yB,EAAQvwB,UCvBrDzD,GAAyB,QAAS,EAAG,SAAU6H,EAAS0qB,EAAO0B,GAE7D,OAAQ,SAAeC,GAErB,IAAI9yB,EAAIyG,EAAQpE,MACZ3C,EAAe8B,MAAVsxB,OAAsBtxB,EAAYsxB,EAAO3B,GAClD,YAAc3vB,IAAP9B,EAAmBA,EAAGG,KAAKizB,EAAQ9yB,GAAK,IAAIkyB,OAAOY,GAAQ3B,GAAOhvB,OAAOnC,KAC/E6yB,KCPLj0B,GAAyB,UAAW,EAAG,SAAU6H,EAASssB,EAASC,GAEjE,OAAQ,SAAiBC,EAAaC,GAEpC,IAAIlzB,EAAIyG,EAAQpE,MACZ3C,EAAoB8B,MAAfyxB,OAA2BzxB,EAAYyxB,EAAYF,GAC5D,YAAcvxB,IAAP9B,EACHA,EAAGG,KAAKozB,EAAajzB,EAAGkzB,GACxBF,EAASnzB,KAAKsC,OAAOnC,GAAIizB,EAAaC,IACzCF,KCTLp0B,GAAyB,QAAS,EAAG,SAAU6H,EAAS0sB,EAAOC,GAE7D,IAAI/B,EAAW/xB,GACX+zB,EAASD,EACTE,KAAWzrB,KAIf,GAC+B,KAA7B,OAAa,MAAE,QAAQ,IACe,GAAtC,OAAa,MAAE,QAAS,GAAS,QACE,GAAnC,KAAW,MAAE,WAAiB,QACK,GAAnC,IAAU,MAAE,YAAkB,QAC9B,IAAU,MAAE,QAAc,OAAI,GAC9B,GAAS,MAAE,MAAY,OACvB,CACA,IAAI0rB,OAA8B/xB,IAAvB,OAAO/C,KAAK,IAAI,GAE3B20B,EAAS,SAAUjX,EAAWqX,GAC5B,IAAIZ,EAASzwB,OAAOE,MACpB,QAAkBb,IAAd2a,GAAqC,IAAVqX,EAAa,SAE5C,IAAKnC,EAASlV,GAAY,OAAOkX,EAAOxzB,KAAK+yB,EAAQzW,EAAWqX,GAChE,IASIC,EAAYtD,EAAOuD,EAAWC,EAAY7uB,EAT1C8uB,KACA3B,GAAS9V,EAAUgW,WAAa,IAAM,KAC7BhW,EAAUiW,UAAY,IAAM,KAC5BjW,EAAUkW,QAAU,IAAM,KAC1BlW,EAAUmW,OAAS,IAAM,IAClCuB,EAAgB,EAChBC,OAAuBtyB,IAAVgyB,EAAsB,WAAaA,IAAU,EAE1DO,EAAgB,IAAI7B,OAAO/V,EAAUjZ,OAAQ+uB,EAAQ,KAIzD,IADKsB,IAAME,EAAa,IAAIvB,OAAO,IAAM6B,EAAc7wB,OAAS,WAAY+uB,KACrE9B,EAAQ4D,EAAct1B,KAAKm0B,QAEhCc,EAAYvD,EAAMvpB,MAAQupB,EAAM,GAAS,QACzB0D,IACdD,EAAO/rB,KAAK+qB,EAAO1sB,MAAM2tB,EAAe1D,EAAMvpB,SAGzC2sB,GAAQpD,EAAY,OAAI,GAAGA,EAAM,GAAG6D,QAAQP,EAAY,WAC3D,IAAK3uB,EAAI,EAAGA,EAAIhC,UAAgB,OAAI,EAAGgC,SAA0BtD,IAAjBsB,UAAUgC,KAAkBqrB,EAAMrrB,QAAKtD,KAErF2uB,EAAY,OAAI,GAAKA,EAAMvpB,MAAQgsB,EAAa,QAAGU,EAAMzwB,MAAM+wB,EAAQzD,EAAMjqB,MAAM,IACvFytB,EAAaxD,EAAM,GAAS,OAC5B0D,EAAgBH,EACZE,EAAa,QAAKE,KAEpBC,EAAwB,YAAM5D,EAAMvpB,OAAOmtB,EAAwB,YAKzE,OAHIF,IAAkBjB,EAAa,QAC7Be,GAAeI,EAAc5S,KAAK,KAAKyS,EAAO/rB,KAAK,IAClD+rB,EAAO/rB,KAAK+qB,EAAO1sB,MAAM2tB,IACzBD,EAAa,OAAIE,EAAaF,EAAO1tB,MAAM,EAAG4tB,GAAcF,OAG5D,IAAU,WAAEpyB,EAAW,GAAS,SACzC4xB,EAAS,SAAUjX,EAAWqX,GAC5B,YAAqBhyB,IAAd2a,GAAqC,IAAVqX,KAAmBH,EAAOxzB,KAAKwC,KAAM8Z,EAAWqX,KAItF,OAAQ,SAAerX,EAAWqX,GAChC,IAAIxzB,EAAIyG,EAAQpE,MACZ3C,EAAkB8B,MAAb2a,OAAyB3a,EAAY2a,EAAUgX,GACxD,YAAc3xB,IAAP9B,EAAmBA,EAAGG,KAAKsc,EAAWnc,EAAGwzB,GAASJ,EAAOvzB,KAAKsC,OAAOnC,GAAImc,EAAWqX,IAC1FJ,KCpELx0B,GAAyB,SAAU,EAAG,SAAU6H,EAASwtB,EAAQC,GAE/D,OAAQ,SAAgBpB,GAEtB,IAAI9yB,EAAIyG,EAAQpE,MACZ3C,EAAe8B,MAAVsxB,OAAsBtxB,EAAYsxB,EAAOmB,GAClD,YAAczyB,IAAP9B,EAAmBA,EAAGG,KAAKizB,EAAQ9yB,GAAK,IAAIkyB,OAAOY,GAAQmB,GAAQ9xB,OAAOnC,KAChFk0B,KCJL,IAAAC,GAAiB,SAAUtzB,EAAQ+F,EAAOtG,GACpCsG,KAAS/F,EAAQytB,EAAgBvtB,EAAEF,EAAQ+F,EAAO5F,EAAW,EAAGV,IAC/DO,EAAO+F,GAAStG,GCIvByC,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAK3E,GAA0B,SAAUkW,MAA8B,SAEjGI,KAAM,SAAc2H,GAClB,IAOIpa,EAAQmF,EAAQ2M,EAAM2G,EAPtBlb,EAAIoI,GAASyU,GACbzR,EAAmB,mBAAR/I,KAAqBA,KAAO8H,MACvC9B,EAAOvF,UAAUL,OACjB0Y,EAAQ9S,EAAO,EAAIvF,UAAU,QAAKtB,EAClC4Z,OAAoB5Z,IAAV2Z,EACVvU,EAAQ,EACRyU,EAASpE,GAAUjX,GAIvB,GAFIob,IAASD,EAAQnX,EAAImX,EAAO9S,EAAO,EAAIvF,UAAU,QAAKtB,EAAW,IAEvDA,MAAV6Z,GAAyBjQ,GAAKjB,OAASyM,GAAYyE,GAMrD,IAAKzT,EAAS,IAAIwD,EADlB3I,EAASsD,EAAS/F,EAAEyC,SACSA,EAASmE,EAAOA,IAC3CwtB,GAAexsB,EAAQhB,EAAOwU,EAAUD,EAAMnb,EAAE4G,GAAQA,GAAS5G,EAAE4G,SANrE,IAAKsU,EAAWG,EAAOxb,KAAKG,GAAI4H,EAAS,IAAIwD,IAAOmJ,EAAO2G,EAAStI,QAAQJ,KAAM5L,IAChFwtB,GAAexsB,EAAQhB,EAAOwU,EAAUvb,GAAKqb,EAAUC,GAAQ5G,EAAKjU,MAAOsG,IAAQ,GAAQ2N,EAAKjU,OASpG,OADAsH,EAAOnF,OAASmE,EACTgB,KC7BX7E,EAAQA,EAAQtD,EAAIsD,EAAQQ,EAAI3E,EAAoB,WAClD,SAAS2E,KACT,QAAS4G,MAAMuU,GAAG7e,KAAK0D,aAAcA,KACnC,SAEFmb,GAAI,WAIF,IAHA,IAAI9X,EAAQ,EACRyB,EAAOvF,UAAUL,OACjBmF,EAAS,IAAoB,mBAARvF,KAAqBA,KAAO8H,OAAO9B,GACrDA,EAAOzB,GAAOwtB,GAAexsB,EAAQhB,EAAO9D,UAAU8D,MAE7D,OADAgB,EAAOnF,OAAS4F,EACTT,KCbX7E,EAAQA,EAAQ9C,EAAG,SAAW+U,WAAYpW,KAE1CU,GAAiC,cCFjC,IAAI+0B,GAAQz1B,GAA4B,GAEpC01B,IAAS,EADH,YAGKnqB,MAAM,GAAM,KAAE,WAAcmqB,IAAS,IACpDvxB,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAI+wB,GAAQ,SACtC1Y,KAAM,SAAczJ,GAClB,OAAOkiB,GAAMhyB,KAAM8P,EAAYrP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MAGzElC,GATU,QCDV,IAAI+0B,GAAQz1B,GAA4B,GAEpC01B,IAAS,EADH,iBAGKnqB,MAAM,GAAM,UAAE,WAAcmqB,IAAS,IACpDvxB,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAI+wB,GAAQ,SACtCxY,UAAW,SAAmB3J,GAC5B,OAAOkiB,GAAMhyB,KAAM8P,EAAYrP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MAGzElC,GATU,aCDVyD,EAAQA,EAAQ9C,EAAG,SAAWyb,KAAM9c,KAEpCU,GAAiC,QCHjC,IAAIi1B,GAAY31B,EAAqB41B,SAErCzxB,EAAQA,EAAQtD,EAAG,UACjB+0B,SAAU,SAAkBp2B,GAC1B,MAAoB,iBAANA,GAAkBm2B,GAAUn2B,MCJ9C,IAAImH,GAAQ3H,KAAK2H,MACjBkvB,GAAiB,SAAmBr2B,GAClC,OAAQE,EAASF,IAAOo2B,SAASp2B,IAAOmH,GAAMnH,KAAQA,GCDxD2E,EAAQA,EAAQtD,EAAG,UAAYi1B,UAAW91B,KCA1C,IAAI0K,GAAM1L,KAAK0L,IAEfvG,EAAQA,EAAQtD,EAAG,UACjBk1B,cAAe,SAAuB7uB,GACpC,OAAO4uB,GAAU5uB,IAAWwD,GAAIxD,IAAW,oBCJ/C/C,EAAQA,EAAQtD,EAAG,UACjBgG,MAAO,SAAeK,GAEpB,OAAOA,GAAUA,KCHrB/C,EAAQA,EAAQtD,EAAG,UAAYm1B,QAASh3B,KAAK2L,IAAI,GAAI,MCArDxG,EAAQA,EAAQtD,EAAG,UAAYo1B,kBAAmB,mBCAlD9xB,EAAQA,EAAQtD,EAAG,UAAYq1B,iBAAkB,mBCFjD,IAAAC,GAAiBn3B,KAAKo3B,OAAS,SAAe5I,GAC5C,OAAQA,GAAKA,IAAM,MAAQA,EAAI,KAAOA,EAAIA,EAAIA,EAAI,EAAIxuB,KAAK4L,IAAI,EAAI4iB,ICCjE6I,GAAOr3B,KAAKq3B,KACZC,GAASt3B,KAAKu3B,MAElBpyB,EAAQA,EAAQtD,EAAIsD,EAAQQ,IAAM2xB,IAEW,KAAxCt3B,KAAK2H,MAAM2vB,GAAOE,OAAOC,aAEzBH,GAAO9rB,EAAAA,IAAaA,EAAAA,GACtB,QACD+rB,MAAO,SAAe/I,GACpB,OAAQA,GAAKA,GAAK,EAAIzhB,IAAMyhB,EAAI,kBAC5BxuB,KAAK4L,IAAI4iB,GAAKxuB,KAAK6L,IACnBurB,GAAM5I,EAAI,EAAI6I,GAAK7I,EAAI,GAAK6I,GAAK7I,EAAI,OCb7C,IAAIkJ,GAAS13B,KAAK23B,MAOlBxyB,EAAQA,EAAQtD,EAAIsD,EAAQQ,IAAM+xB,IAAU,EAAIA,GAAO,GAAK,GAAI,QAAUC,MAL1E,SAASA,EAAMnJ,GACb,OAAQoI,SAASpI,GAAKA,IAAW,GAALA,EAAaA,EAAI,GAAKmJ,GAAOnJ,GAAKxuB,KAAK4L,IAAI4iB,EAAIxuB,KAAKq3B,KAAK7I,EAAIA,EAAI,IAAxDA,KCHvC,IAAIoJ,GAAS53B,KAAK63B,MAGlB1yB,EAAQA,EAAQtD,EAAIsD,EAAQQ,IAAMiyB,IAAU,EAAIA,IAAQ,GAAK,GAAI,QAC/DC,MAAO,SAAerJ,GACpB,OAAmB,IAAXA,GAAKA,GAAUA,EAAIxuB,KAAK4L,KAAK,EAAI4iB,IAAM,EAAIA,IAAM,KCN7D,IAAAsJ,GAAiB93B,KAAK+3B,MAAQ,SAAcvJ,GAE1C,OAAmB,IAAXA,GAAKA,IAAWA,GAAKA,EAAIA,EAAIA,EAAI,GAAK,EAAI,GCCpDrpB,EAAQA,EAAQtD,EAAG,QACjBm2B,KAAM,SAAcxJ,GAClB,OAAOuJ,GAAKvJ,GAAKA,GAAKxuB,KAAK2L,IAAI3L,KAAK0L,IAAI8iB,GAAI,EAAI,MCHpDrpB,EAAQA,EAAQtD,EAAG,QACjBo2B,MAAO,SAAezJ,GACpB,OAAQA,KAAO,GAAK,GAAKxuB,KAAK2H,MAAM3H,KAAK4L,IAAI4iB,EAAI,IAAOxuB,KAAKk4B,OAAS,MCH1E,IAAIzyB,GAAMzF,KAAKyF,IAEfN,EAAQA,EAAQtD,EAAG,QACjBs2B,KAAM,SAAc3J,GAClB,OAAQ/oB,GAAI+oB,GAAKA,GAAK/oB,IAAK+oB,IAAM,KCLrC,IAAI4J,GAASp4B,KAAKq4B,MAClBC,IAAmBF,IAEdA,GAAO,IAAM,oBAAsBA,GAAO,IAAM,qBAE7B,OAAnBA,IAAQ,OACT,SAAe5J,GACjB,OAAmB,IAAXA,GAAKA,GAAUA,EAAIA,GAAK,MAAQA,EAAI,KAAOA,EAAIA,EAAIA,EAAI,EAAIxuB,KAAKyF,IAAI+oB,GAAK,GAC/E4J,GCLJjzB,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAKyyB,IAAUp4B,KAAKq4B,OAAQ,QAAUA,MAAOD,KCFzE,IAAIzsB,GAAM3L,KAAK2L,IACXqrB,GAAUrrB,GAAI,GAAI,IAClB4sB,GAAY5sB,GAAI,GAAI,IACpB6sB,GAAQ7sB,GAAI,EAAG,MAAQ,EAAI4sB,IAC3BE,GAAQ9sB,GAAI,GAAI,KAMpB+sB,GAAiB14B,KAAK24B,QAAU,SAAgBnK,GAC9C,IAEIptB,EAAG4I,EAFH4uB,EAAO54B,KAAK0L,IAAI8iB,GAChBqK,EAAQd,GAAKvJ,GAEjB,OAAIoK,EAAOH,GAAcI,GAAwBD,EAAOH,GAAQF,GAPrD,EAAIvB,GAAU,EAAIA,IAOgDyB,GAAQF,IAErFvuB,GADA5I,GAAK,EAAIm3B,GAAYvB,IAAW4B,IAClBx3B,EAAIw3B,IAELJ,IAASxuB,GAAUA,EAAe6uB,GAAQrtB,EAAAA,GAChDqtB,EAAQ7uB,GClBjB7E,EAAQA,EAAQtD,EAAG,QAAU82B,OAAQ33B,KCDrC,IAAI0K,GAAM1L,KAAK0L,IAEfvG,EAAQA,EAAQtD,EAAG,QACjBi3B,MAAO,SAAeC,EAAQC,GAM5B,IALA,IAIItlB,EAAKulB,EAJLC,EAAM,EACNhyB,EAAI,EACJuD,EAAOvF,UAAUL,OACjBs0B,EAAO,EAEJjyB,EAAIuD,GAEL0uB,GADJzlB,EAAMhI,GAAIxG,UAAUgC,QAGlBgyB,EAAMA,GADND,EAAME,EAAOzlB,GACKulB,EAAM,EACxBE,EAAOzlB,GAGPwlB,GAFSxlB,EAAM,GACfulB,EAAMvlB,EAAMylB,GACCF,EACDvlB,EAEhB,OAAOylB,IAAS3tB,EAAAA,EAAWA,EAAAA,EAAW2tB,EAAOn5B,KAAKq3B,KAAK6B,MCpB3D,IAAIE,GAAQp5B,KAAKq5B,KAGjBl0B,EAAQA,EAAQtD,EAAIsD,EAAQQ,EAAI3E,EAAoB,WAClD,OAAgC,GAAzBo4B,GAAM,WAAY,IAA4B,GAAhBA,GAAMv0B,SACzC,QACFw0B,KAAM,SAAc7K,EAAG4D,GACrB,IACIkH,GAAM9K,EACN+K,GAAMnH,EACNoH,EAHS,MAGKF,EACdG,EAJS,MAIKF,EAClB,OAAO,EAAIC,EAAKC,IALH,MAKmBH,IAAO,IAAMG,EAAKD,GALrC,MAKoDD,IAAO,KAAO,KAAO,MCX1Fp0B,EAAQA,EAAQtD,EAAG,QAAUu1B,MAAOp2B,KCApCmE,EAAQA,EAAQtD,EAAG,QACjB63B,MAAO,SAAelL,GACpB,OAAOxuB,KAAK4L,IAAI4iB,GAAKxuB,KAAK25B,UCF9Bx0B,EAAQA,EAAQtD,EAAG,QACjB+3B,KAAM,SAAcpL,GAClB,OAAOxuB,KAAK4L,IAAI4iB,GAAKxuB,KAAK6L,OCF9B1G,EAAQA,EAAQtD,EAAG,QAAUk2B,KAAM/2B,KCAnC,IAAIyE,GAAMzF,KAAKyF,IAGfN,EAAQA,EAAQtD,EAAIsD,EAAQQ,EAAI3E,EAAoB,WAClD,OAA8B,QAAtBhB,KAAK65B,MAAM,SACjB,QACFA,KAAM,SAAcrL,GAClB,OAAOxuB,KAAK0L,IAAI8iB,GAAKA,GAAK,GACrB6J,GAAM7J,GAAK6J,IAAO7J,IAAM,GACxB/oB,GAAI+oB,EAAI,GAAK/oB,IAAK+oB,EAAI,KAAOxuB,KAAK+wB,EAAI,MCT/C,IAAItrB,GAAMzF,KAAKyF,IAEfN,EAAQA,EAAQtD,EAAG,QACjBi4B,KAAM,SAActL,GAClB,IAAIptB,EAAIi3B,GAAM7J,GAAKA,GACfzpB,EAAIszB,IAAO7J,GACf,OAAOptB,GAAKoK,EAAAA,EAAW,EAAIzG,GAAKyG,EAAAA,GAAY,GAAKpK,EAAI2D,IAAMU,GAAI+oB,GAAK/oB,IAAK+oB,OCN7ErpB,EAAQA,EAAQtD,EAAG,QACjBk4B,MAAO,SAAev5B,GACpB,OAAQA,EAAK,EAAIR,KAAK2H,MAAQ3H,KAAK0H,MAAMlH,MCF7C,IAAIw5B,GAAYh5B,GAA6B,GAE7CmE,EAAQA,EAAQ9C,EAAG,SACjBic,SAAU,SAAkBlV,GAC1B,OAAO4wB,GAAUv1B,KAAM2E,EAAIlE,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MAIrElC,GAAiC,YCTjC,IAAIqjB,GAAS/jB,GAAyBmC,EACtC82B,GAAiB,SAAUC,GACzB,OAAO,SAAU15B,GAOf,IANA,IAKI0C,EALAd,EAAIkH,EAAU9I,GACdgO,EAAOwD,GAAQ5P,GACfyC,EAAS2J,EAAK3J,OACdqC,EAAI,EACJ8C,KAEGnF,EAASqC,GAAO6d,GAAO9iB,KAAKG,EAAGc,EAAMsL,EAAKtH,OAC/C8C,EAAOC,KAAKiwB,GAAah3B,EAAKd,EAAEc,IAAQd,EAAEc,IAC1C,OAAO8G,ICXTmwB,GAAUn5B,IAA8B,GAE5CmE,EAAQA,EAAQtD,EAAG,UACjBwU,OAAQ,SAAgB7V,GACtB,OAAO25B,GAAQ35B,MCJnB,IAAI0V,GAAWlV,IAA8B,GAE7CmE,EAAQA,EAAQtD,EAAG,UACjBuU,QAAS,SAAiB5V,GACxB,OAAO0V,GAAS1V,MCCpB2E,EAAQA,EAAQtD,EAAG,UACjBu4B,0BAA2B,SAAmCn3B,GAO5D,IANA,IAKIC,EAAKoc,EALLld,EAAIkH,EAAUrG,GACdo3B,EAAU5iB,GAAKtU,EACfqL,EAAOmZ,GAAQvlB,GACf4H,KACA9C,EAAI,EAEDsH,EAAK3J,OAASqC,QAENtD,KADb0b,EAAO+a,EAAQj4B,EAAGc,EAAMsL,EAAKtH,QACLsvB,GAAexsB,EAAQ9G,EAAKoc,GAEtD,OAAOtV,KCdX,IAAAswB,GAAiB,SAAU11B,EAAM21B,EAAWC,EAAYC,GACtD,IAAI54B,EAAI0C,OAAOsE,EAAQjE,IACnB81B,EAAe74B,EAAEgD,OACjB81B,OAAyB/2B,IAAf42B,EAA2B,IAAMj2B,OAAOi2B,GAClDI,EAAezyB,EAASoyB,GAC5B,GAAIK,GAAgBF,GAA2B,IAAXC,EAAe,OAAO94B,EAC1D,IAAIg5B,EAAUD,EAAeF,EACzBI,EAAexH,GAAOrxB,KAAK04B,EAAS36B,KAAK0H,KAAKmzB,EAAUF,EAAQ91B,SAEpE,OADIi2B,EAAaj2B,OAASg2B,IAASC,EAAeA,EAAaxyB,MAAM,EAAGuyB,IACjEJ,EAAOK,EAAej5B,EAAIA,EAAIi5B,GCbnCtP,GAAY5rB,EAAO4rB,UAEvBuP,GAAiBvP,IAAaA,GAAUwP,WAAa,GCIrD71B,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAI,oCAAoC4d,KAAKyX,IAAY,UACnFC,SAAU,SAAkBV,GAC1B,OAAOW,GAAKz2B,KAAM81B,EAAWr1B,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,GAAW,MCFlFuB,EAAQA,EAAQ9C,EAAI8C,EAAQQ,EAAI,oCAAoC4d,KAAKyX,IAAY,UACnFG,OAAQ,SAAgBZ,GACtB,OAAOW,GAAKz2B,KAAM81B,EAAWr1B,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,GAAW,MCLlF,IAAI0E,MAAWA,MACX8yB,GAAO,WAAW7X,KAAKyX,IACvBzK,GAAO,SAAUriB,GACnB,OAAO,SAAUpM,EAAIu5B,GACnB,IAAIC,EAAYp2B,UAAUL,OAAS,EAC/BwhB,IAAOiV,GAAYhzB,GAAMrG,KAAKiD,UAAW,GAC7C,OAAOgJ,EAAIotB,EAAY,YAEP,mBAANx5B,EAAmBA,EAAK5B,SAAS4B,IAAKmD,MAAMR,KAAM4hB,IACxDvkB,EAAIu5B,KAGZl2B,EAAQA,EAAQU,EAAIV,EAAQc,EAAId,EAAQQ,EAAIy1B,IAC1CzR,WAAY4G,GAAK3wB,EAAO+pB,YACxB4R,YAAahL,GAAK3wB,EAAO27B,eChB3Bp2B,EAAQA,EAAQU,EAAIV,EAAQc,GAC1BqiB,aAAckT,GAAMttB,IACpBsa,eAAgBgT,GAAM3Y,QCyCxB,IAtCA,IAAItR,GAAWiI,GAAI,YACfiiB,GAAgBjiB,GAAI,eACpBkiB,GAAchqB,GAAUnF,MAExBovB,IACFC,aAAa,EACbC,qBAAqB,EACrBC,cAAc,EACdC,gBAAgB,EAChBC,aAAa,EACbC,eAAe,EACfC,cAAc,EACdC,sBAAsB,EACtBC,UAAU,EACVC,mBAAmB,EACnBC,gBAAgB,EAChBC,iBAAiB,EACjBC,mBAAmB,EACnBC,WAAW,EACXC,eAAe,EACfC,cAAc,EACdC,UAAU,EACVC,kBAAkB,EAClBC,QAAQ,EACRC,aAAa,EACbC,eAAe,EACfC,eAAe,EACfC,gBAAgB,EAChBC,cAAc,EACdC,eAAe,EACfC,kBAAkB,EAClBC,kBAAkB,EAClBC,gBAAgB,EAChBC,kBAAkB,EAClBC,eAAe,EACfC,WAAW,GAGJC,GAAc3rB,GAAQ2pB,IAAez0B,GAAI,EAAGA,GAAIy2B,GAAY94B,OAAQqC,KAAK,CAChF,IAIIhE,GAJA6R,GAAO4oB,GAAYz2B,IACnB02B,GAAWjC,GAAa5mB,IACxB8oB,GAAaj+B,EAAOmV,IACpBc,GAAQgoB,IAAcA,GAAWr5B,UAErC,GAAIqR,KACGA,GAAMtE,KAAWlN,EAAKwR,GAAOtE,GAAUmqB,IACvC7lB,GAAM4lB,KAAgBp3B,EAAKwR,GAAO4lB,GAAe1mB,IACtDrD,GAAUqD,IAAQ2mB,GACdkC,IAAU,IAAK16B,MAAOgc,GAAiBrJ,GAAM3S,KAAMmD,EAASwP,GAAO3S,GAAKgc,GAAWhc,KAAM,kBC7ChG,SAAUtD,GAGT,IAEIgE,EAFAk6B,EAAK78B,OAAOuD,UACZu5B,EAASD,EAAGz6B,eAEZ4rB,EAA4B,mBAAXrkB,OAAwBA,UACzCozB,EAAiB/O,EAAQ3R,UAAY,aACrC2gB,EAAsBhP,EAAQiP,eAAiB,kBAC/CC,EAAoBlP,EAAQmP,aAAe,gBAG3CC,EAAUz+B,EAAO0+B,mBACrB,GAAID,EAIAx+B,EAAAC,QAAiBu+B,MAJrB,EAaAA,EAAUz+B,EAAO0+B,mBAAqBz+B,EAAkBC,SAchDywB,KAAOA,EAoBf,IAAIgO,EAAyB,iBACzBC,EAAyB,iBACzBC,EAAoB,YACpBC,EAAoB,YAIpBC,KAYA9pB,KACJA,EAAkBmpB,GAAkB,WAClC,OAAOv5B,MAGT,IAAI+iB,EAAWvmB,OAAOmS,eAClBwrB,EAA0BpX,GAAYA,EAASA,EAASnR,QACxDuoB,GACAA,IAA4Bd,GAC5BC,EAAO97B,KAAK28B,EAAyBZ,KAGvCnpB,EAAoB+pB,GAGtB,IAAIC,EAAKC,EAA2Bt6B,UAClCu6B,EAAUv6B,UAAYvD,OAAO+R,OAAO6B,GACtCmqB,EAAkBx6B,UAAYq6B,EAAGnwB,YAAcowB,EAC/CA,EAA2BpwB,YAAcswB,EACzCF,EAA2BX,GACzBa,EAAkBC,YAAc,oBAYlCZ,EAAQa,oBAAsB,SAASC,GACrC,IAAIC,EAAyB,mBAAXD,GAAyBA,EAAOzwB,YAClD,QAAO0wB,IACHA,IAASJ,GAG2B,uBAAnCI,EAAKH,aAAeG,EAAK/5B,QAIhCg5B,EAAQgB,KAAO,SAASF,GAUtB,OATIl+B,OAAOqiB,eACTriB,OAAOqiB,eAAe6b,EAAQL,IAE9BK,EAAO1b,UAAYqb,EACbX,KAAqBgB,IACzBA,EAAOhB,GAAqB,sBAGhCgB,EAAO36B,UAAYvD,OAAO+R,OAAO6rB,GAC1BM,GAOTd,EAAQiB,MAAQ,SAAS5rB,GACvB,OAAS6rB,QAAS7rB,IAkFpB8rB,EAAsBC,EAAcj7B,WACpCi7B,EAAcj7B,UAAUy5B,GAAuB,WAC7C,OAAOx5B,MAET45B,EAAQoB,cAAgBA,EAKxBpB,EAAQqB,MAAQ,SAASC,EAASC,EAAS3/B,EAAM4/B,GAC/C,IAAI3oB,EAAO,IAAIuoB,EACblP,EAAKoP,EAASC,EAAS3/B,EAAM4/B,IAG/B,OAAOxB,EAAQa,oBAAoBU,GAC/B1oB,EACAA,EAAKlC,OAAO0W,KAAK,SAAS1hB,GACxB,OAAOA,EAAO4K,KAAO5K,EAAOtH,MAAQwU,EAAKlC,UAsKjDwqB,EAAsBX,GAEtBA,EAAGV,GAAqB,YAOxBU,EAAGb,GAAkB,WACnB,OAAOv5B,MAGTo6B,EAAG78B,SAAW,WACZ,MAAO,sBAkCTq8B,EAAQ7vB,KAAO,SAASvL,GACtB,IAAIuL,KACJ,IAAK,IAAItL,KAAOD,EACduL,EAAKvE,KAAK/G,GAMZ,OAJAsL,EAAKP,UAIE,SAAS+G,IACd,KAAOxG,EAAK3J,QAAQ,CAClB,IAAI3B,EAAMsL,EAAKsxB,MACf,GAAI58B,KAAOD,EAGT,OAFA+R,EAAKtS,MAAQQ,EACb8R,EAAKJ,MAAO,EACLI,EAQX,OADAA,EAAKJ,MAAO,EACLI,IAsCXqpB,EAAQhoB,OAASA,EAMjB0pB,EAAQv7B,WACNkK,YAAaqxB,EAEbC,MAAO,SAASC,GAcd,GAbAx7B,KAAKwe,KAAO,EACZxe,KAAKuQ,KAAO,EAGZvQ,KAAKy7B,KAAOz7B,KAAK07B,MAAQv8B,EACzBa,KAAKmQ,MAAO,EACZnQ,KAAK27B,SAAW,KAEhB37B,KAAKohB,OAAS,OACdphB,KAAKiP,IAAM9P,EAEXa,KAAK47B,WAAWliB,QAAQmiB,IAEnBL,EACH,IAAK,IAAI56B,KAAQZ,KAEQ,MAAnBY,EAAK8pB,OAAO,IACZ4O,EAAO97B,KAAKwC,KAAMY,KACjBwC,OAAOxC,EAAKiD,MAAM,MACrB7D,KAAKY,GAAQzB,IAMrB28B,KAAM,WACJ97B,KAAKmQ,MAAO,EAEZ,IACI4rB,EADY/7B,KAAK47B,WAAW,GACLI,WAC3B,GAAwB,UAApBD,EAAWp7B,KACb,MAAMo7B,EAAW9sB,IAGnB,OAAOjP,KAAKi8B,MAGdC,kBAAmB,SAASC,GAC1B,GAAIn8B,KAAKmQ,KACP,MAAMgsB,EAGR,IAAI5M,EAAUvvB,KACd,SAASo8B,EAAOC,EAAKC,GAYnB,OAXAC,EAAO57B,KAAO,QACd47B,EAAOttB,IAAMktB,EACb5M,EAAQhf,KAAO8rB,EAEXC,IAGF/M,EAAQnO,OAAS,OACjBmO,EAAQtgB,IAAM9P,KAGNm9B,EAGZ,IAAK,IAAI75B,EAAIzC,KAAK47B,WAAWx7B,OAAS,EAAGqC,GAAK,IAAKA,EAAG,CACpD,IAAIkb,EAAQ3d,KAAK47B,WAAWn5B,GACxB85B,EAAS5e,EAAMqe,WAEnB,GAAqB,SAAjBre,EAAM6e,OAIR,OAAOJ,EAAO,OAGhB,GAAIze,EAAM6e,QAAUx8B,KAAKwe,KAAM,CAC7B,IAAIie,EAAWnD,EAAO97B,KAAKmgB,EAAO,YAC9B+e,EAAapD,EAAO97B,KAAKmgB,EAAO,cAEpC,GAAI8e,GAAYC,EAAY,CAC1B,GAAI18B,KAAKwe,KAAOb,EAAMgf,SACpB,OAAOP,EAAOze,EAAMgf,UAAU,GACzB,GAAI38B,KAAKwe,KAAOb,EAAMif,WAC3B,OAAOR,EAAOze,EAAMif,iBAGjB,GAAIH,GACT,GAAIz8B,KAAKwe,KAAOb,EAAMgf,SACpB,OAAOP,EAAOze,EAAMgf,UAAU,OAG3B,CAAA,IAAID,EAMT,MAAM,IAAIG,MAAM,0CALhB,GAAI78B,KAAKwe,KAAOb,EAAMif,WACpB,OAAOR,EAAOze,EAAMif,gBAU9BE,OAAQ,SAASn8B,EAAMsO,GACrB,IAAK,IAAIxM,EAAIzC,KAAK47B,WAAWx7B,OAAS,EAAGqC,GAAK,IAAKA,EAAG,CACpD,IAAIkb,EAAQ3d,KAAK47B,WAAWn5B,GAC5B,GAAIkb,EAAM6e,QAAUx8B,KAAKwe,MACrB8a,EAAO97B,KAAKmgB,EAAO,eACnB3d,KAAKwe,KAAOb,EAAMif,WAAY,CAChC,IAAIG,EAAepf,EACnB,OAIAof,IACU,UAATp8B,GACS,aAATA,IACDo8B,EAAaP,QAAUvtB,GACvBA,GAAO8tB,EAAaH,aAGtBG,EAAe,MAGjB,IAAIR,EAASQ,EAAeA,EAAaf,cAIzC,OAHAO,EAAO57B,KAAOA,EACd47B,EAAOttB,IAAMA,EAET8tB,GACF/8B,KAAKohB,OAAS,OACdphB,KAAKuQ,KAAOwsB,EAAaH,WAClB1C,GAGFl6B,KAAKg9B,SAAST,IAGvBS,SAAU,SAAST,EAAQU,GACzB,GAAoB,UAAhBV,EAAO57B,KACT,MAAM47B,EAAOttB,IAcf,MAXoB,UAAhBstB,EAAO57B,MACS,aAAhB47B,EAAO57B,KACTX,KAAKuQ,KAAOgsB,EAAOttB,IACM,WAAhBstB,EAAO57B,MAChBX,KAAKi8B,KAAOj8B,KAAKiP,IAAMstB,EAAOttB,IAC9BjP,KAAKohB,OAAS,SACdphB,KAAKuQ,KAAO,OACa,WAAhBgsB,EAAO57B,MAAqBs8B,IACrCj9B,KAAKuQ,KAAO0sB,GAGP/C,GAGTgD,OAAQ,SAASN,GACf,IAAK,IAAIn6B,EAAIzC,KAAK47B,WAAWx7B,OAAS,EAAGqC,GAAK,IAAKA,EAAG,CACpD,IAAIkb,EAAQ3d,KAAK47B,WAAWn5B,GAC5B,GAAIkb,EAAMif,aAAeA,EAGvB,OAFA58B,KAAKg9B,SAASrf,EAAMqe,WAAYre,EAAMsf,UACtCpB,EAAcle,GACPuc,IAKbrQ,MAAS,SAAS2S,GAChB,IAAK,IAAI/5B,EAAIzC,KAAK47B,WAAWx7B,OAAS,EAAGqC,GAAK,IAAKA,EAAG,CACpD,IAAIkb,EAAQ3d,KAAK47B,WAAWn5B,GAC5B,GAAIkb,EAAM6e,SAAWA,EAAQ,CAC3B,IAAID,EAAS5e,EAAMqe,WACnB,GAAoB,UAAhBO,EAAO57B,KAAkB,CAC3B,IAAIw8B,EAASZ,EAAOttB,IACpB4sB,EAAcle,GAEhB,OAAOwf,GAMX,MAAM,IAAIN,MAAM,0BAGlBO,cAAe,SAASzgB,EAAU0gB,EAAYC,GAa5C,OAZAt9B,KAAK27B,UACH9iB,SAAUjH,EAAO+K,GACjB0gB,WAAYA,EACZC,QAASA,GAGS,SAAhBt9B,KAAKohB,SAGPphB,KAAKiP,IAAM9P,GAGN+6B,IA/qBX,SAASpO,EAAKoP,EAASC,EAAS3/B,EAAM4/B,GAEpC,IAAImC,EAAiBpC,GAAWA,EAAQp7B,qBAAqBu6B,EAAYa,EAAUb,EAC/EkD,EAAYhhC,OAAO+R,OAAOgvB,EAAex9B,WACzCwvB,EAAU,IAAI+L,EAAQF,OAM1B,OAFAoC,EAAU7b,QA8MZ,SAA0BuZ,EAAS1/B,EAAM+zB,GACvC,IAAIkO,EAAQ3D,EAEZ,OAAO,SAAgB1Y,EAAQnS,GAC7B,GAAIwuB,IAAUzD,EACZ,MAAM,IAAI6C,MAAM,gCAGlB,GAAIY,IAAUxD,EAAmB,CAC/B,GAAe,UAAX7Y,EACF,MAAMnS,EAKR,OAAOyuB,IAMT,IAHAnO,EAAQnO,OAASA,EACjBmO,EAAQtgB,IAAMA,IAED,CACX,IAAI0sB,EAAWpM,EAAQoM,SACvB,GAAIA,EAAU,CACZ,IAAIgC,EAAiBC,EAAoBjC,EAAUpM,GACnD,GAAIoO,EAAgB,CAClB,GAAIA,IAAmBzD,EAAkB,SACzC,OAAOyD,GAIX,GAAuB,SAAnBpO,EAAQnO,OAGVmO,EAAQkM,KAAOlM,EAAQmM,MAAQnM,EAAQtgB,SAElC,GAAuB,UAAnBsgB,EAAQnO,OAAoB,CACrC,GAAIqc,IAAU3D,EAEZ,MADA2D,EAAQxD,EACF1K,EAAQtgB,IAGhBsgB,EAAQ2M,kBAAkB3M,EAAQtgB,SAEN,WAAnBsgB,EAAQnO,QACjBmO,EAAQuN,OAAO,SAAUvN,EAAQtgB,KAGnCwuB,EAAQzD,EAER,IAAIuC,EAASsB,EAAS3C,EAAS1/B,EAAM+zB,GACrC,GAAoB,WAAhBgN,EAAO57B,KAAmB,CAO5B,GAJA88B,EAAQlO,EAAQpf,KACZ8pB,EACAF,EAEAwC,EAAOttB,MAAQirB,EACjB,SAGF,OACEj8B,MAAOs+B,EAAOttB,IACdkB,KAAMof,EAAQpf,MAGS,UAAhBosB,EAAO57B,OAChB88B,EAAQxD,EAGR1K,EAAQnO,OAAS,QACjBmO,EAAQtgB,IAAMstB,EAAOttB,OAtRP6uB,CAAiB5C,EAAS1/B,EAAM+zB,GAE7CiO,EAcT,SAASK,EAASxgC,EAAI0gC,EAAK9uB,GACzB,IACE,OAAStO,KAAM,SAAUsO,IAAK5R,EAAGG,KAAKugC,EAAK9uB,IAC3C,MAAOya,GACP,OAAS/oB,KAAM,QAASsO,IAAKya,IAiBjC,SAAS4Q,KACT,SAASC,KACT,SAASF,KA4BT,SAASU,EAAsBh7B,IAC5B,OAAQ,QAAS,UAAU2Z,QAAQ,SAAS0H,GAC3CrhB,EAAUqhB,GAAU,SAASnS,GAC3B,OAAOjP,KAAK2hB,QAAQP,EAAQnS,MAoClC,SAAS+rB,EAAcwC,GACrB,SAASpb,EAAOhB,EAAQnS,EAAK0W,EAASC,GACpC,IAAI2W,EAASsB,EAASL,EAAUpc,GAASoc,EAAWvuB,GACpD,GAAoB,UAAhBstB,EAAO57B,KAEJ,CACL,IAAI4E,EAASg3B,EAAOttB,IAChBhR,EAAQsH,EAAOtH,MACnB,OAAIA,GACiB,iBAAVA,GACPq7B,EAAO97B,KAAKS,EAAO,WACdunB,QAAQG,QAAQ1nB,EAAM68B,SAAS7T,KAAK,SAAShpB,GAClDmkB,EAAO,OAAQnkB,EAAO0nB,EAASC,IAC9B,SAAS8D,GACVtH,EAAO,QAASsH,EAAK/D,EAASC,KAI3BJ,QAAQG,QAAQ1nB,GAAOgpB,KAAK,SAAS+W,GAgB1Cz4B,EAAOtH,MAAQ+/B,EACfrY,EAAQpgB,IACPqgB,GAhCHA,EAAO2W,EAAOttB,KAwClB,IAAIgvB,EAJ0B,iBAAnB9iC,EAAOwoB,SAAwBxoB,EAAOwoB,QAAQiD,SACvDxE,EAASjnB,EAAOwoB,QAAQiD,OAAO5E,KAAKI,IAmCtCpiB,KAAK2hB,QA9BL,SAAiBP,EAAQnS,GACvB,SAASivB,IACP,OAAO,IAAI1Y,QAAQ,SAASG,EAASC,GACnCxD,EAAOhB,EAAQnS,EAAK0W,EAASC,KAIjC,OAAOqY,EAaLA,EAAkBA,EAAgBhX,KAChCiX,EAGAA,GACEA,KA+GV,SAASN,EAAoBjC,EAAUpM,GACrC,IAAInO,EAASua,EAAS9iB,SAAS0W,EAAQnO,QACvC,GAAIA,IAAWjiB,EAAW,CAKxB,GAFAowB,EAAQoM,SAAW,KAEI,UAAnBpM,EAAQnO,OAAoB,CAC9B,GAAIua,EAAS9iB,SAASslB,SAGpB5O,EAAQnO,OAAS,SACjBmO,EAAQtgB,IAAM9P,EACdy+B,EAAoBjC,EAAUpM,GAEP,UAAnBA,EAAQnO,QAGV,OAAO8Y,EAIX3K,EAAQnO,OAAS,QACjBmO,EAAQtgB,IAAM,IAAI/S,UAChB,kDAGJ,OAAOg+B,EAGT,IAAIqC,EAASsB,EAASzc,EAAQua,EAAS9iB,SAAU0W,EAAQtgB,KAEzD,GAAoB,UAAhBstB,EAAO57B,KAIT,OAHA4uB,EAAQnO,OAAS,QACjBmO,EAAQtgB,IAAMstB,EAAOttB,IACrBsgB,EAAQoM,SAAW,KACZzB,EAGT,IAAIkE,EAAO7B,EAAOttB,IAElB,OAAMmvB,EAOFA,EAAKjuB,MAGPof,EAAQoM,EAAS0B,YAAce,EAAKngC,MAGpCsxB,EAAQhf,KAAOorB,EAAS2B,QAQD,WAAnB/N,EAAQnO,SACVmO,EAAQnO,OAAS,OACjBmO,EAAQtgB,IAAM9P,GAUlBowB,EAAQoM,SAAW,KACZzB,GANEkE,GA3BP7O,EAAQnO,OAAS,QACjBmO,EAAQtgB,IAAM,IAAI/S,UAAU,oCAC5BqzB,EAAQoM,SAAW,KACZzB,GAoDX,SAASmE,EAAaC,GACpB,IAAI3gB,GAAU6e,OAAQ8B,EAAK,IAEvB,KAAKA,IACP3gB,EAAMgf,SAAW2B,EAAK,IAGpB,KAAKA,IACP3gB,EAAMif,WAAa0B,EAAK,GACxB3gB,EAAMsf,SAAWqB,EAAK,IAGxBt+B,KAAK47B,WAAWp2B,KAAKmY,GAGvB,SAASke,EAAcle,GACrB,IAAI4e,EAAS5e,EAAMqe,eACnBO,EAAO57B,KAAO,gBACP47B,EAAOttB,IACd0O,EAAMqe,WAAaO,EAGrB,SAASjB,EAAQF,GAIfp7B,KAAK47B,aAAgBY,OAAQ,SAC7BpB,EAAY1hB,QAAQ2kB,EAAcr+B,MAClCA,KAAKu7B,OAAM,GA8Bb,SAAS3pB,EAAO+K,GACd,GAAIA,EAAU,CACZ,IAAI4hB,EAAiB5hB,EAAS4c,GAC9B,GAAIgF,EACF,OAAOA,EAAe/gC,KAAKmf,GAG7B,GAA6B,mBAAlBA,EAASpM,KAClB,OAAOoM,EAGT,IAAKvZ,MAAMuZ,EAASvc,QAAS,CAC3B,IAAIqC,GAAK,EAAG8N,EAAO,SAASA,IAC1B,OAAS9N,EAAIka,EAASvc,QACpB,GAAIk5B,EAAO97B,KAAKmf,EAAUla,GAGxB,OAFA8N,EAAKtS,MAAQ0e,EAASla,GACtB8N,EAAKJ,MAAO,EACLI,EAOX,OAHAA,EAAKtS,MAAQkB,EACboR,EAAKJ,MAAO,EAELI,GAGT,OAAOA,EAAKA,KAAOA,GAKvB,OAASA,KAAMmtB,GAIjB,SAASA,IACP,OAASz/B,MAAOkB,EAAWgR,MAAM,IApgBpC,CAktBmB,iBAAXhV,EAAsBA,EACX,iBAAXG,OAAsBA,OACb,iBAATE,KAAoBA,KAAOwE,KCxtBpC,IACI,IAAIw+B,GAAK,IAAIljC,OAAOmjC,YAAY,QAEhC,GADAD,GAAGE,kBACyB,IAAxBF,GAAGG,iBAGH,MAAM,IAAI9B,MAAM,6BAEtB,MAAMxgC,GACN,IAAIoiC,GAAc,SAASna,EAAOsa,GAChC,IAAIC,EAAKC,EAsBT,OArBAF,EAASA,IACPG,SAAS,EACTC,YAAY,EACZC,YAAQ9/B,IAGV0/B,EAAMjiC,SAASsiC,YAAY,gBACvBC,gBAAgB7a,EAAOsa,EAAOG,QAASH,EAAOI,WAAYJ,EAAOK,QACrEH,EAAcD,EAAIH,eAClBG,EAAIH,eAAiB,WACnBI,EAAYthC,KAAKwC,MACjB,IACExD,OAAOC,eAAeuD,KAAM,oBAC1BtD,IAAK,WACH,OAAO,KAGX,MAAML,GACN2D,KAAK2+B,kBAAmB,IAGrBE,GAGTJ,GAAY1+B,UAAYzE,OAAO8jC,MAAMr/B,UACrCzE,OAAOmjC,YAAcA,IC1CvB,SAAUtjC,GAOR,IASIkkC,EAT6B,WAC/B,IACE,QAASl5B,OAAO0S,SAChB,MAAMsQ,GACN,OAAO,GAKamW,GAEpBC,EAAiB,SAASC,GAC5B,IAAI3mB,GACFtI,KAAM,WACJ,IAAItS,EAAQuhC,EAAMC,QAClB,OAAStvB,UAAgB,IAAVlS,EAAkBA,MAAOA,KAU5C,OANGohC,IACDxmB,EAAS1S,OAAO0S,UAAY,WAC1B,OAAOA,IAIJA,GAOL6mB,EAAiB,SAASzhC,GAC5B,OAAO0hC,mBAAmB1hC,GAAO0zB,QAAQ,OAAQ,MAG/CiO,EAAmB,SAAS3hC,GAC9B,OAAO4hC,mBAAmB5hC,GAAO0zB,QAAQ,MAAO,MAyG7C,oBAAqBx2B,GAAuD,QAA3C,IAAI2kC,gBAAgB,QAAQviC,YAtGrC,WAE3B,IAAIuiC,EAAkB,SAAS5Q,GAG7B,GAFA1yB,OAAOC,eAAeuD,KAAM,YAAc/B,WAEf,iBAAjBixB,GACR,GAAoB,KAAjBA,EAID,IAFA,IACI6Q,EADAnd,GADJsM,EAAeA,EAAayC,QAAQ,MAAO,KACbpyB,MAAM,KAE5BkD,EAAI,EAAGA,EAAImgB,EAAWxiB,OAAQqC,IACpCs9B,EAAYnd,EAAWngB,GAAGlD,MAAM,KAChCS,KAAKggC,OACHJ,EAAiBG,EAAU,IAC1BA,EAAU3/B,OAAS,EAAKw/B,EAAiBG,EAAU,IAAM,SAI3D,GAAG7Q,aAAwB4Q,EAAiB,CACjD,IAAIG,EAAQjgC,KACZkvB,EAAaxV,QAAQ,SAASzb,EAAO2C,GACnCq/B,EAAMD,OAAO/hC,EAAO2C,OAKtBwQ,EAAQ0uB,EAAgB//B,UAE5BqR,EAAM4uB,OAAS,SAASp/B,EAAM3C,GACzB2C,KAAQZ,KAAKkgC,SACdlgC,KAAKkgC,SAASt/B,GAAM4E,KAAKvH,EAAMV,YAE/ByC,KAAKkgC,SAASt/B,IAAS3C,EAAMV,aAIjC6T,EAAMmN,OAAS,SAAS3d,UACfZ,KAAKkgC,SAASt/B,IAGvBwQ,EAAM1U,IAAM,SAASkE,GACnB,OAAQA,KAAQZ,KAAKkgC,SAAYlgC,KAAKkgC,SAASt/B,GAAM,GAAK,MAG5DwQ,EAAM+uB,OAAS,SAASv/B,GACtB,OAAQA,KAAQZ,KAAKkgC,SAAYlgC,KAAKkgC,SAASt/B,GAAMiD,MAAM,OAG7DuN,EAAMzR,IAAM,SAASiB,GACnB,OAAQA,KAAQZ,KAAKkgC,UAGvB9uB,EAAM3H,IAAM,SAAS7I,EAAM3C,GACzB+B,KAAKkgC,SAASt/B,IAAS3C,EAAMV,aAG/B6T,EAAMsI,QAAU,SAAS0mB,EAAUC,GACjC,IAAI1uB,EACJ,IAAI,IAAI/Q,KAAQZ,KAAKkgC,SACnB,GAAGlgC,KAAKkgC,SAASthC,eAAegC,GAAO,CACrC+Q,EAAU3R,KAAKkgC,SAASt/B,GACxB,IAAI,IAAI6B,EAAI,EAAGA,EAAIkP,EAAQvR,OAAQqC,IACjC29B,EAAS5iC,KAAK6iC,EAAS1uB,EAAQlP,GAAI7B,EAAMZ,QAMjDoR,EAAMrH,KAAO,WACX,IAAIy1B,KAEJ,OADAx/B,KAAK0Z,QAAQ,SAASzb,EAAO2C,GAAQ4+B,EAAMh6B,KAAK5E,KACzC2+B,EAAeC,IAGxBpuB,EAAMQ,OAAS,WACb,IAAI4tB,KAEJ,OADAx/B,KAAK0Z,QAAQ,SAASzb,GAASuhC,EAAMh6B,KAAKvH,KACnCshC,EAAeC,IAGxBpuB,EAAMO,QAAU,WACd,IAAI6tB,KAEJ,OADAx/B,KAAK0Z,QAAQ,SAASzb,EAAO2C,GAAQ4+B,EAAMh6B,MAAM5E,EAAM3C,MAChDshC,EAAeC,IAGrBH,IACDjuB,EAAMjL,OAAO0S,UAAYzH,EAAMO,SAGjCP,EAAM7T,SAAW,WACf,IAAI2xB,EAAe,GAKnB,OAJAlvB,KAAK0Z,QAAQ,SAASzb,EAAO2C,GACxBsuB,EAAa9uB,OAAS,IAAG8uB,GAAe,KAC3CA,GAAgBwQ,EAAe9+B,GAAQ,IAAM8+B,EAAezhC,KAEvDixB,GAGT/zB,EAAO2kC,gBAAkBA,EAIzBQ,GAtJJ,MA4JqB,IAAXnlC,EAA0BA,EACV,oBAAXG,OAA0BA,OACjB,oBAATE,KAAwBA,KAAOwE,GAG9C,SAAU7E,GAqKR,GA9J4B,WAC1B,IACE,IAAIolC,EAAI,IAAIC,IAAI,IAAK,YAErB,OADAD,EAAEE,SAAW,QACM,mBAAXF,EAAEG,MAA8BH,EAAEI,aAC1C,MAAMtkC,GACN,OAAO,GAoJPukC,IA/Ic,WAChB,IAAIC,EAAO1lC,EAAOqlC,IAEdA,EAAM,SAASM,EAAKC,GACJ,iBAARD,IAAkBA,EAAMhhC,OAAOghC,IAEzC,IAAIE,EAAMpkC,SAASqkC,eAAeC,mBAAmB,IAErD,GADA5lC,OAAO0lC,IAAMA,EACVD,EAAM,CACP,IAAII,EAAcH,EAAIlkC,cAAc,QACpCqkC,EAAYT,KAAOK,EACnBC,EAAIza,KAAKvY,YAAYmzB,GAGvB,IAAIC,EAAgBJ,EAAIlkC,cAAc,KAKtC,GAJAskC,EAAcV,KAAOI,EACrBE,EAAIK,KAAKrzB,YAAYozB,GACrBA,EAAcV,KAAOU,EAAcV,KAEL,MAA3BU,EAAcE,WAAqB,IAAIxiB,KAAKsiB,EAAcV,MAC3D,MAAM,IAAIxkC,UAAU,eAGtBM,OAAOC,eAAeuD,KAAM,kBAC1B/B,MAAOmjC,KAIPhwB,EAAQovB,EAAIzgC,WAcf,OAAQ,OAAQ,WAAY,OAAQ,WAAY,UAChD2Z,QAAQ,SAAS6nB,IAbe,SAASA,GACxC/kC,OAAOC,eAAe2U,EAAOmwB,GAC3B7kC,IAAK,WACH,OAAOsD,KAAKwhC,eAAeD,IAE7B93B,IAAK,SAASxL,GACZ+B,KAAKwhC,eAAeD,GAAiBtjC,GAEvCG,YAAY,IAMdqjC,CAA2BF,KAG7B/kC,OAAO6Q,iBAAiB+D,GAEtB7T,UACEb,IAAK,WACH,IAAIujC,EAAQjgC,KACZ,OAAO,WACL,OAAOigC,EAAMS,QAKnBA,MACEhkC,IAAK,WACH,OAAOsD,KAAKwhC,eAAed,KAAK/O,QAAQ,MAAM,KAEhDloB,IAAK,SAASxL,GACZ+B,KAAKwhC,eAAed,KAAOziC,GAE7BG,YAAY,GAGdqiC,UACE/jC,IAAK,WACH,OAAOsD,KAAKwhC,eAAef,SAAS9O,QAAQ,SAAS,MAEvDloB,IAAK,SAASxL,GACZ+B,KAAKwhC,eAAef,SAAWxiC,GAEjCG,YAAY,GAGdsjC,QACEhlC,IAAK,WAEH,IAAIilC,GAAgBC,QAAS,GAAIC,SAAU,IAAKC,OAAQ,IAAI9hC,KAAKwhC,eAAeF,UAI5ES,EAAkB/hC,KAAKwhC,eAAe9d,MAAQie,GACnB,KAA7B3hC,KAAKwhC,eAAe9d,KAEtB,OAAO1jB,KAAKwhC,eAAeF,SACzB,KACAthC,KAAKwhC,eAAeQ,UACnBD,EAAmB,IAAM/hC,KAAKwhC,eAAe9d,KAAQ,KAE1DtlB,YAAY,GAGd6jC,UACEvlC,IAAK,WACH,MAAO,IAET+M,IAAK,SAASxL,KAEdG,YAAY,GAGd8jC,UACExlC,IAAK,WACH,MAAO,IAET+M,IAAK,SAASxL,KAEdG,YAAY,GAGduiC,cACEjkC,IAAK,WACH,IAAIikC,EAAe,IAAIb,gBAAgB9/B,KAAKwvB,QACxCyQ,EAAQjgC,KAQZ,OAPC,SAAU,SAAU,OAAO0Z,QAAQ,SAASyoB,GAC3C,IAAI/gB,EAASuf,EAAawB,GAC1BxB,EAAawB,GAAc,WACzB/gB,EAAO5gB,MAAMmgC,EAAclgC,WAC3Bw/B,EAAMzQ,OAASmR,EAAapjC,cAGzBojC,GAETviC,YAAY,KAIhBoiC,EAAI4B,gBAAkB,SAASC,GAC7B,OAAOxB,EAAKuB,gBAAgB5hC,MAAMqgC,EAAMpgC,YAG1C+/B,EAAI8B,gBAAkB,SAASxB,GAC7B,OAAOD,EAAKyB,gBAAgB9hC,MAAMqgC,EAAMpgC,YAG1CtF,EAAOqlC,IAAMA,EAKb+B,QAGsB,IAApBpnC,EAAOqnC,YAA0B,WAAYrnC,EAAOqnC,UAAW,CACjE,IAAIC,EAAY,WACd,OAAOtnC,EAAOqnC,SAASlB,SAAW,KAAOnmC,EAAOqnC,SAASR,UAAY7mC,EAAOqnC,SAAS9e,KAAQ,IAAMvoB,EAAOqnC,SAAS9e,KAAQ,KAG7H,IACElnB,OAAOC,eAAetB,EAAOqnC,SAAU,UACrC9lC,IAAK+lC,EACLrkC,YAAY,IAEd,MAAM/B,GACNy6B,YAAY,WACV37B,EAAOqnC,SAASd,OAASe,KACxB,OAlLT,MAuLqB,IAAXtnC,EAA0BA,EACV,oBAAXG,OAA0BA,OACjB,oBAATE,KAAwBA,KAAOwE,GCtV9C,IAAMge,GAAiB,SAAA0kB,GAAA,OAAUA,MAAAA,EAAiDA,EAAMz4B,YAAc,MAChG04B,GAAa,SAACD,EAAOz4B,GAAR,OAAwB24B,QAAQF,GAASz4B,GAAey4B,aAAiBz4B,IACtF44B,GAAoB,SAAAH,GAAA,OAASA,MAAAA,GAC7BzmC,GAAW,SAAAymC,GAAA,OAAS1kB,GAAe0kB,KAAWlmC,QAE9CsmC,GAAW,SAAAJ,GAAA,OAAS1kB,GAAe0kB,KAAW5iC,QAG9CkP,GAAU,SAAA0zB,GAAA,OAAS56B,MAAMkH,QAAQ0zB,IAEjCK,GAAa,SAAAL,GAAA,OAASC,GAAWD,EAAOvK,WAOxC6K,GAAU,SAAAN,GAAA,OACZG,GAAkBH,KAChBI,GAASJ,IAAU1zB,GAAQ0zB,IAAUK,GAAWL,MAAYA,EAAMtiC,QACnEnE,GAASymC,KAAWlmC,OAAOuN,KAAK24B,GAAOtiC,QAqB5C6iC,IACIC,gBAAiBL,GACjBrkC,OAAQvC,GACRwH,OAxCa,SAAAi/B,GAAA,OAAS1kB,GAAe0kB,KAAW3P,SAAWA,OAAO3vB,MAAMs/B,IAyCxEnS,OAAQuS,GACRK,QAxCc,SAAAT,GAAA,OAAS1kB,GAAe0kB,KAAWE,SAyCjDQ,SAxCe,SAAAV,GAAA,OAAS1kB,GAAe0kB,KAAWjnC,UAyClD4nC,MAAOr0B,GACPs0B,QAxCc,SAAAZ,GAAA,OAASC,GAAWD,EAAOa,UAyCzCC,SAAUT,GACVU,QAxCc,SAAAf,GAAA,OAASC,GAAWD,EAAOgB,UAyCzCC,SAxCe,SAAAjB,GAAA,OAAS1kB,GAAe0kB,KAAWkB,MAyClDtf,MAxCY,SAAAoe,GAAA,OAASC,GAAWD,EAAOtD,QAyCvCyE,IAxCU,SAAAnB,GAAA,OAASC,GAAWD,EAAOpnC,OAAOwoC,eAAiBnB,GAAWD,EAAOpnC,OAAOyoC,SAyCtFC,MAxCY,SAAAtB,GAAA,OAASC,GAAWD,EAAOuB,aAAgBpB,GAAkBH,IAAUI,GAASJ,EAAMvxB,OAyClG2vB,IAlCU,SAAA4B,GAEV,GAAIC,GAAWD,EAAOpnC,OAAOklC,KACzB,OAAO,EAIX,IAAIjQ,EAASmS,EACRA,EAAMpT,WAAW,YAAeoT,EAAMpT,WAAW,cAClDiB,EAAAA,UAAmBmS,GAGvB,IACI,OAAQM,GAAQ,IAAIxC,IAAIjQ,GAAQyR,UAClC,MAAO3lC,GACL,OAAO,IAoBXmrB,MAAOwb,ICpDLkB,GAA4B,WAE9B,IAAIC,GAAY,EAChB,IACI,IAAMC,EAAU5nC,OAAOC,kBAAmB,WACtCC,IADiD,WAG7C,OADAynC,GAAY,EACL,QAGf7oC,OAAOupB,iBAAiB,OAAQ,KAAMuf,GACtC9oC,OAAO+oC,oBAAoB,OAAQ,KAAMD,GAC3C,MAAO/nC,IAIT,OAAO8nC,EAhBuB,GAoB3B,SAASG,GAAeb,EAASnf,EAAO8b,GAA2D,IAAjDlZ,EAAiDzmB,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,GAAAw/B,EAAAjgC,KAAjCukC,IAAiC9jC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,KAAAA,UAAA,GAAjB+jC,EAAiB/jC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,GAEtG,GAAKgjC,GAAa,qBAAsBA,IAAY5mC,GAAG2qB,MAAMlD,IAAWznB,GAAGumC,SAAShD,GAApF,CAKA,IAAMqE,EAASngB,EAAM/kB,MAAM,KAIvB6kC,EAAUI,EAGVN,KACAE,GAEIG,QAAAA,EAEAC,QAAAA,IAKRC,EAAO/qB,QAAQ,SAAA/Y,GACPs/B,GAAQA,EAAKyE,gBAAkBxd,GAE/B+Y,EAAKyE,eAAel/B,MAAOi+B,QAAAA,EAAS9iC,KAAAA,EAAMy/B,SAAAA,EAAUgE,QAAAA,IAGxDX,EAAQvc,EAAS,mBAAqB,uBAAuBvmB,EAAMy/B,EAAUgE,MAK9E,SAASO,GAAGlB,GAAiE,IAAxDgB,EAAwDhkC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAA/C,GAAI2/B,EAA2C3/B,UAAA,GAAjC8jC,IAAiC9jC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,KAAAA,UAAA,GAAjB+jC,EAAiB/jC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,GAChF6jC,GAAe9mC,KAAKwC,KAAMyjC,EAASgB,EAAQrE,GAAU,EAAMmE,EAASC,GAIjE,SAASI,GAAInB,GAAiE,IAAxDgB,EAAwDhkC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAA/C,GAAI2/B,EAA2C3/B,UAAA,GAAjC8jC,IAAiC9jC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,KAAAA,UAAA,GAAjB+jC,EAAiB/jC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,GACjF6jC,GAAe9mC,KAAKwC,KAAMyjC,EAASgB,EAAQrE,GAAU,EAAOmE,EAASC,GAIlE,SAASK,GAAKpB,GAAiE,IAAxDgB,EAAwDhkC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAA/C,GAAI2/B,EAA2C3/B,UAAA,GAAjC8jC,IAAiC9jC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,KAAAA,UAAA,GAAjB+jC,EAAiB/jC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,GAMlF6jC,GAAe9mC,KAAKwC,KAAMyjC,EAASgB,EALnC,SAASK,IACLF,GAAInB,EAASgB,EAAQK,EAAcP,EAASC,GADjB,IAAA,IAAAO,EAAAtkC,UAAAL,OAANwhB,EAAM9Z,MAAAi9B,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAANpjB,EAAMojB,GAAAvkC,UAAAukC,GAE3B5E,EAAS5/B,MAAMR,KAAM4hB,KAGgC,EAAM2iB,EAASC,GAIrE,SAASS,GAAaxB,GAAkD,IAAzC9iC,EAAyCF,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAlC,GAAIs+B,EAA8Bt+B,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,GAAbw+B,EAAax+B,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,MAE3E,GAAK5D,GAAG4mC,QAAQA,KAAY5mC,GAAG2qB,MAAM7mB,GAArC,CAKA,IAAM2jB,EAAQ,IAAIma,YAAY99B,GAC1Bo+B,QAAAA,EACAE,OAAQziC,OAAOwjB,UAAWif,GACtBiG,KAAMllC,SAKdyjC,EAAQ0B,cAAc7gB,43BC3FnB,SAASwH,GAAKsZ,EAAUrqB,GAE3B,IAAMsqB,EAAUD,EAAShlC,OAASglC,GAAYA,GAI9Ct9B,MAAM+K,KAAKwyB,GACN77B,UACAkQ,QAAQ,SAAC+pB,EAASl/B,GACf,IAAM+gC,EAAQ/gC,EAAQ,EAAIwW,EAAQwqB,WAAU,GAAQxqB,EAG9C4L,EAAS8c,EAAQ+B,WACjBC,EAAUhC,EAAQiC,YAIxBJ,EAAMt3B,YAAYy1B,GAKdgC,EACA9e,EAAOgf,aAAaL,EAAOG,GAE3B9e,EAAO3Y,YAAYs3B,KAM5B,SAASM,GAAcnC,EAAS7gB,GAC9B/lB,GAAG4mC,QAAQA,KAAY5mC,GAAG2qB,MAAM5E,IAMrCpmB,OAAOmV,QAAQiR,GACVtJ,OAAO,SAAAusB,GAAA,IAAI5nC,EAAJ6nC,GAAAD,EAAA,GAAA,GAAA,OAAgBhpC,GAAGqmC,gBAAgBjlC,KAC1Cyb,QAAQ,SAAAqsB,GAAA,IAAAC,EAAAF,GAAAC,EAAA,GAAEtnC,EAAFunC,EAAA,GAAO/nC,EAAP+nC,EAAA,GAAA,OAAkBvC,EAAQwC,aAAaxnC,EAAKR,KAItD,SAASnB,GAAc6D,EAAMiiB,EAAYsjB,GAE5C,IAAMzC,EAAU7mC,SAASE,cAAc6D,GAavC,OAVI9D,GAAG2B,OAAOokB,IACVgjB,GAAcnC,EAAS7gB,GAIvB/lB,GAAG0zB,OAAO2V,KACVzC,EAAQ0C,UAAYD,GAIjBzC,EASJ,SAAS2C,GAAczlC,EAAMgmB,EAAQ/D,EAAYsjB,GAEpDvf,EAAO3Y,YAAYlR,GAAc6D,EAAMiiB,EAAYsjB,IAIhD,SAASG,GAAc5C,GACtB5mC,GAAG2mC,SAASC,IAAY5mC,GAAGwmC,MAAMI,GACjC37B,MAAM+K,KAAK4wB,GAAS/pB,QAAQ2sB,IAI3BxpC,GAAG4mC,QAAQA,IAAa5mC,GAAG4mC,QAAQA,EAAQ+B,aAIhD/B,EAAQ+B,WAAWvgB,YAAYwe,GAI5B,SAAS6C,GAAa7C,GAGzB,IAHkC,IAC5BrjC,EAAWqjC,EAAQ8C,WAAnBnmC,OAECA,EAAS,GACZqjC,EAAQxe,YAAYwe,EAAQ+C,WAC5BpmC,GAAU,EAKX,SAASqmC,GAAeC,EAAUC,GACrC,OAAK9pC,GAAG4mC,QAAQkD,IAAc9pC,GAAG4mC,QAAQkD,EAASnB,aAAgB3oC,GAAG4mC,QAAQiD,IAI7EC,EAASnB,WAAWoB,aAAaF,EAAUC,GAEpCD,GALI,KASR,SAASG,GAA0BC,EAAKC,GAM3C,IAAKlqC,GAAG0zB,OAAOuW,IAAQjqC,GAAG2qB,MAAMsf,GAC5B,SAGJ,IAAMlkB,KACAokB,EAAWD,EA0CjB,OAxCAD,EAAIvnC,MAAM,KAAKma,QAAQ,SAAAvR,GAEnB,IAAM8+B,EAAW9+B,EAAE++B,OACbC,EAAYF,EAAStV,QAAQ,IAAK,IAIlCyV,EAHWH,EAAStV,QAAQ,SAAU,IAGrBpyB,MAAM,KACvBd,EAAM2oC,EAAM,GACZnpC,EAAQmpC,EAAMhnC,OAAS,EAAIgnC,EAAM,GAAGzV,QAAQ,QAAS,IAAM,GAKjE,OAFcsV,EAASvc,OAAO,IAG1B,IAAK,IAEG7tB,GAAG2B,OAAOwoC,IAAanqC,GAAG0zB,OAAOyW,EAASK,SAC1CL,EAASK,OAAT,IAAsBF,GAG1BvkB,EAAWykB,MAAQF,EACnB,MAEJ,IAAK,IAEDvkB,EAAW9jB,GAAKmoC,EAAStV,QAAQ,IAAK,IACtC,MAEJ,IAAK,IAED/O,EAAWnkB,GAAOR,KASvB2kB,EAIJ,SAAS0kB,GAAa7D,EAAS8D,GAClC,GAAK1qC,GAAG4mC,QAAQA,GAAhB,CAIA,IAAI7jC,EAAO2nC,EAEN1qC,GAAGsmC,QAAQvjC,KACZA,GAAQ6jC,EAAQ+D,aAAa,WAG7B5nC,EACA6jC,EAAQwC,aAAa,SAAU,IAE/BxC,EAAQgE,gBAAgB,WAKzB,SAASC,GAAYjE,EAAS0D,EAAWQ,GAC5C,GAAI9qC,GAAG4mC,QAAQA,GAAU,CACrB,IAAIriB,EAAS,SAMb,YALqB,IAAVumB,IACPvmB,EAASumB,EAAQ,MAAQ,UAG7BlE,EAAQmE,UAAUxmB,GAAQ+lB,GACnB1D,EAAQmE,UAAUC,SAASV,GAGtC,OAAO,KAIJ,SAASW,GAASrE,EAAS0D,GAC9B,OAAOtqC,GAAG4mC,QAAQA,IAAYA,EAAQmE,UAAUC,SAASV,GAItD,SAASY,GAAQtE,EAASwD,GAC7B,IAAMlnC,GAAc2jC,QAAAA,SAapB,OANI3jC,EAAUgoC,SACVhoC,EAAUioC,uBACVjoC,EAAUkoC,oBACVloC,EAAUmoC,mBARd,WACI,OAAOpgC,MAAM+K,KAAKjW,SAASurC,iBAAiBlB,IAAWptB,SAAS7Z,QAUrDxC,KAAKimC,EAASwD,GAI1B,SAASmB,GAAYnB,GACxB,OAAOjnC,KAAKolC,SAASiD,UAAUF,iBAAiBlB,GAI7C,SAASqB,GAAWrB,GACvB,OAAOjnC,KAAKolC,SAASiD,UAAUE,cAActB,GAI1C,SAASuB,KACZ,IAAIC,EAAU7rC,SAAS8rC,cAQvB,OAHID,EAHCA,GAAWA,IAAY7rC,SAASykC,KAGvBzkC,SAAS2rC,cAAc,UAFvB,KC9OX,IACG9E,GAEAgB,GAOA9jC,GAVGgoC,IACHlF,GAAU7mC,SAASE,cAAc,QAEjC2nC,IACFmE,iBAAkB,sBAClBC,cAAe,gBACfC,YAAa,gCACbC,WAAY,iBAGVpoC,GAAOnE,OAAOuN,KAAK06B,IAAQlrB,KAAK,SAAA+K,GAAA,YAAkCnlB,IAAzBskC,GAAQ31B,MAAMwW,OAEtDznB,GAAG0zB,OAAO5vB,KAAQ8jC,GAAO9jC,KCdpC,IC6EcqoC,GD7ERC,IACFC,OAAgCtsC,SAASusC,aACzCC,SAAU,qBAAsBxsC,SAAS6Q,gBAAgBK,QAAU,OAAOgR,KAAKiI,UAAUwP,WACzF8S,SAAU,kBAAkBvqB,KAAKiI,UAAUuiB,UAC3CC,MAAO,uBAAuBzqB,KAAKiI,UAAUuiB,WCC3CE,IACFC,YAAa,SACbC,YAAa,IACbC,aAAc,cACdC,YAAa,yBACbC,YAAa,UAIXC,IAEFC,MAAO,gBAAiBntC,SAASE,cAAc,SAC/CktC,MAAO,gBAAiBptC,SAASE,cAAc,SAI/C6hB,MAPY,SAONhe,EAAMspC,EAAUC,GAClB,IAAMC,EAAgBlB,GAAQI,UAAYa,GAAeJ,GAAQI,YAC3DE,EAAMN,GAAQnpC,IAAsB,UAAbspC,EAG7B,OACIG,IAAAA,EACAC,GAJOD,GAAON,GAAQQ,aAAwB,UAAT3pC,IAAqBsoC,GAAQI,UAAYc,KAUtFI,KAAatB,GAAQI,UAAYxsC,GAAGumC,SAAStmC,GAAc,SAAS0tC,2BAIpEC,QAAS5tC,GAAGumC,SAAS9nC,OAAOovC,uCAI5BR,YAAa,gBAAiBttC,SAASE,cAAc,SAKrD6tC,KAjCY,SAiCPC,GAAW,IAAAC,EACQD,EAAUrrC,MAAM,KAA7BurC,EADKhF,GAAA+E,EAAA,GAAA,GAEZ,IAAK7qC,KAAK+qC,SAAWD,IAAc9qC,KAAKW,KACpC,OAAO,EAGX,IAAIA,OAAAA,EACAiqC,GAAaA,EAAU/wB,SAAS,WAEhClZ,EAAOiqC,EACc,eAAdA,EAEPjqC,EAAO,cACAiqC,KAAapB,KAEpB7oC,EAAUiqC,EAAV,aAAgCpB,GAAcoB,GAA9C,KAGJ,IACI,OAAOhI,QAAQjiC,GAAQX,KAAKgrC,MAAMC,YAAYtqC,GAAMgxB,QAAQ,KAAM,KACpE,MAAOjI,GACL,OAAO,IAKfwhB,WAAY,eAAgBtuC,SAASE,cAAc,SAGnDwtC,YACUtB,GAAQpsC,SAASE,cAAc,SACrCksC,GAAMroC,KAAO,QACS,UAAfqoC,GAAMroC,MAKjBwqC,MAAO,iBAAkBvuC,SAAS6Q,gBAGlC29B,aAAoC,IAAvBzC,GAIb0C,cAAe,eAAgB/vC,QAAUA,OAAOgwC,WAAW,4BAA4BvD,SCxFrFwD,IACFC,WADU,WACG,IAAAvL,EAAAjgC,KACT,OAAKA,KAAK+qC,QAIMjjC,MAAM+K,KAAK7S,KAAKgrC,MAAM7C,iBAAiB,WAGxC7uB,OAAO,SAAAzY,GAAA,OAAUipC,GAAQa,KAAKntC,KAAKyiC,EAAMp/B,EAAO4qC,aAAa,eAIhFC,kBAbU,WAeN,OAAOH,GAAMC,WACRhuC,KAAKwC,MACL+Z,IAAI,SAAAlZ,GAAA,OAAUkyB,OAAOlyB,EAAO4qC,aAAa,WACzCnyB,OAAOspB,UAGhB+I,OArBU,WAsBN,GAAK3rC,KAAK+qC,QAAV,CAIA,IAAMa,EAAS5rC,KAGfxD,OAAOC,eAAemvC,EAAOZ,MAAO,WAChCtuC,IAD2C,WAGvC,IACMmE,EADU0qC,GAAMC,WAAWhuC,KAAKouC,GACfryB,KAAK,SAAA1Y,GAAA,OAAUA,EAAO4qC,aAAa,SAAWG,EAAO/qC,SAG5E,OAAOA,GAAUkyB,OAAOlyB,EAAO4qC,aAAa,UAEhDhiC,IAT2C,SASvCi5B,GAEA,IAGM7hC,EAHU0qC,GAAMC,WAAWhuC,KAAKouC,GAGfryB,KAAK,SAAA1Y,GAAA,OAAUkyB,OAAOlyB,EAAO4qC,aAAa,WAAa/I,IAG9E,GAAK7hC,EAAL,CARO,IAAAgrC,EAa8CD,EAAOZ,MAApDc,EAbDD,EAaCC,YAAaC,EAbdF,EAacE,OAAQC,EAbtBH,EAasBG,QAASC,EAb/BJ,EAa+BI,WAGtCL,EAAOZ,MAAMnoC,IAAMhC,EAAO4qC,aAAa,QAGvB,SAAZO,GAAsBC,KAEtBL,EAAO/G,KAAK,iBAAkB,WAC1B+G,EAAOE,YAAcA,EAGhBC,GACDH,EAAOM,SAKfN,EAAOZ,MAAMmB,QAIjBlH,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,iBAAiB,GACrDoB,QAAS1J,UAQzB2J,eAlFU,WAmFDrsC,KAAK+qC,UAKV1E,GAAckF,GAAMC,WAAWhuC,KAAKwC,OAKpCA,KAAKgrC,MAAM/E,aAAa,MAAOjmC,KAAKssC,OAAOC,YAK3CvsC,KAAKgrC,MAAMmB,OAGXnsC,KAAKwsC,MAAMrlC,IAAI,iCCjGhB,SAASslC,GAAQjuC,EAAQkuC,GAC5B,OAAOA,EAAKntC,MAAM,KAAK2X,OAAO,SAAC6mB,EAAKt/B,GAAN,OAAcs/B,GAAOA,EAAIt/B,IAAMD,GAI1D,SAASmtC,KAAgC,IAAA,IAAzBlqC,EAAyBhB,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,MAAAskC,EAAAtkC,UAAAL,OAATusC,EAAS7kC,MAAAi9B,EAAA,EAAAA,EAAA,EAAA,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAT2H,EAAS3H,EAAA,GAAAvkC,UAAAukC,GAC5C,IAAK2H,EAAQvsC,OACT,OAAOqB,EAGX,IAAMZ,EAAS8rC,EAAQlN,QAEvB,OAAK5iC,GAAG2B,OAAOqC,IAIfrE,OAAOuN,KAAKlJ,GAAQ6Y,QAAQ,SAAAjb,GACpB5B,GAAG2B,OAAOqC,EAAOpC,KACZjC,OAAOuN,KAAKtI,GAAQoY,SAASpb,IAC9BjC,OAAOwjB,OAAOve,EAAdmrC,MAAyBnuC,OAG7BktC,GAAOlqC,EAAOhD,GAAMoC,EAAOpC,KAE3BjC,OAAOwjB,OAAOve,EAAdmrC,MAAyBnuC,EAAMoC,EAAOpC,OAIvCktC,GAAAA,WAAAA,GAAOlqC,GAAPvC,OAAkBytC,KAfdlrC,ECbR,SAASorC,GAAOnK,GAAgB,IAAA,IAAAqC,EAAAtkC,UAAAL,OAANwhB,EAAM9Z,MAAAi9B,EAAA,EAAAA,EAAA,EAAA,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAANpjB,EAAMojB,EAAA,GAAAvkC,UAAAukC,GACnC,OAAInoC,GAAG2qB,MAAMkb,GACFA,EAGJA,EAAMnlC,WAAWo0B,QAAQ,WAAY,SAAC7D,EAAOrrB,GAAR,OAAcmf,EAAKnf,GAAGlF,aAa/D,SAASuvC,KAAgD,IAArCpK,EAAqCjiC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAA7B,GAAI8Y,EAAyB9Y,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAlB,GAAIkxB,EAAclxB,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAJ,GACxD,OAAOiiC,EAAM/Q,QACT,IAAI9B,OAAOtW,EAAKhc,WAAWo0B,QAAQ,4BAA6B,QAAS,KACzEA,EAAQp0B,YAKT,SAASwvC,KACZ,OADoCtsC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAJ,IACnBlD,WAAWo0B,QAAQ,SAAU,SAAAuU,GAAA,OAAQA,EAAKxb,OAAO,GAAGsiB,cAAgB9G,EAAK+G,OAAO,GAAGC,gBAqB7F,SAASC,KAAwB,IAChC5c,GADgC9vB,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAJ,IACblD,WAMnB,OAHAgzB,EArBG,WAAkC,IACjCA,GADiC9vB,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAJ,IACdlD,WAYnB,OATAgzB,EAASuc,GAAWvc,EAAQ,IAAK,KAGjCA,EAASuc,GAAWvc,EAAQ,IAAK,KAM1Buc,GAHPvc,EAASwc,GAAYxc,GAGK,IAAK,IAQtB6c,CAAa7c,IAGR7F,OAAO,GAAGwiB,cAAgB3c,EAAO1sB,MAAM,GAalD,SAASwpC,GAAQ5J,GACpB,IAAM1oB,EAAUne,SAASE,cAAc,OAEvC,OADAie,EAAQ/M,YAAYy1B,GACb1oB,EAAQuyB,UC3EnB,IAAMC,GAAO,WACkB,IAAvB9uC,EAAuBgC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAjB,GAAI6rC,EAAa7rC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,MACvB,GAAI5D,GAAG2qB,MAAM/oB,IAAQ5B,GAAG2qB,MAAM8kB,GAC1B,MAAO,GAGX,IAAI/b,EAASkc,GAAQH,EAAOiB,KAAM9uC,GAElC,GAAI5B,GAAG2qB,MAAM+I,GACT,MAAO,GAGX,IAAMoB,GACF6b,aAAclB,EAAOmB,SACrBC,UAAWpB,EAAOqB,OAOtB,OAJAnxC,OAAOmV,QAAQggB,GAASjY,QAAQ,SAAAmsB,GAAkB,IAAA+H,EAAA9H,GAAAD,EAAA,GAAhBpnC,EAAgBmvC,EAAA,GAAX3vC,EAAW2vC,EAAA,GAC9Crd,EAASuc,GAAWvc,EAAQ9xB,EAAKR,KAG9BsyB,GCtBR,SAASsd,GAAOxK,GACnB,OAAKxmC,GAAGwmC,MAAMA,GAIPA,EAAM/pB,OAAO,SAACw0B,EAAMvpC,GAAP,OAAiB8+B,EAAM1pB,QAAQm0B,KAAUvpC,IAHlD8+B,MCFT0K,GAAAA,WACF,SAAAA,EAAYnC,GAAQoC,GAAAhuC,KAAA+tC,GAChB/tC,KAAKiuC,QAAUrC,EAAOU,OAAO4B,QAAQD,QACrCjuC,KAAKvB,IAAMmtC,EAAOU,OAAO4B,QAAQzvC,2CAuBjCA,GACA,IAAKsvC,EAAQ5J,YAAcnkC,KAAKiuC,QAC5B,OAAO,KAGX,IAAMlpC,EAAQzJ,OAAO6yC,aAAaC,QAAQpuC,KAAKvB,KAE/C,GAAI5B,GAAG2qB,MAAMziB,GACT,OAAO,KAGX,IAAMspC,EAAOrjB,KAAKsjB,MAAMvpC,GAExB,OAAOlI,GAAG0zB,OAAO9xB,IAAQA,EAAI2B,OAASiuC,EAAK5vC,GAAO4vC,8BAGlD7vC,GAEA,GAAKuvC,EAAQ5J,WAAcnkC,KAAKiuC,SAK3BpxC,GAAG2B,OAAOA,GAAf,CAKA,IAAI0vC,EAAUluC,KAAKtD,MAGfG,GAAG2qB,MAAM0mB,KACTA,MAIJvC,GAAOuC,EAAS1vC,GAGhBlD,OAAO6yC,aAAaI,QAAQvuC,KAAKvB,IAAKusB,KAAKE,UAAUgjB,yCAzDrD,IACI,KAAM,iBAAkB5yC,QACpB,OAAO,EAUX,OAHAA,OAAO6yC,aAAaI,QAJP,UAAA,WAKbjzC,OAAO6yC,aAAaK,WALP,YAON,EACT,MAAOnyC,GACL,OAAO,SAtBb0xC,GCFS,SAASU,GAAM3N,GAA4B,IAAvB4N,EAAuBjuC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAR,OAC9C,OAAO,IAAI+kB,QAAQ,SAACG,EAASC,GACzB,IACI,IAAM+oB,EAAU,IAAIC,eAGpB,KAAM,oBAAqBD,GACvB,OAGJA,EAAQ9pB,iBAAiB,OAAQ,WAC7B,GAAqB,SAAjB6pB,EACA,IACI/oB,EAAQqF,KAAKsjB,MAAMK,EAAQE,eAC7B,MAAOxyC,GACLspB,EAAQgpB,EAAQE,mBAGpBlpB,EAAQgpB,EAAQG,YAIxBH,EAAQ9pB,iBAAiB,QAAS,WAC9B,MAAM,IAAIgY,MAAM8R,EAAQI,UAG5BJ,EAAQzgC,KAAK,MAAO4yB,GAAK,GAGzB6N,EAAQD,aAAeA,EAEvBC,EAAQK,OACV,MAAO3yC,GACLupB,EAAOvpB,MC7BJ,SAAS4yC,GAAWnO,EAAKhiC,GACpC,GAAKjC,GAAG0zB,OAAOuQ,GAAf,CAIA,IACMoO,EAAQryC,GAAG0zB,OAAOzxB,GAGlBqwC,EAAS,WAAA,OAAsC,OAAhCvyC,SAASwyC,eAAetwC,IAEvCuwC,EAAS,SAAChH,EAAW9sB,GACvB8sB,EAAUiF,UAAY/xB,EAGlB2zB,GAASC,KAKbvyC,SAASykC,KAAKiO,sBAAsB,aAAcjH,IAItD,IAAK6G,IAAUC,IAAU,CACrB,IAAMI,EAAaxB,GAAQ5J,UAGrBkE,EAAYzrC,SAASE,cAAc,OAQzC,GAPAurC,EAAUpC,aAAa,SAAU,IAE7BiJ,GACA7G,EAAUpC,aAAa,KAAMnnC,GAI7BywC,EAAY,CACZ,IAAMC,EAASl0C,OAAO6yC,aAAaC,QAAWqB,SAAU3wC,GAGxD,GAFsB,OAAX0wC,EAEG,CACV,IAAMj0B,EAAOyP,KAAKsjB,MAAMkB,GACxBH,EAAOhH,EAAW9sB,EAAKm0B,UAK/BjB,GAAM3N,GACD7Z,KAAK,SAAA1hB,GACE1I,GAAG2qB,MAAMjiB,KAITgqC,GACAj0C,OAAO6yC,aAAaI,QACbkB,SAAU3wC,EACbksB,KAAKE,WACDwkB,QAASnqC,KAKrB8pC,EAAOhH,EAAW9iC,MAErBskB,MAAM,gBClEZ,IAAM8lB,GAAW,SAAA1xC,GAAA,OAAS2xC,SAAU3xC,EAAQ,GAAK,GAAM,GAAI,KACrD4xC,GAAa,SAAA5xC,GAAA,OAAS2xC,SAAU3xC,EAAQ,GAAM,GAAI,KAClD6xC,GAAa,SAAA7xC,GAAA,OAAS2xC,SAAS3xC,EAAQ,GAAI,KAGjD,SAAS8xC,KAA6D,IAAlDnZ,EAAkDn2B,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAA3C,EAAGuvC,EAAwCvvC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,GAAlBwvC,EAAkBxvC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,GAEzE,IAAK5D,GAAG4G,OAAOmzB,GACX,OAAOmZ,GAAW,KAAMC,EAAcC,GAI1C,IAAMpD,EAAS,SAAA5uC,GAAA,OAAS,IAAIA,GAAQ4F,OAAO,IAGvCqsC,EAAQP,GAAS/Y,GACfuZ,EAAON,GAAWjZ,GAClBwZ,EAAON,GAAWlZ,GAUxB,OAPIoZ,GAAgBE,EAAQ,EACxBA,GAAA,IAEAA,EAAQ,IAIFD,GAAYrZ,EAAO,EAAI,IAAM,IAAKsZ,EAAQrD,EAAOsD,GAA3D,IAAoEtD,EAAOuD,GCF/E,IAAMC,IAEFC,WAFa,WAGT,IACMC,EADM,IAAI/P,IAAIxgC,KAAKssC,OAAOkE,QAASl1C,OAAOknC,UAC/BiO,OAASn1C,OAAOknC,SAASiO,MAASxH,GAAQC,OAAS5tC,OAAOo1C,cAE3E,OACI5P,IAAK9gC,KAAKssC,OAAOkE,QACjBD,KAAAA,IAKRI,aAba,WAcT,IAyCI,OAxCA3wC,KAAKolC,SAASiL,SAAW/H,GAAW9qC,KAAKwC,KAAMA,KAAKssC,OAAOsE,UAAUP,SAASt1B,SAG9E/a,KAAKolC,SAASyL,SACV3E,KAAM9D,GAAY5qC,KAAKwC,KAAMA,KAAKssC,OAAOsE,UAAUC,QAAQ3E,MAC3D4E,MAAOxI,GAAW9qC,KAAKwC,KAAMA,KAAKssC,OAAOsE,UAAUC,QAAQC,OAC3DC,QAASzI,GAAW9qC,KAAKwC,KAAMA,KAAKssC,OAAOsE,UAAUC,QAAQE,SAC7DC,OAAQ1I,GAAW9qC,KAAKwC,KAAMA,KAAKssC,OAAOsE,UAAUC,QAAQG,QAC5DC,YAAa3I,GAAW9qC,KAAKwC,KAAMA,KAAKssC,OAAOsE,UAAUC,QAAQI,aACjEC,KAAM5I,GAAW9qC,KAAKwC,KAAMA,KAAKssC,OAAOsE,UAAUC,QAAQK,MAC1D3G,IAAKjC,GAAW9qC,KAAKwC,KAAMA,KAAKssC,OAAOsE,UAAUC,QAAQtG,KACzDE,QAASnC,GAAW9qC,KAAKwC,KAAMA,KAAKssC,OAAOsE,UAAUC,QAAQpG,SAC7D0G,SAAU7I,GAAW9qC,KAAKwC,KAAMA,KAAKssC,OAAOsE,UAAUC,QAAQM,UAC9DC,SAAU9I,GAAW9qC,KAAKwC,KAAMA,KAAKssC,OAAOsE,UAAUC,QAAQO,UAC9DC,WAAY/I,GAAW9qC,KAAKwC,KAAMA,KAAKssC,OAAOsE,UAAUC,QAAQQ,aAIpErxC,KAAKolC,SAASkM,SAAWhJ,GAAW9qC,KAAKwC,KAAMA,KAAKssC,OAAOsE,UAAUU,UAGrEtxC,KAAKolC,SAASmM,QACVC,KAAMlJ,GAAW9qC,KAAKwC,KAAMA,KAAKssC,OAAOsE,UAAUW,OAAOC,MACzDC,OAAQnJ,GAAW9qC,KAAKwC,KAAMA,KAAKssC,OAAOsE,UAAUW,OAAOE,SAI/DzxC,KAAKolC,SAASr3B,SACVlG,OAAQygC,GAAW9qC,KAAKwC,KAAMA,KAAKssC,OAAOsE,UAAU7iC,QAAQlG,QAC5DikC,YAAaxD,GAAW9qC,KAAKwC,KAAMA,KAAKssC,OAAOsE,UAAU7iC,QAAQ+9B,aACjE4F,SAAUpJ,GAAW9qC,KAAKwC,KAAMA,KAAKssC,OAAOsE,UAAU7iC,QAAQ2jC,WAI9D70C,GAAG4mC,QAAQzjC,KAAKolC,SAASkM,YACzBtxC,KAAKolC,SAASr3B,QAAQ4jC,YAAc3xC,KAAKolC,SAASkM,SAAS/I,cAAvB,IAC5BvoC,KAAKssC,OAAOsF,WAAWC,WAI5B,EACT,MAAO1oB,GAOL,OALAnpB,KAAKwsC,MAAMsF,KAAK,kEAAmE3oB,GAGnFnpB,KAAK+xC,sBAAqB,IAEnB,IAKfC,WApEa,SAoEFrxC,EAAMiiB,GACb,IACM4tB,EAAUH,GAASC,WAAW9yC,KAAKwC,MACnCiyC,GAAezB,EAAQD,KAAqB,GAAdC,EAAQ1P,KAAtC,IAAkD9gC,KAAKssC,OAAO4F,WAG9DC,EAAOv1C,SAASw1C,gBALJ,6BAK+B,OACjDxM,GACIuM,EACAxG,GAAO/oB,GACHyvB,KAAM,eACNC,UAAW,WAKnB,IAAMC,EAAM31C,SAASw1C,gBAfH,6BAe8B,OAC1C1F,EAAUuF,EAAV,IAAsBtxC,EAc5B,MATI,SAAU4xC,EACVA,EAAIC,eAAe,+BAAgC,OAAQ9F,GAE3D6F,EAAIC,eAAe,+BAAgC,aAAc9F,GAIrEyF,EAAKnkC,YAAYukC,GAEVJ,GAIXM,YAvGa,SAuGD9xC,GAAiB,IAAX+xC,EAAWjyC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,MAMnBylC,GAHFqE,IAAK,MACLE,QAAS,WAEW9pC,IAAS4sC,GAAS5sC,EAAMX,KAAKssC,QAKrD,OAAOxvC,GAAc,OAHFN,OAAOwjB,UAAW0yB,GACjCrL,OAAQqL,EAAKrL,MAAOrnC,KAAKssC,OAAOsF,WAAWrK,QAAQjuB,OAAOspB,SAAS/iC,KAAK,OAEnCqmC,IAI7CyM,YAtHa,SAsHDzM,GACR,GAAIrpC,GAAG2qB,MAAM0e,GACT,OAAO,KAGX,IAAM0M,EAAQ91C,GAAc,QACxBuqC,MAAOrnC,KAAKssC,OAAOsF,WAAWiB,KAAK50C,QAavC,OAVA20C,EAAM5kC,YACFlR,GACI,QAEIuqC,MAAOrnC,KAAKssC,OAAOsF,WAAWiB,KAAKD,OAEvC1M,IAID0M,GAIXE,aA7Ia,SA6IAC,EAAYL,GACrB,IAAMM,EAASl2C,GAAc,UACvB8lB,EAAapmB,OAAOwjB,UAAW0yB,GACjC/xC,EAAOwsC,GAAY4F,GAEnB7rB,GAAS,EACT+rB,OAAAA,EACAd,OAAAA,EACAe,OAAAA,EACAC,OAAAA,EAeJ,OAbM,SAAUvwB,IACZA,EAAWjiB,KAAO,UAGlB,UAAWiiB,EACNA,EAAWykB,MAAMxtB,SAAS7Z,KAAKssC,OAAOsF,WAAWwB,WAClDxwB,EAAWykB,OAAX,IAAwBrnC,KAAKssC,OAAOsF,WAAWwB,SAGnDxwB,EAAWykB,MAAQrnC,KAAKssC,OAAOsF,WAAWwB,QAItCL,GACJ,IAAK,OACD7rB,GAAS,EACT+rB,EAAQ,OACRC,EAAe,QACff,EAAO,OACPgB,EAAc,QACd,MAEJ,IAAK,OACDjsB,GAAS,EACT+rB,EAAQ,OACRC,EAAe,SACff,EAAO,SACPgB,EAAc,QACd,MAEJ,IAAK,WACDjsB,GAAS,EACT+rB,EAAQ,iBACRC,EAAe,kBACff,EAAO,eACPgB,EAAc,cACd,MAEJ,IAAK,aACDjsB,GAAS,EACT+rB,EAAQ,kBACRC,EAAe,iBACff,EAAO,mBACPgB,EAAc,kBACd,MAEJ,IAAK,aACDvwB,EAAWykB,OAAX,IAAwBrnC,KAAKssC,OAAOsF,WAAWwB,QAA/C,aACAzyC,EAAO,OACPsyC,EAAQ,OACRd,EAAO,OACP,MAEJ,QACIc,EAAQtyC,EACRwxC,EAAOY,EAIX7rB,GAEA8rB,EAAOhlC,YAAYqiC,GAAS2B,WAAWx0C,KAAKwC,KAAMmzC,GAAe9L,MAAO,mBACxE2L,EAAOhlC,YAAYqiC,GAAS2B,WAAWx0C,KAAKwC,KAAMmyC,GAAQ9K,MAAO,uBAGjE2L,EAAOhlC,YAAYqiC,GAASoC,YAAYj1C,KAAKwC,KAAMkzC,GAAgB7L,MAAO,oBAC1E2L,EAAOhlC,YAAYqiC,GAASoC,YAAYj1C,KAAKwC,KAAMizC,GAAS5L,MAAO,0BAEnE2L,EAAOhlC,YAAYqiC,GAAS2B,WAAWx0C,KAAKwC,KAAMmyC,IAClDa,EAAOhlC,YAAYqiC,GAASoC,YAAYj1C,KAAKwC,KAAMizC,KAIvDtH,GAAO/oB,EAAYikB,GAA0B7mC,KAAKssC,OAAOsE,UAAUC,QAAQlwC,GAAOiiB,IAElFgjB,GAAcoN,EAAQpwB,GAGT,SAATjiB,GACK9D,GAAGwmC,MAAMrjC,KAAKolC,SAASyL,QAAQlwC,MAChCX,KAAKolC,SAASyL,QAAQlwC,OAG1BX,KAAKolC,SAASyL,QAAQlwC,GAAM6E,KAAKwtC,IAEjChzC,KAAKolC,SAASyL,QAAQlwC,GAAQqyC,EAIlC,IAAM7L,EAAYnnC,KAAKssC,OAAOsF,WAAWyB,eAWzC,OAVA72C,OAAOC,eAAeu2C,EAAQ,WAC1B50C,YAAY,EACZ1B,IAFqC,WAGjC,OAAOorC,GAASkL,EAAQ7L,IAE5B19B,IALqC,WAKhB,IAAjB6pC,EAAiB7yC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,GACjBinC,GAAYsL,EAAQ7L,EAAWmM,MAIhCN,GAIXO,YAhQa,SAgQD5yC,EAAMiiB,GAEd,IAAM8f,EAAQ5lC,GACV,QACA6uC,GACI9E,GAA0B7mC,KAAKssC,OAAOsE,UAAUW,OAAO5wC,KAEnDA,KAAM,QACN0C,IAAK,EACLgB,IAAK,IACL6N,KAAM,IACNjU,MAAO,EACPu1C,aAAc,MAEdnB,KAAM,SACNoB,aAAclG,GAAS5sC,EAAMX,KAAKssC,QAClCoH,gBAAiB,EACjBC,gBAAiB,IACjBC,gBAAiB,GAErBhxB,IASR,OALA5iB,KAAKolC,SAASmM,OAAO5wC,GAAQ+hC,EAG7B2N,GAASwD,gBAAgBr2C,KAAKwC,KAAM0iC,GAE7BA,GAIXoR,eAjSa,SAiSEnzC,EAAMiiB,GACjB,IAAM0uB,EAAWx0C,GACb,WACA6uC,GACI9E,GAA0B7mC,KAAKssC,OAAOsE,UAAU7iC,QAAQpN,KAEpD0C,IAAK,EACLgB,IAAK,IACLpG,MAAO,EACPo0C,KAAM,eACN0B,eAAe,GAEnBnxB,IAKR,GAAa,WAATjiB,EAAmB,CACnB2wC,EAAStjC,YAAYlR,GAAc,OAAQ,KAAM,MAEjD,IAAMk3C,GACFC,OAAQ,SACRpsC,OAAQ,YACVlH,GACIuzC,EAASF,EAAYzG,GAASyG,EAAWh0C,KAAKssC,QAAU,GAE9DgF,EAASnL,UAAT,KAA0B+N,EAAOhH,cAKrC,OAFAltC,KAAKolC,SAASr3B,QAAQpN,GAAQ2wC,EAEvBA,GAIX6C,WApUa,SAoUFxzC,GACP,IAAMiiB,EAAaikB,GAA0B7mC,KAAKssC,OAAOsE,UAAU7iC,QAAQpN,IAErE0nC,EAAYvrC,GACd,MACA6uC,GAAO/oB,GACHykB,MAAAA,cAAqBzkB,EAAWykB,MAChCoM,aAAclG,GAAS5sC,EAAMX,KAAKssC,UAEtC,SAMJ,OAFAtsC,KAAKolC,SAASr3B,QAAQpN,GAAQ0nC,EAEvBA,GAIX+L,eAvVa,SAAAvO,GAuV+D,IAA3D5nC,EAA2D4nC,EAA3D5nC,MAAOwa,EAAoDotB,EAApDptB,KAAM9X,EAA8CklC,EAA9CllC,KAAMgtC,EAAwC9H,EAAxC8H,MAAwC0G,EAAAxO,EAAjC+M,MAAAA,OAAiCzzC,IAAAk1C,EAAzB,KAAyBA,EAAAC,EAAAzO,EAAnB0O,QAAAA,OAAmBp1C,IAAAm1C,GAAAA,EAClExG,EAAOhxC,GAAc,MAErBm2C,EAAQn2C,GAAc,SACxBuqC,MAAOrnC,KAAKssC,OAAOsF,WAAWwB,UAG5BoB,EAAQ13C,GACV,QACA6uC,GAAO9E,GAA0B7mC,KAAKssC,OAAOsE,UAAUW,OAAO5wC,KAC1DA,KAAM,QACNC,KAAAA,QAAcD,EACd1C,MAAAA,EACAs2C,QAAAA,EACAlN,MAAO,mBAIToN,EAAO33C,GAAc,QAAUyqC,OAAQ,KAE7C0L,EAAMjlC,YAAYwmC,GAClBvB,EAAMjlC,YAAYymC,GAClBxB,EAAMyB,mBAAmB,YAAa/G,GAElC9wC,GAAG4mC,QAAQmP,IACXK,EAAMjlC,YAAY4kC,GAGtB9E,EAAK9/B,YAAYilC,GACjBx6B,EAAKzK,YAAY8/B,IAIrBiC,WAxXa,WAwX0B,IAA5BnZ,EAA4Bn2B,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAArB,EAAGwvC,EAAkBxvC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,GAEnC,OAAK5D,GAAG4G,OAAOmzB,GAORmZ,GAAWnZ,EAFC+Y,GAAS3vC,KAAK0xC,UAAY,EAETzB,GANzBrZ,GAUf+d,kBArYa,WAqYgD,IAA3ClzC,EAA2ChB,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAlC,KAAMm2B,EAA4Bn2B,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAArB,EAAGwvC,EAAkBxvC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,GAEpD5D,GAAG4mC,QAAQhiC,IAAY5E,GAAG4G,OAAOmzB,KAKtCn1B,EAAO0kC,UAAYkK,GAASN,WAAWnZ,EAAMqZ,KAIjD2E,aAhZa,WAiZJ50C,KAAKmkC,UAAUkG,KAKhBxtC,GAAG4mC,QAAQzjC,KAAKolC,SAASmM,OAAOE,SAChCpB,GAASwE,SAASr3C,KAAKwC,KAAMA,KAAKolC,SAASmM,OAAOE,OAAQzxC,KAAK80C,MAAQ,EAAI90C,KAAKyxC,QAIhF50C,GAAG4mC,QAAQzjC,KAAKolC,SAASyL,QAAQK,QACjClxC,KAAKolC,SAASyL,QAAQK,KAAKoC,QAAUtzC,KAAK80C,OAAyB,IAAhB90C,KAAKyxC,UAKhEoD,SAjaa,SAiaJpzC,GAAmB,IAAXxD,EAAWwC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAH,EAChB5D,GAAG4mC,QAAQhiC,KAKhBA,EAAOxD,MAAQA,EAGfoyC,GAASwD,gBAAgBr2C,KAAKwC,KAAMyB,KAIxCszC,eA9aa,SA8aEzwB,GAAO,IAAA2b,EAAAjgC,KAClB,GAAKA,KAAKmkC,UAAUkG,IAAOxtC,GAAGynB,MAAMA,GAApC,CAIA,IP9bsB0wB,EAAS3wC,EO8b3BpG,EAAQ,EAkBZ,GAAIqmB,EACA,OAAQA,EAAM3jB,MAEV,IAAK,aACL,IAAK,UACL,IAAK,SPrdSq0C,EOsdYh1C,KAAK8rC,YPtdRznC,EOsdqBrE,KAAK0xC,SAA7CzzC,EPrdA,IAAZ+2C,GAAyB,IAAR3wC,GAAa0uB,OAAO3vB,MAAM4xC,IAAYjiB,OAAO3vB,MAAMiB,GAC7D,GAGH2wC,EAAU3wC,EAAM,KAAK4wC,QAAQ,GOodF,eAAf3wB,EAAM3jB,MACN0vC,GAASwE,SAASr3C,KAAKwC,KAAMA,KAAKolC,SAASmM,OAAOC,KAAMvzC,GAG5D,MAGJ,IAAK,UACL,IAAK,YAjCO,SAACwD,EAAQihC,GACzB,IAAMzkC,EAAQpB,GAAG4G,OAAOi/B,GAASA,EAAQ,EACnC4O,EAAWz0C,GAAG4mC,QAAQhiC,GAAUA,EAASw+B,EAAKmF,SAASr3B,QAAQlG,OAGrE,GAAIhL,GAAG4mC,QAAQ6N,GAAW,CACtBA,EAASrzC,MAAQA,EAGjB,IAAMg1C,EAAQ3B,EAAS4D,qBAAqB,QAAQ,GAChDr4C,GAAG4mC,QAAQwP,KACXA,EAAM1M,WAAW,GAAG4O,UAAYl3C,IAuBhCm3C,CAAYp1C,KAAKolC,SAASr3B,QAAQlG,OAAwB,IAAhB7H,KAAKq1C,aAW/DxB,gBAlea,SAkeGpyC,GAEZ,IAAMunC,EAAQnsC,GAAGynB,MAAM7iB,GAAUA,EAAOA,OAASA,EAGjD,GAAK5E,GAAG4mC,QAAQuF,IAAyC,UAA/BA,EAAMyC,aAAa,QAA7C,CAKA,GAAI1D,GAAQiB,EAAOhpC,KAAKssC,OAAOsE,UAAUW,OAAOC,MAAO,CACnDxI,EAAM/C,aAAa,gBAAiBjmC,KAAK8rC,aACzC,IAAMA,EAAcuE,GAASN,WAAW/vC,KAAK8rC,aACvC4F,EAAWrB,GAASN,WAAW/vC,KAAK0xC,UACpC7E,EAASU,GAAS,YAAavtC,KAAKssC,QAC1CtD,EAAM/C,aACF,iBACA4G,EAAOlb,QAAQ,gBAAiBma,GAAana,QAAQ,aAAc+f,SAEpE,GAAI3J,GAAQiB,EAAOhpC,KAAKssC,OAAOsE,UAAUW,OAAOE,QAAS,CAC5D,IAAM6D,EAAwB,IAAdtM,EAAM/qC,MACtB+qC,EAAM/C,aAAa,gBAAiBqP,GACpCtM,EAAM/C,aAAa,iBAAqBqP,EAAxC,UAEAtM,EAAM/C,aAAa,gBAAiB+C,EAAM/qC,OAIzCgrC,GAAQG,UAKbJ,EAAMl7B,MAAMynC,YAAY,UAAcvM,EAAM/qC,MAAQ+qC,EAAM3kC,IAAM,IAAhE,OAIJmxC,kBAvgBa,SAugBKlxB,GAAO,IAAAmxB,EAAAz1C,KAErB,GACKA,KAAKssC,OAAOoJ,SAASlE,MACrB30C,GAAG4mC,QAAQzjC,KAAKolC,SAASmM,OAAOC,OAChC30C,GAAG4mC,QAAQzjC,KAAKolC,SAASr3B,QAAQ4jC,cAChB,IAAlB3xC,KAAK0xC,SAJT,CAUA,IAAI4D,EAAU,EACRK,EAAa31C,KAAKolC,SAASkM,SAASsE,wBACpCC,EAAa71C,KAAKssC,OAAOsF,WAAWC,QAApC,YAEA3qB,EAAS,SAAA4uB,GACXpO,GAAY+N,EAAKrQ,SAASr3B,QAAQ4jC,YAAakE,EAAS3uB,IAI5D,GAAIlnB,KAAKmrC,MACLjkB,GAAO,OADX,CAMA,GAAIrqB,GAAGynB,MAAMA,GACTgxB,EAAU,IAAMK,EAAWI,OAASzxB,EAAM0xB,MAAQL,EAAW3f,UAC1D,CAAA,IAAI8R,GAAS9nC,KAAKolC,SAASr3B,QAAQ4jC,YAAakE,GAGnD,OAFAP,EAAUW,WAAWj2C,KAAKolC,SAASr3B,QAAQ4jC,YAAY7jC,MAAMkoB,KAAM,IAMnEsf,EAAU,EACVA,EAAU,EACHA,EAAU,MACjBA,EAAU,KAIdjF,GAASsE,kBAAkBn3C,KAAKwC,KAAMA,KAAKolC,SAASr3B,QAAQ4jC,YAAa3xC,KAAK0xC,SAAW,IAAM4D,GAG/Ft1C,KAAKolC,SAASr3B,QAAQ4jC,YAAY7jC,MAAMkoB,KAAUsf,EAAlD,IAIIz4C,GAAGynB,MAAMA,KAAW,aAAc,cAAczK,SAASyK,EAAM3jB,OAC/DumB,EAAsB,eAAf5C,EAAM3jB,SAKrBu1C,WA/jBa,SA+jBF5xB,GAEP,IAAM6xB,GAAUt5C,GAAG4mC,QAAQzjC,KAAKolC,SAASr3B,QAAQ2jC,WAAa1xC,KAAKssC,OAAO8J,WAG1E/F,GAASsE,kBAAkBn3C,KACvBwC,KACAA,KAAKolC,SAASr3B,QAAQ+9B,YACtBqK,EAASn2C,KAAK0xC,SAAW1xC,KAAK8rC,YAAc9rC,KAAK8rC,YACjDqK,GAIA7xB,GAAwB,eAAfA,EAAM3jB,MAAyBX,KAAKgrC,MAAMqL,SAKvDhG,GAAS0E,eAAev3C,KAAKwC,KAAMskB,IAIvCgyB,eArlBa,WAulBT,GAAKt2C,KAAKmkC,UAAUkG,KAAQrqC,KAAKssC,OAAO8J,aAAcp2C,KAAK8rC,aAA3D,CAQA,GAAI9rC,KAAK0xC,UAALn2C,KAAA2L,IAAiB,EAAG,IAGpB,OAFAogC,GAAatnC,KAAKolC,SAASr3B,QAAQ+9B,aAAa,QAChDxE,GAAatnC,KAAKolC,SAASkM,UAAU,GAKrCz0C,GAAG4mC,QAAQzjC,KAAKolC,SAASmM,OAAOC,OAChCxxC,KAAKolC,SAASmM,OAAOC,KAAKvL,aAAa,gBAAiBjmC,KAAK0xC,UAIjE,IAAM6E,EAAc15C,GAAG4mC,QAAQzjC,KAAKolC,SAASr3B,QAAQ2jC,WAGhD6E,GAAev2C,KAAKssC,OAAOkK,iBAAmBx2C,KAAK+rC,QACpDsE,GAASsE,kBAAkBn3C,KAAKwC,KAAMA,KAAKolC,SAASr3B,QAAQ+9B,YAAa9rC,KAAK0xC,UAI9E6E,GACAlG,GAASsE,kBAAkBn3C,KAAKwC,KAAMA,KAAKolC,SAASr3B,QAAQ2jC,SAAU1xC,KAAK0xC,UAI/ErB,GAASmF,kBAAkBh4C,KAAKwC,QAIpCy2C,UA5nBa,SA4nBHC,EAASxvB,GACfogB,GAAatnC,KAAKolC,SAAS+L,SAASwF,KAAKD,IAAWxvB,IAIxD0vB,eAjoBa,SAioBExS,GAAS,IAAAyS,EAAA72C,KAEpB,GAAKnD,GAAG4mC,QAAQzjC,KAAKolC,SAAS+L,SAAS2F,MAAM1K,SAA7C,CAIA,IACM3zB,EAAOzY,KAAKolC,SAAS+L,SAAS2F,MAAM1K,QAAQ7D,cAAc,MAG5D1rC,GAAGwmC,MAAMe,KACTpkC,KAAKokC,QAAQgI,QAAUyB,GAAOzJ,GAAS9qB,OAAO,SAAA8yB,GAAA,OAAWyK,EAAKvK,OAAOF,QAAQhI,QAAQvqB,SAASuyB,MAIlG,IAAMllB,GAAUrqB,GAAG2qB,MAAMxnB,KAAKokC,QAAQgI,UAAYpsC,KAAKokC,QAAQgI,QAAQhsC,OAAS,EAOhF,GANAiwC,GAASoG,UAAUj5C,KAAKwC,KAVX,UAUuBknB,GAGpCmpB,GAAS0G,UAAUv5C,KAAKwC,MAGnBknB,EAAL,CAKAof,GAAa7tB,GAcbzY,KAAKokC,QAAQgI,QACR70B,KAAK,SAAC5a,EAAG2D,GACN,IAAM02C,EAAUH,EAAKvK,OAAOF,QAAQhI,QACpC,OAAO4S,EAAQr9B,QAAQhd,GAAKq6C,EAAQr9B,QAAQrZ,GAAK,GAAK,IAEzDoZ,QAAQ,SAAA0yB,GACLiE,GAAS+D,eAAe52C,KAAKq5C,GACzB54C,MAAOmuC,EACP3zB,KAAAA,EACA9X,KA5CC,UA6CDgtC,MAAO0C,GAAS4G,SAASz5C,KAAKq5C,EAAM,UAAWzK,GAC/CwG,MAtBK,SAAAxG,GACb,IAAM6G,EAAQ1F,GAAA,gBAAyBnB,EAAWyK,EAAKvK,QAEvD,OAAK2G,EAAM7yC,OAIJiwC,GAASsC,YAAYn1C,KAAKq5C,EAAM5D,GAH5B,KAkBIiE,CAAS9K,OAI5BiE,GAAS8G,cAAc35C,KAAKwC,KAlDf,UAkD2ByY,MAI5Cw+B,SA7rBa,SA6rBJP,EAASz4C,GACd,OAAQy4C,GACJ,IAAK,QACD,OAAiB,IAAVz4C,EAAcsvC,GAAS,SAAUvtC,KAAKssC,QAAaruC,EAAnD,UAEX,IAAK,UACD,GAAIpB,GAAG4G,OAAOxF,GAAQ,CAClB,IAAMg1C,EAAQ1F,GAAA,gBAAyBtvC,EAAS+B,KAAKssC,QAErD,OAAK2G,EAAM7yC,OAIJ6yC,EAHOh1C,EAAV,IAMR,OAAO8uC,GAAY9uC,GAEvB,IAAK,WACD,OAAOmzC,GAAS6F,SAASz5C,KAAKwC,MAElC,QACI,OAAO,OAKnBm3C,cAxtBa,SAwtBCT,EAASrO,EAAW3F,GAC9B,IAAM0U,EAAOp3C,KAAKolC,SAAS+L,SAAS2F,MAAMJ,GACtCz4C,EAAQ,KACRwa,EAAO4vB,EAEX,GAAgB,aAAZqO,EACAz4C,EAAQ+B,KAAKq3C,iBACV,CASH,GARAp5C,EAASpB,GAAG2qB,MAAMkb,GAAiB1iC,KAAK02C,GAAbhU,EAGvB7lC,GAAG2qB,MAAMvpB,KACTA,EAAQ+B,KAAKssC,OAAOoK,GAASY,UAI5Bz6C,GAAG2qB,MAAMxnB,KAAKokC,QAAQsS,MAAc12C,KAAKokC,QAAQsS,GAAS78B,SAAS5b,GAEpE,YADA+B,KAAKwsC,MAAMsF,KAAX,yBAAyC7zC,EAAzC,SAAuDy4C,GAK3D,IAAK12C,KAAKssC,OAAOoK,GAAStS,QAAQvqB,SAAS5b,GAEvC,YADA+B,KAAKwsC,MAAMsF,KAAX,sBAAsC7zC,EAAtC,SAAoDy4C,GAW5D,GALK75C,GAAG4mC,QAAQhrB,KACZA,EAAO2+B,GAAQA,EAAK7O,cAAc,OAIjC1rC,GAAG4mC,QAAQhrB,GAAhB,CAKczY,KAAKolC,SAAS+L,SAASwF,KAAKD,GAASnO,cAArC,IAAuDvoC,KAAKssC,OAAOsF,WAAWiB,KAAK50C,OAC3FqvC,UAAY+C,GAAS4G,SAASz5C,KAAKwC,KAAM02C,EAASz4C,GAGxD,IAAMwD,EAASgX,GAAQA,EAAK8vB,cAAL,gBAAmCtqC,EAAnC,MAEnBpB,GAAG4mC,QAAQhiC,KACXA,EAAO8yC,SAAU,KAoDzBgD,gBA1zBa,WA0zBK,IAAAC,EAAAx3C,KAGRyY,EAAOzY,KAAKolC,SAAS+L,SAAS2F,MAAM1F,SAAS7I,cAAc,MAC3DkP,EAASrG,GAASsG,UAAUl6C,KAAKwC,MAYvC,GATAqwC,GAASoG,UAAUj5C,KAAKwC,KALX,WAKuBy3C,EAAOr3C,QAG3CkmC,GAAa7tB,GAGb43B,GAAS0G,UAAUv5C,KAAKwC,MAGnBy3C,EAAOr3C,OAAZ,CAKA,IAAMgkC,EAAUqT,EAAO19B,IAAI,SAACiqB,EAAO/lC,GAAR,OACvBA,MAAAA,EACAs2C,QAASiD,EAAKpG,SAASuG,SAAWH,EAAKH,eAAiBp5C,EACxD0vC,MAAOyD,GAAS6F,SAASz5C,KAAKg6C,EAAMxT,GACpC4O,MAAO5O,EAAM4T,UAAYvH,GAASsC,YAAYn1C,KAAKg6C,EAAMxT,EAAM4T,SAAS5K,eACxEv0B,KAAAA,EACA9X,KAAM,cAIVyjC,EAAQyT,SACJ55C,OAAQ,EACRs2C,SAAUv0C,KAAKoxC,SAASuG,QACxBhK,MAAOJ,GAAS,WAAYvtC,KAAKssC,QACjC7zB,KAAAA,EACA9X,KAAM,aAIVyjC,EAAQ1qB,QAAQ22B,GAAS+D,eAAepyB,KAAKhiB,OAE7CqwC,GAAS8G,cAAc35C,KAAKwC,KAxCf,WAwC2ByY,KAI5Cq/B,aAx2Ba,SAw2BA1T,GAAS,IAAA2T,EAAA/3C,KAElB,GAAKA,KAAKssC,OAAO+D,SAASx2B,SAAS,aAAgB7Z,KAAKssC,OAAO6E,SAASt3B,SAAS,UAK5Ehd,GAAG4mC,QAAQzjC,KAAKolC,SAAS+L,SAAS2F,MAAMkB,OAA7C,CAOIn7C,GAAGwmC,MAAMe,GACTpkC,KAAKokC,QAAQ4T,MAAQ5T,GACdpkC,KAAK+qC,SAAW/qC,KAAKi4C,WAC5Bj4C,KAAKokC,QAAQ4T,OAAS,GAAK,IAAM,EAAG,KAAM,IAAK,KAAM,IAIzDh4C,KAAKokC,QAAQ4T,MAAQh4C,KAAKokC,QAAQ4T,MAAM1+B,OAAO,SAAA0+B,GAAA,OAASD,EAAKzL,OAAO0L,MAAM5T,QAAQvqB,SAASm+B,KAG3F,IAAM9wB,GAAUrqB,GAAG2qB,MAAMxnB,KAAKokC,QAAQ4T,QAAUh4C,KAAKokC,QAAQ4T,MAAM53C,OAAS,EAO5E,GANAiwC,GAASoG,UAAUj5C,KAAKwC,KAdX,QAcuBknB,GAGpCmpB,GAAS0G,UAAUv5C,KAAKwC,MAGnBknB,EAAL,CAKA,IAAMzO,EAAOzY,KAAKolC,SAAS+L,SAAS2F,MAAMkB,MAAMzP,cAAc,MAG9DjC,GAAa7tB,GAGbzY,KAAKokC,QAAQ4T,MAAMt+B,QAAQ,SAAAs+B,GACvB3H,GAAS+D,eAAe52C,KAAKu6C,GACzB95C,MAAO+5C,EACPv/B,KAAAA,EACA9X,KAnCK,QAoCLgtC,MAAO0C,GAAS4G,SAASz5C,KAAKu6C,EAAM,QAASC,OAIrD3H,GAAS8G,cAAc35C,KAAKwC,KAxCf,QAwC2ByY,MAI5Cs+B,UA/5Ba,WA+5BD,IACAJ,EAAS32C,KAAKolC,SAAS+L,SAAvBwF,KACFd,GAAWh5C,GAAG2qB,MAAMmvB,IAASn6C,OAAOoV,OAAO+kC,GAAM18B,KAAK,SAAAi+B,GAAA,OAAQA,EAAI3Q,SAExED,GAAatnC,KAAKolC,SAAS+L,SAAS0B,MAAOgD,IAI/CsC,WAv6Ba,SAu6BF7zB,GAAO,IACN8zB,EAASp4C,KAAKolC,SAAS+L,SAAvBiH,KACFpF,EAAShzC,KAAKolC,SAASyL,QAAQM,SAGrC,GAAKt0C,GAAG4mC,QAAQ2U,IAAUv7C,GAAG4mC,QAAQuP,GAArC,CAIA,IAAMqF,EAAOx7C,GAAGsmC,QAAQ7e,GAASA,EAAQznB,GAAG4mC,QAAQ2U,IAASA,EAAK5Q,aAAa,UAE/E,GAAI3qC,GAAGynB,MAAMA,GAAQ,CACjB,IAAMg0B,EAAaz7C,GAAG4mC,QAAQ2U,IAASA,EAAKvQ,SAASvjB,EAAM7iB,QACrD82C,EAAWj0B,EAAM7iB,SAAWzB,KAAKolC,SAASyL,QAAQM,SAKxD,GAAImH,IAAgBA,IAAeC,GAAYF,EAC3C,OAIAE,GACAj0B,EAAMk0B,kBAKV37C,GAAG4mC,QAAQuP,IACXA,EAAO/M,aAAa,gBAAiBoS,GAGrCx7C,GAAG4mC,QAAQ2U,KACX9Q,GAAa8Q,GAAOC,GACpB3Q,GAAY1nC,KAAKolC,SAASiD,UAAWroC,KAAKssC,OAAOsF,WAAWiB,KAAK3kC,KAAMmqC,GAEnEA,EACAD,EAAK3Q,gBAAgB,YAErB2Q,EAAKnS,aAAa,YAAa,MAM3CwS,WAr9Ba,SAq9BFP,GACP,IAAMQ,EAAQR,EAAI3S,WAAU,GAC5BmT,EAAM5qC,MAAM6qC,SAAW,WACvBD,EAAM5qC,MAAM8qC,QAAU,EACtBF,EAAMjR,gBAAgB,UAGtB3/B,MAAM+K,KAAK6lC,EAAMvQ,iBAAiB,gBAAgBzuB,QAAQ,SAAAgpB,GACtD,IAAM9hC,EAAO8hC,EAAM+I,aAAa,QAChC/I,EAAMuD,aAAa,OAAWrlC,EAA9B,YAIJs3C,EAAI1S,WAAWx3B,YAAY0qC,GAG3B,IAAM3C,EAAQ2C,EAAMG,YACdC,EAASJ,EAAMK,aAKrB,OAFA1S,GAAcqS,IAGV3C,MAAAA,EACA+C,OAAAA,IAKRE,QAl/Ba,WAk/BQ,IAAAC,EAAAj5C,KAAbyB,EAAahB,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAJ,GACLoyC,EAAS7yC,KAAKolC,SAAS+L,SAAvB0B,KACFuE,EAAOx6C,SAASwyC,eAAe3tC,GAGrC,GAAK5E,GAAG4mC,QAAQ2T,IAK4B,aAA9BA,EAAK3L,aAAa,QAChC,CAMA,IAAMuJ,EAAUnC,EAAKtK,cAAc,mCAC7BF,EAAY2M,EAAQxP,WAQ1B,GALA19B,MAAM+K,KAAKggC,EAAK1K,iBAAL,mBAAyC6M,EAAQvJ,aAAa,MAA9D,OAA0E/xB,QAAQ,SAAAwN,GACzFA,EAAO+e,aAAa,iBAAiB,KAIrC6D,GAAQsB,cAAgBtB,GAAQuB,cAAe,CAE/ChD,EAAUv6B,MAAMioC,MAAWf,EAAQ6D,YAAnC,KACAxQ,EAAUv6B,MAAMgrC,OAAY9D,EAAQ+D,aAApC,KAGA,IAAMG,EAAO7I,GAASoI,WAAWj7C,KAAKwC,KAAMo3C,GAkB5CzS,GAAGnnC,KAAKwC,KAAMqoC,EAAWM,GAfT,SAAVwQ,EAAU98C,GAERA,EAAEoF,SAAW4mC,IAAe,QAAS,UAAUxuB,SAASxd,EAAE+8C,gBAK9D/Q,EAAUv6B,MAAMioC,MAAQ,GACxB1N,EAAUv6B,MAAMgrC,OAAS,GAGzBlU,GAAIpnC,KAAKy7C,EAAM5Q,EAAWM,GAAoBwQ,MAOlD9Q,EAAUv6B,MAAMioC,MAAWmD,EAAKnD,MAAhC,KACA1N,EAAUv6B,MAAMgrC,OAAYI,EAAKJ,OAAjC,KAIJxR,GAAa0N,GAAS,GACtBA,EAAQ/O,aAAa,YAAa,GAGlCqB,GAAa8P,GAAM,GAEnB,IAAMT,EAAOvO,GAAY5qC,KAAKwC,KAAjB,mBAA0CyB,EAA1C,MACbqG,MAAM+K,KAAK8jC,GAAMj9B,QAAQ,SAAAw+B,GACrBA,EAAIjS,aAAa,iBAAiB,KAEtCmR,EAAK3P,gBAAgB,YAGrB2P,EAAKjP,iBAAiB,2DAA2D,GAAGkR,UAKxF9qC,OA9jCa,SA8jCNgN,GAAM,IAAA+9B,EAAAt5C,KAET,GAAInD,GAAG2qB,MAAMxnB,KAAKssC,OAAO+D,UACrB,OAAO,KAIX,IAAMhI,EAAYvrC,GAAc,MAAO+pC,GAA0B7mC,KAAKssC,OAAOsE,UAAUP,SAASt1B,UAuBhG,GApBI/a,KAAKssC,OAAO+D,SAASx2B,SAAS,YAC9BwuB,EAAUr6B,YAAYqiC,GAASyC,aAAat1C,KAAKwC,KAAM,YAIvDA,KAAKssC,OAAO+D,SAASx2B,SAAS,WAC9BwuB,EAAUr6B,YAAYqiC,GAASyC,aAAat1C,KAAKwC,KAAM,WAIvDA,KAAKssC,OAAO+D,SAASx2B,SAAS,SAC9BwuB,EAAUr6B,YAAYqiC,GAASyC,aAAat1C,KAAKwC,KAAM,SAIvDA,KAAKssC,OAAO+D,SAASx2B,SAAS,iBAC9BwuB,EAAUr6B,YAAYqiC,GAASyC,aAAat1C,KAAKwC,KAAM,iBAIvDA,KAAKssC,OAAO+D,SAASx2B,SAAS,YAAa,CAC3C,IAAMy3B,EAAWx0C,GAAc,MAAO+pC,GAA0B7mC,KAAKssC,OAAOsE,UAAUU,WAetF,GAZAA,EAAStjC,YACLqiC,GAASkD,YAAY/1C,KAAKwC,KAAM,QAC5BlB,GAAAA,aAAiByc,EAAKzc,MAK9BwyC,EAAStjC,YAAYqiC,GAASyD,eAAet2C,KAAKwC,KAAM,WAKpDA,KAAKssC,OAAOoJ,SAASlE,KAAM,CAC3B,IAAMK,EAAU/0C,GACZ,QAEIuqC,MAAOrnC,KAAKssC,OAAOsF,WAAWC,SAElC,SAGJP,EAAStjC,YAAY6jC,GACrB7xC,KAAKolC,SAASr3B,QAAQ4jC,YAAcE,EAGxC7xC,KAAKolC,SAASkM,SAAWA,EACzBjJ,EAAUr6B,YAAYhO,KAAKolC,SAASkM,UAmBxC,GAfItxC,KAAKssC,OAAO+D,SAASx2B,SAAS,iBAC9BwuB,EAAUr6B,YAAYqiC,GAAS8D,WAAW32C,KAAKwC,KAAM,gBAIrDA,KAAKssC,OAAO+D,SAASx2B,SAAS,aAC9BwuB,EAAUr6B,YAAYqiC,GAAS8D,WAAW32C,KAAKwC,KAAM,aAIrDA,KAAKssC,OAAO+D,SAASx2B,SAAS,SAC9BwuB,EAAUr6B,YAAYqiC,GAASyC,aAAat1C,KAAKwC,KAAM,SAIvDA,KAAKssC,OAAO+D,SAASx2B,SAAS,UAAW,CACzC,IAAM43B,EAAS30C,GAAc,OACzBuqC,MAAO,iBAILzkB,GACFve,IAAK,EACL6N,KAAM,IACNjU,MAAO+B,KAAKssC,OAAOmF,QAIvBA,EAAOzjC,YACHqiC,GAASkD,YAAY/1C,KACjBwC,KACA,SACA2rC,GAAO/oB,GACH9jB,GAAAA,eAAmByc,EAAKzc,OAKpCkB,KAAKolC,SAASqM,OAASA,EAEvBpJ,EAAUr6B,YAAYyjC,GAS1B,GALIzxC,KAAKssC,OAAO+D,SAASx2B,SAAS,aAC9BwuB,EAAUr6B,YAAYqiC,GAASyC,aAAat1C,KAAKwC,KAAM,aAIvDA,KAAKssC,OAAO+D,SAASx2B,SAAS,cAAgBhd,GAAG2qB,MAAMxnB,KAAKssC,OAAO6E,UAAW,CAC9E,IAAM0B,EAAO/1C,GAAc,OACvBuqC,MAAO,aACPE,OAAQ,KAGZsL,EAAK7kC,YACDqiC,GAASyC,aAAat1C,KAAKwC,KAAM,YAC7BlB,GAAAA,wBAA4Byc,EAAKzc,GACjCy6C,iBAAiB,EACjBC,gBAAA,iBAAkCj+B,EAAKzc,GACvC26C,iBAAiB,KAIzB,IAAMrB,EAAOt7C,GAAc,QACvBuqC,MAAO,wBACPvoC,GAAAA,iBAAqByc,EAAKzc,GAC1ByoC,OAAQ,GACRmS,mBAAA,wBAA4Cn+B,EAAKzc,GACjDuzC,KAAM,UACNsH,UAAW,IAGTC,EAAQ98C,GAAc,OAEtB+8C,EAAO/8C,GAAc,OACvBgC,GAAAA,iBAAqByc,EAAKzc,GAA1B,QACA46C,mBAAA,wBAA4Cn+B,EAAKzc,GACjDuzC,KAAM,aAIJsE,EAAO75C,GAAc,MACvBu1C,KAAM,YAIVryC,KAAKssC,OAAO6E,SAASz3B,QAAQ,SAAA/Y,GACzB,IAAMu3C,EAAMp7C,GAAc,MACtBu1C,KAAM,MACN9K,OAAQ,KAGNyL,EAASl2C,GACX,SACA6uC,GAAO9E,GAA0ByS,EAAKhN,OAAOsE,UAAUC,QAAQM,WAC3DxwC,KAAM,SACN0mC,MAAUiS,EAAKhN,OAAOsF,WAAWwB,QAAjC,IAA4CkG,EAAKhN,OAAOsF,WAAWwB,QAAnE,YACAt0C,GAAAA,iBAAqByc,EAAKzc,GAA1B,IAAgC6B,EAAhC,OACA44C,iBAAiB,EACjBC,gBAAA,iBAAkCj+B,EAAKzc,GAAvC,IAA6C6B,EAC7C84C,iBAAiB,IAErBlM,GAAS5sC,EAAM24C,EAAKhN,SAGlBruC,EAAQnB,GAAc,QACxBuqC,MAAOiS,EAAKhN,OAAOsF,WAAWiB,KAAK50C,QAIvCA,EAAMqvC,UAAY/xB,EAAK5a,GAEvBqyC,EAAOhlC,YAAY/P,GACnBi6C,EAAIlqC,YAAYglC,GAChB2D,EAAK3oC,YAAYkqC,GAEjBoB,EAAKlU,SAAS+L,SAASwF,KAAKh2C,GAAQu3C,IAGxC2B,EAAK7rC,YAAY2oC,GACjBiD,EAAM5rC,YAAY6rC,GAGlB75C,KAAKssC,OAAO6E,SAASz3B,QAAQ,SAAA/Y,GACzB,IAAMy2C,EAAOt6C,GAAc,OACvBgC,GAAAA,iBAAqByc,EAAKzc,GAA1B,IAAgC6B,EAChC4mC,OAAQ,GACRmS,mBAAA,iBAAqCn+B,EAAKzc,GAA1C,IAAgD6B,EAAhD,OACA0xC,KAAM,WACNsH,UAAW,IAGTG,EAAOh9C,GACT,UAEI6D,KAAM,SACN0mC,MAAUiS,EAAKhN,OAAOsF,WAAWwB,QAAjC,IAA4CkG,EAAKhN,OAAOsF,WAAWwB,QAAnE,SACAmG,iBAAiB,EACjBC,gBAAA,iBAAkCj+B,EAAKzc,GAAvC,QACA26C,iBAAiB,GAErBlM,GAAS5sC,EAAM24C,EAAKhN,SAGxB8K,EAAKppC,YAAY8rC,GAEjB,IAAM1V,EAAUtnC,GAAc,MAE9Bs6C,EAAKppC,YAAYo2B,GACjBwV,EAAM5rC,YAAYopC,GAElBkC,EAAKlU,SAAS+L,SAAS2F,MAAMn2C,GAAQy2C,IAGzCgB,EAAKpqC,YAAY4rC,GACjB/G,EAAK7kC,YAAYoqC,GACjB/P,EAAUr6B,YAAY6kC,GAEtB7yC,KAAKolC,SAAS+L,SAASiH,KAAOA,EAC9Bp4C,KAAKolC,SAAS+L,SAAS0B,KAAOA,EA+BlC,OA3BI7yC,KAAKssC,OAAO+D,SAASx2B,SAAS,QAAUiwB,GAAQS,KAChDlC,EAAUr6B,YAAYqiC,GAASyC,aAAat1C,KAAKwC,KAAM,QAIvDA,KAAKssC,OAAO+D,SAASx2B,SAAS,YAAciwB,GAAQW,SACpDpC,EAAUr6B,YAAYqiC,GAASyC,aAAat1C,KAAKwC,KAAM,YAIvDA,KAAKssC,OAAO+D,SAASx2B,SAAS,eAC9BwuB,EAAUr6B,YAAYqiC,GAASyC,aAAat1C,KAAKwC,KAAM,eAIvDA,KAAKssC,OAAO+D,SAASx2B,SAAS,eAC9B7Z,KAAKolC,SAASiD,UAAUr6B,YAAYqiC,GAASyC,aAAat1C,KAAKwC,KAAM,eAGzEA,KAAKolC,SAASiL,SAAWhI,EAErBroC,KAAK+qC,SACLsF,GAASuG,eAAep5C,KAAKwC,KAAMurC,GAAMG,kBAAkBluC,KAAKwC,OAGpEqwC,GAASyH,aAAat6C,KAAKwC,MAEpBqoC,GAIX0R,OAj0Ca,WAi0CJ,IAAAC,EAAAh6C,KAEL,GAAIA,KAAKssC,OAAO2C,WAAY,CACxB,IAAMkD,EAAO9B,GAASC,WAAW9yC,KAAKwC,MAGlCmyC,EAAK5B,MACLtB,GAAWkD,EAAKrR,IAAK,eAK7B9gC,KAAKlB,GAAKvD,KAAK2H,MAAsB,IAAhB3H,KAAKyD,UAG1B,IAAIqpC,EAAY,KAChBroC,KAAKolC,SAASiL,SAAW,KAGzB,IAAM4J,GACFn7C,GAAIkB,KAAKlB,GACTo7C,SAAUl6C,KAAKssC,OAAOmB,SACtBE,MAAO3tC,KAAKssC,OAAOqB,OAEnB0B,GAAS,EAETxyC,GAAG0zB,OAAOvwB,KAAKssC,OAAO+D,WAAaxzC,GAAG4mC,QAAQzjC,KAAKssC,OAAO+D,UAE1DhI,EAAYroC,KAAKssC,OAAO+D,SACjBxzC,GAAGumC,SAASpjC,KAAKssC,OAAO+D,UAG/BhI,EAAYroC,KAAKssC,OAAO+D,SAAS7yC,KAAKwC,KAAMi6C,IAG5C5R,EAAYgI,GAAS9hC,OAAO/Q,KAAKwC,MAC7BlB,GAAIkB,KAAKlB,GACTo7C,SAAUl6C,KAAKssC,OAAOmB,SACtBuK,MAAOh4C,KAAKg4C,MACZ5L,QAASpsC,KAAKosC,QACdgF,SAAUA,GAAS6F,SAASz5C,KAAKwC,QAIrCqvC,GAAS,GAIb,IAAM1d,EAAU,SAAA+Q,GACZ,IAAIn9B,EAASm9B,EAMb,OAJAlmC,OAAOmV,QAAQsoC,GAAOvgC,QAAQ,SAAAk0B,GAAkB,IAAA7H,EAAAD,GAAA8H,EAAA,GAAhBnvC,EAAgBsnC,EAAA,GAAX9nC,EAAW8nC,EAAA,GAC5CxgC,EAASunC,GAAWvnC,EAAX,IAAuB9G,EAAvB,IAA+BR,KAGrCsH,GAIP8pC,IACIxyC,GAAG0zB,OAAOvwB,KAAKssC,OAAO+D,UACtBhI,EAAY1W,EAAQ0W,GACbxrC,GAAG4mC,QAAQ4E,KAClBA,EAAUiF,UAAY3b,EAAQ0W,EAAUiF,aAKhD,IZ94CgB7J,EY84CZhiC,OAAAA,EA2BJ,GAxBI5E,GAAG0zB,OAAOvwB,KAAKssC,OAAOsE,UAAUP,SAAShI,aACzC5mC,EAAS7E,SAAS2rC,cAAcvoC,KAAKssC,OAAOsE,UAAUP,SAAShI,YAI9DxrC,GAAG4mC,QAAQhiC,KACZA,EAASzB,KAAKolC,SAASiD,WAK3B5mC,EADqB5E,GAAG4mC,QAAQ4E,GAAa,wBAA0B,sBAClD,aAAcA,GAG9BxrC,GAAG4mC,QAAQzjC,KAAKolC,SAASiL,WAC1BA,GAASM,aAAanzC,KAAKwC,MAI3B1E,OAAOyrB,UAAUwP,UAAU1c,SAAS,UZp6CxB4pB,EYq6CJhiC,EZp6ChByjB,WAAW,WACPoiB,GAAa7D,GAAS,GACtBA,EAAQ0W,aACR7S,GAAa7D,GAAS,IACvB,IYo6CKzjC,KAAKssC,OAAOoJ,SAASrF,SAAU,CAAA,IAAA+J,EACGp6C,KAAKssC,OAA/BsF,EADuBwI,EACvBxI,WAAYhB,EADWwJ,EACXxJ,UACd3J,EAAc2J,EAAUP,SAASt1B,QAAjC,IAA4C61B,EAAUyJ,OAAtD,KAAiEzI,EAAWrK,OAC5E8S,EAASjS,GAAY5qC,KAAKwC,KAAMinC,GAEtCn/B,MAAM+K,KAAKwnC,GAAQ3gC,QAAQ,SAAAu5B,GACvBvL,GAAYuL,EAAO+G,EAAK1N,OAAOsF,WAAWrK,QAAQ,GAClDG,GAAYuL,EAAO+G,EAAK1N,OAAOsF,WAAWC,SAAS,QC57C5D,SAASyI,GAAS5X,GAAoB,IACrC5B,EAAM4B,EAEV,KAHyCjiC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,KAAAA,UAAA,GAG/B,CACN,IAAM85C,EAAS39C,SAASE,cAAc,KACtCy9C,EAAO7Z,KAAOI,EACdA,EAAMyZ,EAAO7Z,KAGjB,IACI,OAAO,IAAIF,IAAIM,GACjB,MAAOzkC,GACL,OAAO,MAKR,SAASm+C,GAAe9X,GAC3B,IAAM9D,EAAS,IAAIkB,gBAQnB,OANIjjC,GAAG2B,OAAOkkC,IACVlmC,OAAOmV,QAAQ+wB,GAAOhpB,QAAQ,SAAAmsB,GAAkB,IAAA+H,EAAA9H,GAAAD,EAAA,GAAhBpnC,EAAgBmvC,EAAA,GAAX3vC,EAAW2vC,EAAA,GAC5ChP,EAAOn1B,IAAIhL,EAAKR,KAIjB2gC,ECbX,IAAMwS,IAEFqJ,MAFa,WAIT,GAAKz6C,KAAKmkC,UAAUkG,GAKpB,IAAKrqC,KAAK06C,SAAW16C,KAAK26C,WAAc36C,KAAK+qC,UAAYjB,GAAQoB,WAGzDruC,GAAGwmC,MAAMrjC,KAAKssC,OAAO+D,WACrBrwC,KAAKssC,OAAO+D,SAASx2B,SAAS,aAC9B7Z,KAAKssC,OAAO6E,SAASt3B,SAAS,aAE9Bw2B,GAASkH,gBAAgB/5C,KAAKwC,UAPtC,CfsCD,IAAqByjC,EAAShiC,EehB7B,GARK5E,GAAG4mC,QAAQzjC,KAAKolC,SAASgM,YAC1BpxC,KAAKolC,SAASgM,SAAWt0C,GAAc,MAAO+pC,GAA0B7mC,KAAKssC,OAAOsE,UAAUQ,WfuB9E3N,EerBJzjC,KAAKolC,SAASgM,UfqBD3vC,EerBWzB,KAAKolC,SAASrqB,SfsBnDyqB,WAAWG,aAAalC,EAAShiC,EAAOikC,cejBvCuD,GAAQC,MAAQ5tC,OAAOklC,IAAK,CAC5B,IAAM4E,EAAWplC,KAAKgrC,MAAM7C,iBAAiB,SAE7CrgC,MAAM+K,KAAKuyB,GAAU1rB,QAAQ,SAAAsqB,GACzB,IAAMnhC,EAAMmhC,EAAMyH,aAAa,OACzB3K,EAAMwZ,GAASz3C,GAGT,OAARi+B,GACAA,EAAIkB,WAAa1mC,OAAOknC,SAAS9B,KAAKsB,WACrC,QAAS,UAAUnoB,SAASinB,EAAIQ,WAEjCmN,GAAM5rC,EAAK,QACNokB,KAAK,SAAAob,GACF2B,EAAMiC,aAAa,MAAO3qC,OAAOklC,IAAI4B,gBAAgBC,MAExDxY,MAAM,WACHwc,GAAcrC,OAalC,IAAM4W,EAAY/M,GACd/lC,MAAM+K,KAAKkU,UAAU6zB,WAAa7zB,UAAU6wB,UAAY7wB,UAAU8zB,cAAc9gC,IAAI,SAAA69B,GAAA,OAAYA,EAASr4C,MAAM,KAAK,MAGpHq4C,GAAY53C,KAAKkuC,QAAQxxC,IAAI,aAAesD,KAAKssC,OAAO8E,SAASwG,UAAY,QAAQ1K,cAGzF,GAAiB,SAAb0K,EACCA,EADoB9R,GACR8U,EADQ,GAAA,GAIzB,IAAIE,EAAS96C,KAAKkuC,QAAQxxC,IAAI,YAa9B,GAZKG,GAAGsmC,QAAQ2X,KACTA,EAAW96C,KAAKssC,OAAO8E,SAAvB0J,QAGPt+C,OAAOwjB,OAAOhgB,KAAKoxC,UACfuG,SAAS,EACTmD,OAAAA,EACAlD,SAAAA,EACAgD,UAAAA,IAIA56C,KAAK+qC,QAAS,CACd,IAAMgQ,EAAc/6C,KAAKssC,OAAO8E,SAAS/B,OAAS,uBAAyB,cAC3E1K,GAAGnnC,KAAKwC,KAAMA,KAAKgrC,MAAME,WAAY6P,EAAa3J,GAAS/B,OAAOrtB,KAAKhiB,OAI3EklB,WAAWksB,GAAS/B,OAAOrtB,KAAKhiB,MAAO,KAI3CqvC,OA/Fa,WA+FJ,IAAApP,EAAAjgC,KACCy3C,EAASrG,GAASsG,UAAUl6C,KAAKwC,MAAM,GADxCg7C,EAGgDh7C,KAAKoxC,SAAlD0J,EAHHE,EAGGF,OAAQlD,EAHXoD,EAGWpD,SAAUz6B,EAHrB69B,EAGqB79B,KAAM89B,EAH3BD,EAG2BC,iBAC1BC,EAAiBtY,QAAQ6U,EAAOl+B,KAAK,SAAAyqB,GAAA,OAASA,EAAM4T,WAAaA,KAGnE53C,KAAK+qC,SAAW/qC,KAAK06C,SACrBjD,EAAOn+B,OAAO,SAAA0qB,GAAA,OAAU7mB,EAAKzgB,IAAIsnC,KAAQtqB,QAAQ,SAAAsqB,GAC7C/D,EAAKuM,MAAMrlC,IAAI,cAAe68B,GAE9B7mB,EAAK1T,IAAIu6B,GACLsT,QAAwB,YAAftT,EAAMmX,OAInBnX,EAAMmX,KAAO,SAGbxW,GAAGnnC,KAAKyiC,EAAM+D,EAAO,YAAa,WAAA,OAAMoN,GAASgK,WAAW59C,KAAKyiC,QAKpEib,GAAkBl7C,KAAK43C,WAAaA,IAAcH,EAAO59B,SAASohC,MACnE7J,GAASiK,YAAY79C,KAAKwC,KAAM43C,GAChCxG,GAASlqB,OAAO1pB,KAAKwC,KAAM86C,GAAUI,IAIzCxT,GAAY1nC,KAAKolC,SAASiD,UAAWroC,KAAKssC,OAAOsF,WAAWR,SAASnD,SAAUpxC,GAAG2qB,MAAMiwB,KAGnFz3C,KAAKssC,OAAO+D,cAAgBx2B,SAAS,aAAe7Z,KAAKssC,OAAO6E,SAASt3B,SAAS,aACnFw2B,GAASkH,gBAAgB/5C,KAAKwC,OAMtCknB,OAvIa,SAuINwb,GAAuB,IAAhB6B,IAAgB9jC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,KAAAA,UAAA,GAE1B,GAAKT,KAAKmkC,UAAUkG,GAApB,CAF0B,IAMlBsN,EAAY33C,KAAKoxC,SAAjBuG,QACF2D,EAAct7C,KAAKssC,OAAOsF,WAAWR,SAAS0J,OAI9CA,EAASj+C,GAAGqmC,gBAAgBR,IAAUiV,EAAUjV,EAGtD,GAAIoY,IAAWnD,EAAS,CAQpB,GANKpT,IACDvkC,KAAKoxC,SAAS0J,OAASA,EACvB96C,KAAKkuC,QAAQzkC,KAAM2nC,SAAU0J,MAI5B96C,KAAK43C,UAAYkD,IAAWvW,EAAS,CACtC,IAAMkT,EAASrG,GAASsG,UAAUl6C,KAAKwC,MACjCgkC,EAAQoN,GAASmK,UAAU/9C,KAAKwC,MAAOA,KAAKoxC,SAASwG,UAA7C14C,6HAAAs8C,CAA0Dx7C,KAAKoxC,SAASwJ,aAAY,GAOlG,OAJA56C,KAAKoxC,SAASwG,SAAW5T,EAAM4T,cAG/BxG,GAAS3nC,IAAIjM,KAAKwC,KAAMy3C,EAAO99B,QAAQqqB,IAKvChkC,KAAKolC,SAASyL,QAAQO,WACtBpxC,KAAKolC,SAASyL,QAAQO,SAASkC,QAAUwH,GAI7CpT,GAAY1nC,KAAKolC,SAASiD,UAAWiT,EAAaR,GAElD96C,KAAKoxC,SAASuG,QAAUmD,EAGxBzK,GAAS8G,cAAc35C,KAAKwC,KAAM,YAGlCilC,GAAaznC,KAAKwC,KAAMA,KAAKgrC,MAAO8P,EAAS,kBAAoB,uBAMzErxC,IA7La,SA6LTlF,GAAuB,IAAhBggC,IAAgB9jC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,KAAAA,UAAA,GACjBg3C,EAASrG,GAASsG,UAAUl6C,KAAKwC,MAGvC,IAAe,IAAXuE,EAKJ,GAAK1H,GAAG4G,OAAOc,GAKf,GAAMA,KAASkzC,EAAf,CAKA,GAAIz3C,KAAKoxC,SAASiG,eAAiB9yC,EAAO,CACtCvE,KAAKoxC,SAASiG,aAAe9yC,EAC7B,IAAMy/B,EAAQyT,EAAOlzC,GACbqzC,GAAa5T,OAAb4T,SAGR53C,KAAKoxC,SAAS6J,iBAAmBjX,EAGjCqM,GAAS8G,cAAc35C,KAAKwC,KAAM,YAG7BukC,IACDvkC,KAAKoxC,SAASwG,SAAWA,EACzB53C,KAAKkuC,QAAQzkC,KAAMmuC,SAAAA,KAInB53C,KAAKi4C,SACLj4C,KAAKy7C,MAAMC,gBAAgB9D,GAI/B3S,GAAaznC,KAAKwC,KAAMA,KAAKgrC,MAAO,kBAIxCoG,GAASlqB,OAAO1pB,KAAKwC,MAAM,EAAMukC,GAE7BvkC,KAAK+qC,SAAW/qC,KAAK06C,SAErBtJ,GAASgK,WAAW59C,KAAKwC,WAnCzBA,KAAKwsC,MAAMsF,KAAK,kBAAmBvtC,QALnCvE,KAAKwsC,MAAMsF,KAAK,2BAA4BvtC,QAL5C6sC,GAASlqB,OAAO1pB,KAAKwC,MAAM,EAAOukC,IAmD1C8W,YArPa,SAqPD3Y,GAAuB,IAAhB6B,IAAgB9jC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,KAAAA,UAAA,GAC/B,GAAK5D,GAAG0zB,OAAOmS,GAAf,CAKA,IAAMkV,EAAWlV,EAAMwK,cACvBltC,KAAKoxC,SAASwG,SAAWA,EAGzB,IAAMH,EAASrG,GAASsG,UAAUl6C,KAAKwC,MACjCgkC,EAAQoN,GAASmK,UAAU/9C,KAAKwC,MAAO43C,IAC7CxG,GAAS3nC,IAAIjM,KAAKwC,KAAMy3C,EAAO99B,QAAQqqB,GAAQO,QAV3CvkC,KAAKwsC,MAAMsF,KAAK,4BAA6BpP,IAgBrDgV,UAvQa,WAuQa,IAAAjC,EAAAz1C,KAAhBqvC,EAAgB5uC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,GAKtB,OAHeqH,MAAM+K,MAAM7S,KAAKgrC,WAAaE,gBAIxC5xB,OAAO,SAAA0qB,GAAA,OAAUyR,EAAK1K,SAAWsE,GAAUoG,EAAKrE,SAASj0B,KAAKxd,IAAIqkC,KAClE1qB,OAAO,SAAA0qB,GAAA,OAAU,WAAY,aAAanqB,SAASmqB,EAAM7yB,SAIlEoqC,UAlRa,SAkRHX,GAA0B,IAAA/D,EAAA72C,KAAf2nC,EAAelnC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,GAC1Bg3C,EAASrG,GAASsG,UAAUl6C,KAAKwC,MACjC27C,EAAgB,SAAA3X,GAAA,OAASjR,QAAQ8jB,EAAKzF,SAASj0B,KAAKzgB,IAAIsnC,QAAcsT,UACtEsE,EAAS9zC,MAAM+K,KAAK4kC,GAAQlgC,KAAK,SAAC5a,EAAG2D,GAAJ,OAAUq7C,EAAcr7C,GAAKq7C,EAAch/C,KAC9EqnC,OAAAA,EAMJ,OALA4W,EAAUxhC,MAAM,SAAAw+B,GAEZ,QADA5T,EAAQ4X,EAAOriC,KAAK,SAAAyqB,GAAA,OAASA,EAAM4T,WAAaA,OAI7C5T,IAAU2D,EAAQiU,EAAO,QAAKz8C,IAIzC08C,gBAhSa,WAiST,OAAOzK,GAASsG,UAAUl6C,KAAKwC,MAAMA,KAAKq3C,eAI9CJ,SArSa,SAqSJjT,GACL,IAAIqT,EAAerT,EAMnB,OAJKnnC,GAAGmnC,MAAMqT,IAAiBvN,GAAQoB,YAAclrC,KAAKoxC,SAASuG,UAC/DN,EAAejG,GAASyK,gBAAgBr+C,KAAKwC,OAG7CnD,GAAGmnC,MAAMqT,GACJx6C,GAAG2qB,MAAM6vB,EAAapE,OAItBp2C,GAAG2qB,MAAM6vB,EAAaO,UAIpBrK,GAAS,UAAWvtC,KAAKssC,QAHrBtI,EAAM4T,SAAS5K,cAJfqK,EAAapE,MAUrB1F,GAAS,WAAYvtC,KAAKssC,SAKrC8O,WA7Ta,SA6TF1Y,GAEP,GAAK1iC,KAAKmkC,UAAUkG,GAIpB,GAAKxtC,GAAG4mC,QAAQzjC,KAAKolC,SAASgM,UAM9B,GAAKv0C,GAAGqmC,gBAAgBR,IAAW56B,MAAMkH,QAAQ0zB,GAAjD,CAKA,IAAIoZ,EAAOpZ,EAGX,IAAKoZ,EAAM,CACP,IAAM9X,EAAQoN,GAASyK,gBAAgBr+C,KAAKwC,MAC5C87C,EAAOh0C,MAAM+K,MAAMmxB,OAAa+X,gBAC3BhiC,IAAI,SAAA8pB,GAAA,OAAOA,EAAImY,iBACfjiC,IAAIszB,IAIb,IAAMqC,EAAUoM,EAAK/hC,IAAI,SAAAkiC,GAAA,OAAWA,EAAQ/U,SAAQrnC,KAAK,MAGzD,GAFgB6vC,IAAY1vC,KAAKolC,SAASgM,SAAS9D,UAEtC,CAEThH,GAAatmC,KAAKolC,SAASgM,UAC3B,IAAM8K,EAAUp/C,GAAc,OAAQ+pC,GAA0B7mC,KAAKssC,OAAOsE,UAAUsL,UACtFA,EAAQ5O,UAAYoC,EACpB1vC,KAAKolC,SAASgM,SAASpjC,YAAYkuC,GAGnCjX,GAAaznC,KAAKwC,KAAMA,KAAKgrC,MAAO,mBA1BpChrC,KAAKwsC,MAAMsF,KAAK,4BAA6BpP,QAN7C1iC,KAAKwsC,MAAMsF,KAAK,sCCxVtBqK,IAEFlO,SAAS,EAGTN,MAAO,GAGPnB,OAAO,EAGP4P,UAAU,EAGVC,WAAW,EAIXnS,aAAa,EAGbuD,SAAU,GAGVgE,OAAQ,EACRqD,OAAO,EAGPpD,SAAU,KAIV8E,iBAAiB,EAGjBJ,YAAY,EAGZkG,cAAc,EAGdC,MAAO,OAGPC,aAAa,EAGbC,cAAc,EAGdC,YAAY,EAGZC,oBAAoB,EAGpB1N,YAAY,EACZiD,WAAY,OACZ1B,QAAS,sCAGTjE,WAAY,uCAGZH,SACIkL,QAAS,IACTlT,SACI,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,YAKRwY,MACI9B,QAAQ,GAMZ9C,OACI6E,SAAU,EACVzY,SAAU,GAAK,IAAM,EAAG,KAAM,IAAK,KAAM,IAI7C0Y,UACIrU,SAAS,EACTttC,QAAQ,GAIZu6C,UACIrF,UAAU,EACVmB,MAAM,GAIVJ,UACI0J,QAAQ,EACRlD,SAAU,OAGVvI,QAAQ,GAIZgC,YACIpD,SAAS,EACT8O,UAAU,EACVC,WAAW,GAIf9O,SACID,SAAS,EACTxvC,IAAK,QAIT4xC,UACI,aAGA,OAEA,WACA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,cAEJc,UAAW,WAAY,UAAW,SAGlC5D,MACIwD,QAAS,UACTC,OAAQ,qBACR9E,KAAM,OACN4E,MAAO,QACPG,YAAa,sBACbO,KAAM,OACNyL,UAAW,8BACXhJ,OAAQ,SACRoB,SAAU,WACVvJ,YAAa,eACb4F,SAAU,WACVD,OAAQ,SACRP,KAAM,OACNgM,OAAQ,SACRC,eAAgB,kBAChBC,gBAAiB,mBACjBC,gBAAiB,mBACjBC,eAAgB,kBAChBC,WAAY,qBACZnM,SAAU,WACVD,SAAU,WACVqM,SAAU,2BACVxF,MAAO,QACPyF,OAAQ,SACRrR,QAAS,UACTwQ,KAAM,OACNtzC,MAAO,QACPrD,IAAK,MACLikB,IAAK,MACLqR,MAAO,QACPmiB,SAAU,WACVzP,QAAS,UACT0P,cAAe,KACfC,cACIC,KAAM,KACNC,KAAM,KACNC,KAAM,KACNC,IAAK,KACLC,IAAK,KACLC,IAAK,OAKbC,MACIC,OACIC,IAAK,yCACLxwC,OAAQ,yCACRu8B,IAAK,2CAETkU,SACID,IAAK,qCACLjU,IACI,yGAERmU,WACIF,IAAK,uDAKbG,WACIhN,KAAM,KACNtF,KAAM,KACN4E,MAAO,KACPC,QAAS,KACTC,OAAQ,KACRC,YAAa,KACbC,KAAM,KACNO,OAAQ,KACRL,SAAU,KACVC,WAAY,KACZ9G,IAAK,KACLE,QAAS,KACTuN,MAAO,KACP5L,QAAS,KACTwQ,KAAM,KACNhF,SAAU,MAIdnT,QAGI,QACA,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,YAGA,kBACA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,QAGA,cACA,gBACA,mBAGA,YACA,kBACA,mBACA,YACA,cACA,cACA,iBACA,gBACA,YAKJmM,WACI6N,SAAU,6CACVpW,UAAW,QACXgI,UACIhI,UAAW,KACXttB,QAAS,mBAEbs/B,OAAQ,cACRxJ,SACI3E,KAAM,qBACN4E,MAAO,sBACPC,QAAS,wBACTC,OAAQ,uBACRC,YAAa,6BACbC,KAAM,qBACNE,SAAU,yBACVC,WAAY,2BACZ9G,IAAK,oBACLE,QAAS,wBACT0G,SAAU,yBACVyL,KAAM,sBAEVrL,QACIC,KAAM,qBACNC,OAAQ,uBACRuG,MAAO,sBACPJ,SAAU,yBACVxL,QAAS,yBAEbr+B,SACI+9B,YAAa,uBACb4F,SAAU,wBACV7pC,OAAQ,0BACR+0C,KAAM,wBACNnL,OAAQ,0BAEZH,SAAU,kBACVF,SAAU,kBACV8K,QAAS,iBACTrJ,MACIzG,QAAS,kCAKjBwF,YACIjxC,KAAM,YACNspC,SAAU,YACVD,MAAO,sBACPyR,MAAO,oBACPiD,eAAgB,+BAChBC,OAAQ,eACRC,cAAe,uBACfC,IAAK,YACLzL,QAAS,gBACTC,eAAgB,yBAChByL,QAAS,gBACT/S,OAAQ,eACRgT,QAAS,gBACTC,QAAS,gBACTC,MAAO,cACPpN,QAAS,gBACTiK,KAAM,aACNvU,OAAQ,gBACRkV,aAAc,sBACdlT,MAAO,eACP2V,QAAS,iBACTC,YAAa,gBACbC,aAAc,sBACdvM,MACI50C,MAAO,oBACP20C,MAAO,cACP1kC,KAAM,mBAEVkjC,UACInD,QAAS,yBACT6M,OAAQ,yBAEZzJ,YACIpD,QAAS,2BACT8O,SAAU,6BAEdxS,KACIpG,UAAW,sBACX2W,OAAQ,oBAEZrQ,SACItG,UAAW,0BACX2W,OAAQ,wBAEZuE,SAAU,mBAIdz8B,YACI64B,OACIxR,SAAU,qBACVnrC,GAAI,uBAKZiL,MACIu1C,OAAQ,MAKZT,KACI5Q,SAAS,EACTsR,YAAa,KCzYRC,IACTjU,MAAO,QACP+S,QAAS,UACTF,MAAO,SAGEqB,IACT1V,MAAO,QACPC,MAAO,SCRX,IAAM0V,GAAO,aAEQC,GAAAA,WACjB,SAAAA,IAA6B,IAAjB1R,EAAiBxtC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,GAAAutC,GAAAhuC,KAAA2/C,GACzB3/C,KAAKiuC,QAAU3yC,OAAOstB,SAAWqlB,EAE7BjuC,KAAKiuC,SACLjuC,KAAKmH,IAAI,4DAMb,OAAOnH,KAAKiuC,QAAUxyC,SAASsE,UAAUiiB,KAAKxkB,KAAKorB,QAAQzhB,IAAKyhB,SAAW82B,gCAK3E,OAAO1/C,KAAKiuC,QAAUxyC,SAASsE,UAAUiiB,KAAKxkB,KAAKorB,QAAQkpB,KAAMlpB,SAAW82B,iCAK5E,OAAO1/C,KAAKiuC,QAAUxyC,SAASsE,UAAUiiB,KAAKxkB,KAAKorB,QAAQO,MAAOP,SAAW82B,SArBhEC,GCIrB,SAASC,KACL,GAAK5/C,KAAKiuC,QAAV,CAKA,IAAM+E,EAAShzC,KAAK4rC,OAAOxG,SAASyL,QAAQQ,WACxCx0C,GAAG4mC,QAAQuP,KACXA,EAAOM,QAAUtzC,KAAK86C,QAI1B7V,GAAaznC,KAAKwC,KAAK4rC,OAAQ5rC,KAAKyB,OAAQzB,KAAK86C,OAAS,kBAAoB,kBAAkB,GAG3F7R,GAAQM,OnBqOV,WAAmD,IAAhC9F,EAAgChjC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAtB,KAAMymB,EAAgBzmB,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,GACtD,GAAK5D,GAAG4mC,QAAQA,GAAhB,CAIA,IAAM6O,EAAYlK,GAAY5qC,KAAKwC,KAAM,2DACnCmM,EAAQmmC,EAAU,GAClB9rB,EAAO8rB,EAAUA,EAAUlyC,OAAS,GAsB1CkkC,GAAe9mC,KAAKwC,KAAMA,KAAKolC,SAASiD,UAAW,UApBtC,SAAA/jB,GAET,GAAkB,QAAdA,EAAM7lB,KAAmC,IAAlB6lB,EAAMu7B,QAAjC,CAKA,IAAMpX,EAAUD,KAEZC,IAAYjiB,GAASlC,EAAMw7B,SAIpBrX,IAAYt8B,GAASmY,EAAMw7B,WAElCt5B,EAAK6yB,QACL/0B,EAAMoa,mBALNvyB,EAAMktC,QACN/0B,EAAMoa,oBAQsDxX,GAAQ,KmBjQ9D1pB,KAAKwC,KAAK4rC,OAAQ5rC,KAAKyB,OAAQzB,KAAK86C,SAItD,SAASiF,KAA+B,IAAhB74B,EAAgBzmB,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,GAEhCymB,EACAlnB,KAAKggD,gBACDj2B,EAAGzuB,OAAO2kD,SAAW,EACrBtyB,EAAGryB,OAAO4kD,SAAW,GAGzB5kD,OAAO6kD,SAASngD,KAAKggD,eAAej2B,EAAG/pB,KAAKggD,eAAeryB,GAI/D/wB,SAASykC,KAAKvzB,MAAMsyC,SAAWl5B,EAAS,SAAW,GAGnDwgB,GAAY1nC,KAAKyB,OAAQzB,KAAK4rC,OAAOU,OAAOsF,WAAWP,WAAW0L,SAAU71B,GAG5E04B,GAASpiD,KAAKwC,UAGZqgD,GAAAA,WACF,SAAAA,EAAYzU,GAAQ,IAAA3L,EAAAjgC,KAAAguC,GAAAhuC,KAAAqgD,GAEhBrgD,KAAK4rC,OAASA,EAGd5rC,KAAKyvC,OAAS4Q,EAAW5Q,OACzBzvC,KAAKsgD,SAAWD,EAAWC,SAG3BtgD,KAAKggD,gBAAmBj2B,EAAG,EAAG4D,EAAG,GAIjCgX,GAAGnnC,KACCwC,KAAK4rC,OACLhvC,SACgB,OAAhBoD,KAAKyvC,OAAkB,qBAA0BzvC,KAAKyvC,OAAtD,mBACA,WAEImQ,GAASpiD,KAAKyiC,KAKtB0E,GAAGnnC,KAAKwC,KAAK4rC,OAAQ5rC,KAAK4rC,OAAOxG,SAASiD,UAAW,WAAY,SAAA/jB,GAEzDznB,GAAG4mC,QAAQxD,EAAK2L,OAAOxG,SAASiL,WAAapQ,EAAK2L,OAAOxG,SAASiL,SAASxI,SAASvjB,EAAM7iB,SAI9Fw+B,EAAK/Y,WAITlnB,KAAKqvC,qDA2EDrvC,KAAKiuC,QACLjuC,KAAK4rC,OAAOY,MAAMrlC,KAAOk5C,EAAWE,OAAS,SAAW,YAAxD,uBAEAvgD,KAAK4rC,OAAOY,MAAMrlC,IAAI,kDAI1BugC,GAAY1nC,KAAK4rC,OAAOxG,SAASiD,UAAWroC,KAAK4rC,OAAOU,OAAOsF,WAAWP,WAAWpD,QAASjuC,KAAKiuC,yCAK9FjuC,KAAKiuC,UAKNhF,GAAQM,OAASvpC,KAAK4rC,OAAOU,OAAO+E,WAAW2L,UAC3Ch9C,KAAK4rC,OAAOkT,SACZ9+C,KAAKyB,OAAO++C,wBAERH,EAAWE,OAEXvgD,KAAKyvC,OAEL5yC,GAAG2qB,MAAMxnB,KAAKyvC,SACtBzvC,KAAKyB,OAAUzB,KAAKyvC,OAApB,UAAoCzvC,KAAKsgD,YAFzCtgD,KAAKyB,OAAOg/C,oBAFZV,GAAeviD,KAAKwC,MAAM,mCAU9B,GAAKA,KAAKiuC,QAKV,GAAIhF,GAAQM,OAASvpC,KAAK4rC,OAAOU,OAAO+E,WAAW2L,UAC/Ch9C,KAAKyB,OAAOi/C,uBACZ1gD,KAAK4rC,OAAOM,YACT,GAAKmU,EAAWE,OAEhB,GAAKvgD,KAAKyvC,QAEV,IAAK5yC,GAAG2qB,MAAMxnB,KAAKyvC,QAAS,CAC/B,IAAMkR,EAAyB,QAAhB3gD,KAAKyvC,OAAmB,SAAW,OAClD7yC,SAAAA,GAAYoD,KAAKyvC,OAASkR,EAAS3gD,KAAKsgD,kBAHvC1jD,SAASgkD,kBAAoBhkD,SAAS0gD,gBAAgB9/C,KAAKZ,eAF5DmjD,GAAeviD,KAAKwC,MAAM,oCAWzBA,KAAK86C,OAGN96C,KAAK6mB,OAFL7mB,KAAK8mB,wCAtFT,OACKu5B,EAAWE,QAAUvgD,KAAK4rC,OAAOU,OAAO+E,WAAW0L,WACpD/8C,KAAK4rC,OAAOU,OAAO+E,WAAWpD,SAC9BjuC,KAAK4rC,OAAOzH,UAAUkG,IACtBrqC,KAAK4rC,OAAO8O,uCAMhB,QAAK16C,KAAKiuC,UAKLoS,EAAWE,QAICvgD,KAAKyvC,OAAsC7yC,SAAAA,GAAYoD,KAAKyvC,OAASzvC,KAAKsgD,SAA/B,WAA7B1jD,SAASikD,qBAErB7gD,KAAKyB,OALbqmC,GAAS9nC,KAAKyB,OAAQzB,KAAK4rC,OAAOU,OAAOsF,WAAWP,WAAW0L,0CAU1E,OAAO9T,GAAQM,OAASvpC,KAAK4rC,OAAOU,OAAO+E,WAAW2L,UAChDh9C,KAAK4rC,OAAOZ,MACZhrC,KAAK4rC,OAAOxG,SAASiD,2CAjE3B,SACIzrC,SAASkkD,mBACTlkD,SAASmkD,yBACTnkD,SAASokD,sBACTpkD,SAASqkD,oDAOb,GAAIpkD,GAAGumC,SAASxmC,SAAS0gD,gBACrB,MAAO,GAIX,IAAIr/C,EAAQ,GAYZ,OAXkB,SAAU,MAAO,MAE1Bgc,KAAK,SAAAinC,GACV,SAAIrkD,GAAGumC,SAASxmC,SAAYskD,EAAZ,qBAAqCrkD,GAAGumC,SAASxmC,SAAYskD,EAAZ,wBAC7DjjD,EAAQijD,GACD,KAMRjjD,mCAIP,MAAuB,QAAhB+B,KAAKyvC,OAAmB,aAAe,mBAxEhD4Q,GC7CS,SAASc,GAAUt+C,GAAmB,IAAdu+C,EAAc3gD,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,GAAH,EAC9C,OAAO,IAAI+kB,QAAQ,SAACG,EAASC,GACzB,IAAMy7B,EAAQ,IAAIC,MAEZ/4B,EAAU,kBACL84B,EAAME,cACNF,EAAMG,SACZH,EAAMI,cAAgBL,EAAWz7B,EAAUC,GAAQy7B,IAGxD7kD,OAAOwjB,OAAOqhC,GAASE,OAAQh5B,EAASi5B,QAASj5B,EAAS1lB,IAAAA,MCFlE,IAAMwnC,IACFqX,aADO,WAEHha,GAAY1nC,KAAKolC,SAASiD,UAAWroC,KAAKssC,OAAOsE,UAAUvI,UAAU1W,QAAQ,IAAK,KAAK,GACvF+V,GAAY1nC,KAAKolC,SAASiD,UAAWroC,KAAKssC,OAAOsF,WAAWuN,YAAan/C,KAAKmkC,UAAUkG,KAI5F0H,qBAPO,WAO8BtxC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,IACnBT,KAAK+qC,QACf/qC,KAAKgrC,MAAM/E,aAAa,WAAY,IAEpCjmC,KAAKgrC,MAAMvD,gBAAgB,aAKnCka,MAhBO,WAgBC,IAAA1hB,EAAAjgC,KAMJ,GAHAA,KAAKw+C,UAAUxT,SAGVhrC,KAAKmkC,UAAUkG,GAOhB,OANArqC,KAAKwsC,MAAMsF,KAAX,0BAA0C9xC,KAAKiqC,SAA/C,IAA2DjqC,KAAKW,WAGhE0pC,GAAG0H,qBAAqBv0C,KAAKwC,MAAM,GAOlCnD,GAAG4mC,QAAQzjC,KAAKolC,SAASiL,YAE1BA,GAAS0J,OAAOv8C,KAAKwC,MAGrBA,KAAKw+C,UAAUnO,YAInBhG,GAAG0H,qBAAqBv0C,KAAKwC,MAGzBA,KAAK+qC,SACLqG,GAASqJ,MAAMj9C,KAAKwC,MAIxBA,KAAKyxC,OAAS,KAGdzxC,KAAK80C,MAAQ,KAGb90C,KAAKg4C,MAAQ,KAGbh4C,KAAK48C,KAAO,KAGZ58C,KAAKosC,QAAU,KAGfiE,GAASuE,aAAap3C,KAAKwC,MAG3BqwC,GAAS6F,WAAW14C,KAAKwC,MAGzBqqC,GAAGuX,aAAapkD,KAAKwC,MAGrB0nC,GACI1nC,KAAKolC,SAASiD,UACdroC,KAAKssC,OAAOsF,WAAWrH,IAAIpG,UAC3B2F,GAAQS,KAAOvqC,KAAK+qC,SAAW/qC,KAAK06C,SAIxChT,GAAY1nC,KAAKolC,SAASiD,UAAWroC,KAAKssC,OAAOsF,WAAWnH,QAAQtG,UAAW2F,GAAQW,SAAWzqC,KAAK+qC,SAGvGrD,GAAY1nC,KAAKolC,SAASiD,UAAWroC,KAAKssC,OAAOsF,WAAWrI,MAAON,GAAQM,OAG3E7B,GAAY1nC,KAAKolC,SAASiD,UAAWroC,KAAKssC,OAAOsF,WAAWsN,QAASl/C,KAAKmrC,OAG1EnrC,KAAK6hD,OAAQ,EAGb38B,WAAW,WACP+f,GAAaznC,KAAKyiC,EAAMA,EAAK+K,MAAO,UACrC,GAGHX,GAAGyX,SAAStkD,KAAKwC,MAGbA,KAAK2+C,QACLtU,GAAG0X,UAAUvkD,KAAKwC,KAAMA,KAAK2+C,QAAQ,GAAO90B,MAAM,cAKlD7pB,KAAKssC,OAAOoF,UACZrB,GAASiG,eAAe94C,KAAKwC,OAKrC8hD,SAjHO,WAmHH,IAAI7O,EAAQ1F,GAAS,OAAQvtC,KAAKssC,QAclC,GAXIzvC,GAAG0zB,OAAOvwB,KAAKssC,OAAOqB,SAAW9wC,GAAG2qB,MAAMxnB,KAAKssC,OAAOqB,SACtDsF,GAAAA,KAAcjzC,KAAKssC,OAAOqB,OAI9B7lC,MAAM+K,KAAK7S,KAAKolC,SAASyL,QAAQ3E,UAAYxyB,QAAQ,SAAAs5B,GACjDA,EAAO/M,aAAa,aAAcgN,KAKlCjzC,KAAKgiD,QAAS,CACd,IAAMn0C,EAASy6B,GAAW9qC,KAAKwC,KAAM,UAErC,IAAKnD,GAAG4mC,QAAQ51B,GACZ,OAIJ,IAAM8/B,EAAS9wC,GAAG2qB,MAAMxnB,KAAKssC,OAAOqB,OAA6B,QAApB3tC,KAAKssC,OAAOqB,MACnDd,EAASU,GAAS,aAAcvtC,KAAKssC,QAE3Cz+B,EAAOo4B,aAAa,QAAS4G,EAAOlb,QAAQ,UAAWgc,MAK/DsU,aAjJO,SAiJMC,GACTxa,GAAY1nC,KAAKolC,SAASiD,UAAWroC,KAAKssC,OAAOsF,WAAWgN,cAAesD,IAK/EH,UAvJO,SAuJGpD,GAAwB,IAAAlJ,EAAAz1C,KAE9B,OAF8BS,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,KAAAA,UAAA,KAEfT,KAAK2+C,QAKpB3+C,KAAKgrC,MAAM/E,aAAa,SAAU0Y,GtBzDnC,WAAiB,IAAAlJ,EAAAz1C,KACpB,OAAO,IAAIwlB,QACP,SAAAG,GAAA,OAAY8vB,EAAKoM,MAAQ38B,WAAWS,EAAS,GAAKgf,GAAGnnC,KAAKi4C,EAAMA,EAAKrQ,SAASiD,UAAW,QAAS1iB,KACpGsB,KAAK,esB2DMzpB,KAAKwC,MAELinB,KAAK,WAAA,OAAMk6B,GAAUxC,KACrB90B,MAAM,SAAAH,GAMH,MAJIi1B,IAAWlJ,EAAKkJ,QAChBtU,GAAG4X,aAAazkD,KAAKi4C,GAAM,GAGzB/rB,IAETzC,KAAK,WAEF,GAAI03B,IAAWlJ,EAAKkJ,OAChB,MAAM,IAAI9hB,MAAM,oDAGvB5V,KAAK,WAOF,OANAzqB,OAAOwjB,OAAOy1B,EAAKrQ,SAASuZ,OAAO7wC,OAC/Bq0C,gBAAAA,QAAyBxD,EAAzB,KAEAyD,eAAgB,KAEpB/X,GAAG4X,aAAazkD,KAAKi4C,GAAM,GACpBkJ,KAjCRn5B,QAAQI,OAAO,IAAIiX,MAAM,wBAuCxC+kB,aAjMO,SAiMMt9B,GAAO,IAAAuyB,EAAA72C,KAEhB0nC,GAAY1nC,KAAKolC,SAASiD,UAAWroC,KAAKssC,OAAOsF,WAAWkN,QAAS9+C,KAAK8+C,SAC1EpX,GAAY1nC,KAAKolC,SAASiD,UAAWroC,KAAKssC,OAAOsF,WAAW7F,OAAQ/rC,KAAK+rC,QACzErE,GAAY1nC,KAAKolC,SAASiD,UAAWroC,KAAKssC,OAAOsF,WAAWmN,QAAS/+C,KAAK++C,SAG1Ej3C,MAAM+K,KAAK7S,KAAKolC,SAASyL,QAAQ3E,UAAYxyB,QAAQ,SAAAjY,GACjDA,EAAO6xC,QAAUuD,EAAKiI,UAItBjiD,GAAGynB,MAAMA,IAAyB,eAAfA,EAAM3jB,MAK7B0pC,GAAGgY,eAAe7kD,KAAKwC,OAI3BsiD,aAtNO,SAsNMh+B,GAAO,IAAAkzB,EAAAx3C,KAChBA,KAAKg/C,SAAW,UAAW,WAAWnlC,SAASyK,EAAM3jB,MAGrD4hD,aAAaviD,KAAKwiD,OAAOxD,SAGzBh/C,KAAKwiD,OAAOxD,QAAU95B,WAAW,WAE7BwiB,GAAY8P,EAAKpS,SAASiD,UAAWmP,EAAKlL,OAAOsF,WAAWoN,QAASxH,EAAKwH,SAG1E3U,GAAGgY,eAAe7kD,KAAKg6C,IACxBx3C,KAAKg/C,QAAU,IAAM,IAI5BqD,eAvOO,SAuOQ1a,GAAO,IACV0I,EAAarwC,KAAKolC,SAAlBiL,SAEJA,GAAYrwC,KAAKssC,OAAOmQ,cAExBz8C,KAAKqiD,eAAezf,QAAQ+E,GAAS3nC,KAAKg/C,SAAWh/C,KAAK+rC,QAAUsE,EAASiD,SAAWjD,EAAS4O,UC/OvGwD,GAAAA,WACF,SAAAA,EAAY7W,GAAQoC,GAAAhuC,KAAAyiD,GAChBziD,KAAK4rC,OAASA,EACd5rC,KAAK0iD,QAAU,KAEf1iD,KAAK2iD,UAAY3iD,KAAK2iD,UAAU3gC,KAAKhiB,MACrCA,KAAKm4C,WAAan4C,KAAKm4C,WAAWn2B,KAAKhiB,MACvCA,KAAK4iD,WAAa5iD,KAAK4iD,WAAW5gC,KAAKhiB,mDAIjCskB,GAAO,IAAA2b,EAAAjgC,KACPquB,EAAO/J,EAAMu7B,QAAUv7B,EAAMu7B,QAAUv7B,EAAMu+B,MAC7CvP,EAAyB,YAAfhvB,EAAM3jB,KAChBkuB,EAASykB,GAAWjlB,IAASruB,KAAK0iD,QAGxC,KAAIp+B,EAAMw+B,QAAUx+B,EAAMy+B,SAAWz+B,EAAM0+B,SAAW1+B,EAAMw7B,WAMvDjjD,GAAG4G,OAAO4qB,GAAf,CAYA,GAAIilB,EAAS,CAET,IAKM7K,EAAUD,KAChB,GACI3rC,GAAG4mC,QAAQgF,IACVA,IAAYzoC,KAAK4rC,OAAOxG,SAASmM,OAAOC,MACrCzJ,GAAQU,EAASzoC,KAAK4rC,OAAOU,OAAOsE,UAAU6N,UAElD,OASJ,QApBwB,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAerF5kC,SAASwU,KACxB/J,EAAMoa,iBACNpa,EAAMk0B,mBAGFnqB,GACJ,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GAEIQ,IAvCboR,EAAK2L,OAAOE,YAAc7L,EAAK2L,OAAO8F,SAAW,IAAMrjB,EAAO,KA0CtD,MAEJ,KAAK,GACL,KAAK,GAEIQ,GACD7uB,KAAK4rC,OAAOqX,aAEhB,MAEJ,KAAK,GAEDjjD,KAAK4rC,OAAOsX,eAAe,IAC3B,MAEJ,KAAK,GAEDljD,KAAK4rC,OAAOuX,eAAe,IAC3B,MAEJ,KAAK,GAEIt0B,IACD7uB,KAAK4rC,OAAOkJ,OAAS90C,KAAK4rC,OAAOkJ,OAErC,MAEJ,KAAK,GAED90C,KAAK4rC,OAAOwX,UACZ,MAEJ,KAAK,GAEDpjD,KAAK4rC,OAAOoF,SACZ,MAEJ,KAAK,GAEDhxC,KAAK4rC,OAAOyF,WAAWnqB,SACvB,MAEJ,KAAK,GAEI2H,GACD7uB,KAAK4rC,OAAOyX,iBAEhB,MAEJ,KAAK,GAEDrjD,KAAK4rC,OAAOgR,MAAQ58C,KAAK4rC,OAAOgR,MAqBnC58C,KAAK4rC,OAAOyF,WAAWpD,SAAWjuC,KAAK4rC,OAAOyF,WAAWyJ,QAAmB,KAATzsB,GACpEruB,KAAK4rC,OAAOyF,WAAWnqB,SAI3BlnB,KAAK0iD,QAAUr0B,OAEfruB,KAAK0iD,QAAU,yCAKZp+B,GACP+rB,GAAS8H,WAAW36C,KAAKwC,KAAK4rC,OAAQtnB,wCAKtCtkB,KAAK4rC,OAAOT,OAAQ,EAGpBzD,GAAY1nC,KAAK4rC,OAAOxG,SAASiD,UAAWroC,KAAK4rC,OAAOU,OAAOsF,WAAWsN,SAAS,oCAIjE,IAAfh4B,IAAezmB,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,KAAAA,UAAA,GAEdT,KAAK4rC,OAAOU,OAAOwQ,SAAS3hD,QAC5BmpC,GAAe9mC,KAAKwC,KAAK4rC,OAAQtwC,OAAQ,gBAAiB0E,KAAK2iD,UAAWz7B,GAAQ,GAItFod,GAAe9mC,KAAKwC,KAAK4rC,OAAQhvC,SAASykC,KAAM,QAASrhC,KAAKm4C,WAAYjxB,GAG1E2d,GAAKrnC,KAAKwC,KAAK4rC,OAAQhvC,SAASykC,KAAM,aAAcrhC,KAAK4iD,gDAIjD,IAAAnN,EAAAz1C,MAEHA,KAAK4rC,OAAOU,OAAOwQ,SAAS3hD,QAAU6E,KAAK4rC,OAAOU,OAAOwQ,SAASrU,SACnE9D,GAAGnnC,KAAKwC,KAAK4rC,OAAQ5rC,KAAK4rC,OAAOxG,SAASiD,UAAW,gBAAiBroC,KAAK2iD,WAAW,GAK1Fhe,GAAGnnC,KAAKwC,KAAK4rC,OAAQ5rC,KAAK4rC,OAAOxG,SAASiD,UAAW,WAAY,SAAA/jB,GAC7DojB,GAAYpjB,EAAM7iB,OAAQg0C,EAAK7J,OAAOU,OAAOsF,WAAWyN,UAAU,KAGtE1a,GAAGnnC,KAAKwC,KAAK4rC,OAAQ5rC,KAAK4rC,OAAOxG,SAASiD,UAAW,UAAW,SAAA/jB,GACtC,IAAlBA,EAAMu7B,SAMV36B,WAAW,WACPwiB,GAAYc,KAAmBiN,EAAK7J,OAAOU,OAAOsF,WAAWyN,UAAU,IACxE,KAIP1a,GAAGnnC,KACCwC,KAAK4rC,OACL5rC,KAAK4rC,OAAOxG,SAASiD,UACrB,2EACA,SAAA/jB,GAAS,IACG+rB,EAAaoF,EAAK7J,OAAOxG,SAAzBiL,SAGW,oBAAf/rB,EAAM3jB,OACN0vC,EAASiD,SAAU,EACnBjD,EAAS4O,OAAQ,GAIrB,IAEIqE,EAAQ,GAFE,aAAc,YAAa,aAAazpC,SAASyK,EAAM3jB,QAKjE0pC,GAAGgY,eAAe7kD,KAAKi4C,EAAK7J,QAAQ,GAEpC0X,EAAQ7N,EAAK7J,OAAOT,MAAQ,IAAO,KAIvCoX,aAAa9M,EAAK7J,OAAO4W,OAAOnS,UAEhCoF,EAAK7J,OAAO4W,OAAOnS,SAAWnrB,WAAW,WAAA,OAAMmlB,GAAGgY,eAAe7kD,KAAKi4C,EAAK7J,QAAQ,IAAQ0X,qCAM/F,IAAAzM,EAAA72C,KA8DJ,GA5DA2kC,GAAGnnC,KAAKwC,KAAK4rC,OAAQ5rC,KAAK4rC,OAAOZ,MAAO,4BAA6B,SAAA1mB,GAAA,OACjE+rB,GAAS6F,WAAW14C,KAAKq5C,EAAKjL,OAAQtnB,KAI1CqgB,GAAGnnC,KAAKwC,KAAK4rC,OAAQ5rC,KAAK4rC,OAAOZ,MAAO,2CAA4C,SAAA1mB,GAAA,OAChF+rB,GAASiG,eAAe94C,KAAKq5C,EAAKjL,OAAQtnB,KAK9CqgB,GAAGnnC,KAAKwC,KAAK4rC,OAAQ5rC,KAAK4rC,OAAOZ,MAAO,UAAW,WAC/C1D,GAAauP,EAAKjL,OAAOxG,SAASqM,QAASoF,EAAKjL,OAAO2X,UACvDjc,GAAauP,EAAKjL,OAAOxG,SAASyL,QAAQK,MAAO2F,EAAKjL,OAAO2X,YAIjE5e,GAAGnnC,KAAKwC,KAAK4rC,OAAQ5rC,KAAK4rC,OAAOZ,MAAO,QAAS,WAEzC6L,EAAKjL,OAAOb,SAAW8L,EAAKjL,OAAO8O,SAAW7D,EAAKjL,OAAOU,OAAOoQ,YAEjE7F,EAAKjL,OAAOmF,YAKpBpM,GAAGnnC,KAAKwC,KAAK4rC,OAAQ5rC,KAAK4rC,OAAOZ,MAAO,kCAAmC,SAAA1mB,GAAA,OACvE+rB,GAAS0E,eAAev3C,KAAKq5C,EAAKjL,OAAQtnB,KAI9CqgB,GAAGnnC,KAAKwC,KAAK4rC,OAAQ5rC,KAAK4rC,OAAOZ,MAAO,eAAgB,SAAA1mB,GAAA,OACpD+rB,GAASuE,aAAap3C,KAAKq5C,EAAKjL,OAAQtnB,KAI5CqgB,GAAGnnC,KAAKwC,KAAK4rC,OAAQ5rC,KAAK4rC,OAAOZ,MAAO,8CAA+C,SAAA1mB,GAAA,OACnF+lB,GAAGuX,aAAapkD,KAAKq5C,EAAKjL,OAAQtnB,KAItCqgB,GAAGnnC,KAAKwC,KAAK4rC,OAAQ5rC,KAAK4rC,OAAOZ,MAAO,iCAAkC,SAAA1mB,GAAA,OACtE+lB,GAAGiY,aAAa9kD,KAAKq5C,EAAKjL,OAAQtnB,KAKtCqgB,GAAGnnC,KAAKwC,KAAK4rC,OAAQ5rC,KAAK4rC,OAAOZ,MAAO,UAAW,WAC1C6L,EAAKjL,OAAOiT,KAKbhI,EAAKjL,OAAOiT,IAAI5Q,UAAY4I,EAAKjL,OAAOiT,IAAI2E,aAE5C3M,EAAKjL,OAAOiT,IAAI4E,eAAex8B,KAAK,WAAA,OAAM4vB,EAAKjL,OAAOiT,IAAI3S,SAAQriB,MAAM,WAAA,OAAMgtB,EAAKjL,OAAOM,WAK9FlsC,KAAK4rC,OAAOzH,UAAUkG,IAAMrqC,KAAK4rC,OAAOU,OAAOkQ,cAAgBx8C,KAAK4rC,OAAO8X,QAAS,CAEpF,IAAM3oC,EAAUutB,GAAW9qC,KAAKwC,KAAK4rC,OAArB,IAAiC5rC,KAAK4rC,OAAOU,OAAOsF,WAAW5H,OAG/E,IAAKntC,GAAG4mC,QAAQ1oB,GACZ,OAIJ4pB,GAAGnnC,KAAKwC,KAAK4rC,OAAQ7wB,EAAS,QAAS,WAE/B87B,EAAKjL,OAAOU,OAAOmQ,cAAgB5F,EAAKjL,OAAOT,QAAU0L,EAAKjL,OAAOG,SAIrE8K,EAAKjL,OAAOG,OACZ8K,EAAKjL,OAAOM,OACL2K,EAAKjL,OAAO+X,OACnB9M,EAAKjL,OAAOmF,UACZ8F,EAAKjL,OAAOM,QAEZ2K,EAAKjL,OAAOkF,WAMpB9wC,KAAK4rC,OAAOzH,UAAUkG,IAAMrqC,KAAK4rC,OAAOU,OAAOqQ,oBAC/ChY,GAAGnnC,KACCwC,KAAK4rC,OACL5rC,KAAK4rC,OAAOxG,SAASrqB,QACrB,cACA,SAAAuJ,GACIA,EAAMoa,mBAEV,GAKRiG,GAAGnnC,KAAKwC,KAAK4rC,OAAQ5rC,KAAK4rC,OAAOZ,MAAO,eAAgB,WAEpD6L,EAAKjL,OAAOsC,QAAQzkC,KAAMgoC,OAAQoF,EAAKjL,OAAO6F,OAAQqD,MAAO+B,EAAKjL,OAAOkJ,UAI7EnQ,GAAGnnC,KAAKwC,KAAK4rC,OAAQ5rC,KAAK4rC,OAAOZ,MAAO,aAAc,WAElDqF,GAAS8G,cAAc35C,KAAKq5C,EAAKjL,OAAQ,SAGzCiL,EAAKjL,OAAOsC,QAAQzkC,KAAMuuC,MAAOnB,EAAKjL,OAAOoM,UAIjDrT,GAAGnnC,KAAKwC,KAAK4rC,OAAQ5rC,KAAK4rC,OAAOZ,MAAO,mBAAoB,SAAA1mB,GAExDuyB,EAAKjL,OAAOsC,QAAQzkC,KAAM2iC,QAAS9nB,EAAM2a,OAAOmN,YAIpDzH,GAAGnnC,KAAKwC,KAAK4rC,OAAQ5rC,KAAK4rC,OAAOZ,MAAO,gBAAiB,SAAA1mB,GAErD+rB,GAAS8G,cAAc35C,KAAKq5C,EAAKjL,OAAQ,UAAW,KAAMtnB,EAAM2a,OAAOmN,WAK3E,IAAMwX,EAAc5jD,KAAK4rC,OAAOU,OAAO7H,OAAOvlC,QAAQ,QAAS,YAAYW,KAAK,KAChF8kC,GAAGnnC,KAAKwC,KAAK4rC,OAAQ5rC,KAAK4rC,OAAOZ,MAAO4Y,EAAa,SAAAt/B,GAAS,IAAAu/B,EACpCv/B,EAAhB2a,OAAAA,OADoD9/B,IAAA0kD,KAAAA,EAIvC,UAAfv/B,EAAM3jB,OACNs+B,EAAS4X,EAAKjL,OAAOZ,MAAM7hB,OAG/B8b,GAAaznC,KAAKq5C,EAAKjL,OAAQiL,EAAKjL,OAAOxG,SAASiD,UAAW/jB,EAAM3jB,MAAM,EAAMs+B,wCAK9E,IAAAuY,EAAAx3C,KAED8jD,EAAa7a,GAAQC,KAAO,SAAW,QAGvC6a,EAAQ,SAACz/B,EAAO0/B,EAAgBC,GAClC,IAAMC,EAAgB1M,EAAK5L,OAAOU,OAAOkS,UAAUyF,GAE/CE,GAAW,EADUtnD,GAAGumC,SAAS8gB,KAKjCC,EAAWD,EAAc1mD,KAAKg6C,EAAK5L,OAAQtnB,IAI3C6/B,GAAYtnD,GAAGumC,SAAS4gB,IACxBA,EAAexmD,KAAKg6C,EAAK5L,OAAQtnB,IAKnCtC,EAAO,SAACyhB,EAAS9iC,EAAMqjD,EAAgBC,GAAqC,IAAnB1f,IAAmB9jC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,KAAAA,UAAA,GACxEyjD,EAAgB1M,EAAK5L,OAAOU,OAAOkS,UAAUyF,GAC7CG,EAAmBvnD,GAAGumC,SAAS8gB,GAErCvf,GAAGnnC,KACCg6C,EAAK5L,OACLnI,EACA9iC,EACA,SAAA2jB,GAAA,OAASy/B,EAAMz/B,EAAO0/B,EAAgBC,IACtC1f,IAAY6f,IAKhBpkD,KAAK4rC,OAAOxG,SAASyL,QAAQ3E,MAC7BpkC,MAAM+K,KAAK7S,KAAK4rC,OAAOxG,SAASyL,QAAQ3E,MAAMxyB,QAAQ,SAAAs5B,GAClDhxB,EAAKgxB,EAAQ,QAASwE,EAAK5L,OAAOqX,WAAY,UAKtDjhC,EAAKhiB,KAAK4rC,OAAOxG,SAASyL,QAAQE,QAAS,QAAS/wC,KAAK4rC,OAAOmF,QAAS,WAGzE/uB,EAAKhiB,KAAK4rC,OAAOxG,SAASyL,QAAQG,OAAQ,QAAShxC,KAAK4rC,OAAOoF,OAAQ,UAGvEhvB,EAAKhiB,KAAK4rC,OAAOxG,SAASyL,QAAQI,YAAa,QAASjxC,KAAK4rC,OAAOwX,QAAS,eAG7EphC,EACIhiB,KAAK4rC,OAAOxG,SAASyL,QAAQK,KAC7B,QACA,WACIsG,EAAK5L,OAAOkJ,OAAS0C,EAAK5L,OAAOkJ,OAErC,QAIJ9yB,EAAKhiB,KAAK4rC,OAAOxG,SAASyL,QAAQO,SAAU,QAAS,WAAA,OAAMoG,EAAK5L,OAAOyX,mBAGvErhC,EACIhiB,KAAK4rC,OAAOxG,SAASyL,QAAQQ,WAC7B,QACA,WACImG,EAAK5L,OAAOyF,WAAWnqB,UAE3B,cAIJlF,EACIhiB,KAAK4rC,OAAOxG,SAASyL,QAAQtG,IAC7B,QACA,WACIiN,EAAK5L,OAAOrB,IAAM,UAEtB,OAIJvoB,EAAKhiB,KAAK4rC,OAAOxG,SAASyL,QAAQpG,QAAS,QAASzqC,KAAK4rC,OAAOnB,QAAS,WAGzEzoB,EAAKhiB,KAAK4rC,OAAOxG,SAASyL,QAAQM,SAAU,QAAS,SAAA7sB,GACjD+rB,GAAS8H,WAAW36C,KAAKg6C,EAAK5L,OAAQtnB,KAI1CtC,EAAKhiB,KAAK4rC,OAAOxG,SAAS+L,SAASiH,KAAM,QAAS,SAAA9zB,GAC9CA,EAAMk0B,kBAGN,IAAM6L,EAAc,WAChB,IAAMvlD,EAAAA,iBAAsB04C,EAAK5L,OAAO9sC,GAAlC,QACNuxC,GAAS2I,QAAQx7C,KAAKg6C,EAAK5L,OAAQ9sC,IAIvC,GAAIipC,GAAQzjB,EAAM7iB,OAAQ+1C,EAAK5L,OAAOU,OAAOsE,UAAUW,OAAOqG,UAC1DmM,EACIz/B,EACA,WACIkzB,EAAK5L,OAAOyL,aAAetkB,OAAOzO,EAAM7iB,OAAOxD,OAC/ComD,KAEJ,iBAED,GAAItc,GAAQzjB,EAAM7iB,OAAQ+1C,EAAK5L,OAAOU,OAAOsE,UAAUW,OAAOnF,SACjE2X,EACIz/B,EACA,WACIkzB,EAAK5L,OAAOQ,QAAU9nB,EAAM7iB,OAAOxD,MACnComD,KAEJ,gBAED,GAAItc,GAAQzjB,EAAM7iB,OAAQ+1C,EAAK5L,OAAOU,OAAOsE,UAAUW,OAAOyG,OACjE+L,EACIz/B,EACA,WACIkzB,EAAK5L,OAAOoM,MAAQ/B,WAAW3xB,EAAM7iB,OAAOxD,OAC5ComD,KAEJ,aAED,CACH,IAAMnM,EAAM5zB,EAAM7iB,OAClB4uC,GAAS2I,QAAQx7C,KAAKg6C,EAAK5L,OAAQsM,EAAIzM,aAAa,qBAK5DzpB,EAAKhiB,KAAK4rC,OAAOxG,SAASmM,OAAOC,KAAM,sBAAuB,SAAAltB,GAC1D,IAAMqxB,EAAa6B,EAAK5L,OAAOxG,SAASkM,SAASsE,wBAC3CN,EAAU,IAAMK,EAAWI,OAASzxB,EAAM0xB,MAAQL,EAAW3f,MACnE1R,EAAMggC,cAAcre,aAAa,aAAcqP,KAInDtzB,EAAKhiB,KAAK4rC,OAAOxG,SAASmM,OAAOC,KAAM,sDAAuD,SAAAltB,GAC1F,IAAMktB,EAAOltB,EAAMggC,cAEbj2B,EAAO/J,EAAMu7B,QAAUv7B,EAAMu7B,QAAUv7B,EAAMu+B,MAC7C0B,EAAYjgC,EAAM3jB,KAExB,GAAmB,YAAd4jD,GAAyC,UAAdA,GAAoC,KAATl2B,GAAwB,KAATA,EAA1E,CAIA,IAAM6d,EAAOsF,EAAKhK,aAAa,kBAGzBr3B,GAAQ,UAAW,WAAY,SAAS0J,SAASyK,EAAM3jB,MAGzDurC,GAAQ/7B,GACRqhC,EAAK/J,gBAAgB,kBACrB+P,EAAK5L,OAAOM,SACJ/7B,GAAQqnC,EAAK5L,OAAOkT,UAC5BtN,EAAKvL,aAAa,iBAAkB,IACpCuR,EAAK5L,OAAOkF,YAKpB9uB,EACIhiB,KAAK4rC,OAAOxG,SAASmM,OAAOC,KAC5BsS,EACA,SAAAx/B,GACI,IAAMktB,EAAOltB,EAAMggC,cAGfE,EAAShT,EAAK/F,aAAa,cAE3B5uC,GAAG2qB,MAAMg9B,KACTA,EAAShT,EAAKvzC,OAGlBuzC,EAAK/J,gBAAgB,cAErB+P,EAAK5L,OAAOE,YAAc0Y,EAAShT,EAAKntC,IAAMmzC,EAAK5L,OAAO8F,UAE9D,QAKA1xC,KAAK4rC,OAAOU,OAAOgQ,eAAiBz/C,GAAG4mC,QAAQzjC,KAAK4rC,OAAOxG,SAASr3B,QAAQ2jC,WAC5E1vB,EAAKhiB,KAAK4rC,OAAOxG,SAASr3B,QAAQ+9B,YAAa,QAAS,WAEpB,IAA5B0L,EAAK5L,OAAOE,cAIhB0L,EAAK5L,OAAOU,OAAO8J,YAAcoB,EAAK5L,OAAOU,OAAO8J,WAEpD/F,GAAS6F,WAAW14C,KAAKg6C,EAAK5L,WAKtC5pB,EACIhiB,KAAK4rC,OAAOxG,SAASmM,OAAOE,OAC5BqS,EACA,SAAAx/B,GACIkzB,EAAK5L,OAAO6F,OAASntB,EAAM7iB,OAAOxD,OAEtC,UAIAgrC,GAAQG,UACRthC,MAAM+K,KAAKu1B,GAAY5qC,KAAKwC,KAAK4rC,OAAQ,wBAAwBlyB,QAAQ,SAAA+pB,GACrEzhB,EAAKyhB,EAAS,QAAS,SAAAnf,GAAA,OAAS+rB,GAASwD,gBAAgBr2C,KAAKg6C,EAAK5L,OAAQtnB,EAAM7iB,YAKzFugB,EAAKhiB,KAAK4rC,OAAOxG,SAASkM,SAAU,kCAAmC,SAAAhtB,GAAA,OACnE+rB,GAASmF,kBAAkBh4C,KAAKg6C,EAAK5L,OAAQtnB,KAIjDtC,EAAKhiB,KAAK4rC,OAAOxG,SAASiL,SAAU,wBAAyB,SAAA/rB,GACzDkzB,EAAK5L,OAAOxG,SAASiL,SAAS4O,OAASzH,EAAK5L,OAAOT,OAAwB,eAAf7mB,EAAM3jB,OAItEqhB,EAAKhiB,KAAK4rC,OAAOxG,SAASiL,SAAU,oDAAqD,SAAA/rB,GACrFkzB,EAAK5L,OAAOxG,SAASiL,SAASiD,SAAW,YAAa,cAAcz5B,SAASyK,EAAM3jB,QAIvFqhB,EAAKhiB,KAAK4rC,OAAOxG,SAASiL,SAAU,mBAAoB,SAAA/rB,GAAS,IAAAmgC,EACxBjN,EAAK5L,OAAlCU,EADqDmY,EACrDnY,OAAQlH,EAD6Cqf,EAC7Crf,SAAUod,EADmCiC,EACnCjC,OAS1B,GANA9a,GAAYtC,EAASiL,SAAU/D,EAAOsF,WAAWwN,aAA6B,YAAf96B,EAAM3jB,MAGrE0pC,GAAGgY,eAAe7kD,KAAKg6C,EAAK5L,OAAuB,YAAftnB,EAAM3jB,MAGvB,YAAf2jB,EAAM3jB,KAAoB,CAE1BukB,WAAW,WACPwiB,GAAYtC,EAASiL,SAAU/D,EAAOsF,WAAWwN,cAAc,IAChE,GAGH,IAAMkE,EAAQ9L,EAAKrM,MAAQ,IAAO,IAGlCoX,aAAaC,EAAOnS,UAEpBmS,EAAOnS,SAAWnrB,WAAW,WAAA,OAAMmlB,GAAGgY,eAAe7kD,KAAKg6C,EAAK5L,QAAQ,IAAQ0X,MAKvFthC,EACIhiB,KAAK4rC,OAAOxG,SAASmM,OAAOE,OAC5B,QACA,SAAAntB,GAGI,IAAM2rB,EAAW3rB,EAAMogC,kCAHlBC,GAMWrgC,EAAMsgC,QAAStgC,EAAMugC,QAAQ9qC,IAAI,SAAA9b,GAAA,OAAUgyC,GAAYhyC,EAAQA,IAN1E6mD,EAAAhf,GAAA6e,EAAA,GAME56B,EANF+6B,EAAA,GAMKn3B,EANLm3B,EAAA,GASCC,EAAYxpD,KAAK+3B,KAAK/3B,KAAK0L,IAAI8iB,GAAKxuB,KAAK0L,IAAI0mB,GAAK5D,EAAI4D,GAG5D6pB,EAAK5L,OAAOsX,eAAe6B,EAAY,IAZlC,IAeGtT,EAAW+F,EAAK5L,OAAOZ,MAAvByG,QACW,IAAdsT,GAAmBtT,EAAS,IAAsB,IAAfsT,GAAoBtT,EAAS,IACjEntB,EAAMoa,kBAGd,UACA,SAnqBN+jB,sBCXL,IAAeuC,EAAAA,EAQR,WAMR,IAAIC,EAAU,aACVC,KACAC,KACAC,KAmDJ,SAASC,EAAQC,EAAUC,GAEzB,GAAKD,EAAL,CAEA,IAAIE,EAAIJ,EAAoBE,GAM5B,GAHAH,EAAkBG,GAAYC,EAGzBC,EAGL,KAAOA,EAAEplD,QACPolD,EAAE,GAAGF,EAAUC,GACfC,EAAE9kC,OAAO,EAAG,IAUhB,SAAS+kC,EAAiB7jC,EAAM8jC,GAE1B9jC,EAAKpkB,OAAMokB,GAAQ+jC,QAAS/jC,IAG5B8jC,EAAatlD,QAASwhB,EAAKuH,OAAS87B,GAASS,IAC3C9jC,EAAK+jC,SAAWV,GAASrjC,GASjC,SAASgkC,EAASlZ,EAAMmZ,EAAYjkC,EAAMkkC,GACxC,IAKIC,EACA1pD,EANA2kC,EAAMpkC,SACNq+B,EAAQrZ,EAAKqZ,MACb+qB,GAAYpkC,EAAKqkC,YAAc,GAAK,EACpCC,EAAmBtkC,EAAKukC,QAAUlB,EAClCmB,EAAe1Z,EAAK/a,QAAQ,cAAe,IAI/Cm0B,EAAWA,GAAY,EAEnB,iBAAiBhnC,KAAK4tB,IACxBqZ,GAAQ,GAGR1pD,EAAI2kC,EAAIlkC,cAAc,SACpBupD,IAAM,aACRhqD,EAAEqkC,KAAO0lB,GACA,+BAA+BtnC,KAAK4tB,IAE7CrwC,EAAI2kC,EAAIlkC,cAAc,QACpB+F,IAAMujD,IAGR/pD,EAAI2kC,EAAIlkC,cAAc,WACpB+F,IAAM6pC,EACRrwC,EAAE4+B,WAAkB97B,IAAV87B,GAA6BA,GAGzC5+B,EAAEklD,OAASllD,EAAEmlD,QAAUnlD,EAAEiqD,aAAe,SAAUC,GAChD,IAAIhhD,EAASghD,EAAG5lD,KAAK,GAIrB,GAAIolD,GAAS,cAAe1pD,EAC1B,IACOA,EAAEmqD,MAAMC,QAAQrmD,SAAQmF,EAAS,KACtC,MAAOwkB,GAGPxkB,EAAS,IAKb,GAAc,KAAVA,IAEFugD,GAAY,GAGGE,EACb,OAAOJ,EAASlZ,EAAMmZ,EAAYjkC,EAAMkkC,GAK5CD,EAAWnZ,EAAMnnC,EAAQghD,EAAG5nB,oBAII,IAA9BunB,EAAiBxZ,EAAMrwC,IAAc2kC,EAAIza,KAAKvY,YAAY3R,GA+ChE,SAASqqD,EAAOC,EAAOC,EAAMC,GAC3B,IAAIvB,EACA1jC,EASJ,GANIglC,GAAQA,EAAK1f,OAAMoe,EAAWsB,GAGlChlC,GAAQ0jC,EAAWuB,EAAOD,OAGtBtB,EAAU,CACZ,GAAIA,KAAYJ,EACd,KAAM,SAENA,EAAcI,IAAY,GArDhC,SAAmBqB,EAAOd,EAAYjkC,GAIpC,IAGIvkB,EACAoF,EAJAqkD,GAFJH,EAAQA,EAAMnhD,KAAOmhD,GAASA,IAEPvmD,OACnB2pB,EAAI+8B,EACJvB,KAqBJ,IAhBAloD,EAAK,SAASqvC,EAAMnnC,EAAQo5B,GAM1B,GAJc,KAAVp5B,GAAeggD,EAAc//C,KAAKknC,GAIxB,KAAVnnC,EAAe,CACjB,IAAIo5B,EACC,OADiB4mB,EAAc//C,KAAKknC,KAI3Coa,GACiBjB,EAAWN,IAIzB9iD,EAAE,EAAGA,EAAIsnB,EAAGtnB,IAAKmjD,EAASe,EAAMlkD,GAAIpF,EAAIukB,GA+B7CmlC,CAAUJ,EAAO,SAAUpB,GAEzBE,EAAiB7jC,EAAM2jC,GAGvBF,EAAQC,EAAUC,IACjB3jC,GAiDL,OAxCA8kC,EAAO7E,MAAQ,SAAemF,EAAMplC,GAOlC,OAxOF,SAAmBqlC,EAAWpB,GAE5BoB,EAAYA,EAAUzhD,KAAOyhD,GAAaA,GAE1C,IAGI5pD,EACAioD,EACAjnC,EALAqnC,KACAjjD,EAAIwkD,EAAU7mD,OACd0mD,EAAarkD,EAejB,IARApF,EAAK,SAAUioD,EAAUC,GACnBA,EAAcnlD,QAAQslD,EAAalgD,KAAK8/C,KAE5CwB,GACiBjB,EAAWH,IAIvBjjD,KACL6iD,EAAW2B,EAAUxkD,IAGrB4b,EAAI8mC,EAAkBG,IAEpBjoD,EAAGioD,EAAUjnC,IAKX+mC,EAAoBE,GAAYF,EAAoBE,QACtD9/C,KAAKnI,GAkMT6pD,CAAUF,EAAM,SAAUtB,GAExBD,EAAiB7jC,EAAM8jC,KAGlBgB,GAQTA,EAAOv2C,KAAO,SAAcm1C,GAC1BD,EAAQC,OAOVoB,EAAOnrB,MAAQ,WACb2pB,KACAC,KACAC,MAQFsB,EAAOS,UAAY,SAAmB7B,GACpC,OAAOA,KAAYJ,GAKdwB,GA9RHtrD,EAAAC,QAAiB2pD,MCEN,SAASoC,GAAWtmB,GAC/B,OAAO,IAAItb,QAAQ,SAACG,EAASC,GACzB8gC,GAAO5lB,GACH6kB,QAAShgC,EACTwD,MAAOvD,MC2BnB,SAASyhC,GAAoBnb,GACrBA,IAASlsC,KAAKy7C,MAAM6L,YACpBtnD,KAAKy7C,MAAM6L,WAAY,GAEvBtnD,KAAKgrC,MAAMe,SAAWG,IACtBlsC,KAAKgrC,MAAMe,QAAUG,EACrBjH,GAAaznC,KAAKwC,KAAMA,KAAKgrC,MAAOkB,EAAO,OAAS,UAI5D,IAAMkS,IACF3D,MADU,WACF,IAAAxa,EAAAjgC,KAEJ0nC,GAAY1nC,KAAKolC,SAASrqB,QAAS/a,KAAKssC,OAAOsF,WAAW6J,OAAO,GAGjE2C,GAAMmJ,eAAe/pD,KAAKwC,MAGrBnD,GAAG2B,OAAOlD,OAAOksD,OASlBpJ,GAAMyD,MAAMrkD,KAAKwC,MARjBonD,GAAWpnD,KAAKssC,OAAO6R,KAAKC,MAAMC,KAC7Bp3B,KAAK,WACFm3B,GAAMyD,MAAMrkD,KAAKyiC,KAEpBpW,MAAM,SAAAV,GACH8W,EAAKuM,MAAMsF,KAAK,2BAA4B3oB,MAS5Do+B,eAxBU,SAwBK7kB,GAAO,IAAA1R,GACFn0B,GAAG0zB,OAAOmS,GAASA,EAAQ1iC,KAAKssC,OAAOiQ,OAAOh9C,MAAM,KADlDkoD,EAAA3hB,GAAA9U,EAAA,GAEZ02B,EAAU,IAFED,EAAA,GAAAA,EAAA,GAKlB,GAFAznD,KAAKolC,SAASrqB,QAAQjN,MAAM65C,cAAmBD,EAA/C,IAEI1nD,KAAKmkC,UAAUkG,GAAI,CACnB,IACM1/B,GADS,IACU+8C,GAAV,IAEf1nD,KAAKgrC,MAAMl9B,MAAM85C,UAAjB,eAA4Cj9C,EAA5C,OAKRk3C,MAtCU,WAsCF,IAAApM,EAAAz1C,KACE4rC,EAAS5rC,KAeT4+B,EAAS4b,IAXXoC,KAAMhR,EAAOU,OAAOsQ,KAAK9B,OACzBsB,SAAUxQ,EAAOwQ,SAEjByL,QAAQ,EACRC,UAAU,EACVna,OAAO,EACPqK,OAAO,EACP+P,YAAa,EACbC,QAAS,QACT9d,aAAclqC,KAAKssC,OAAO+E,WAAW2L,YAKrCn8C,EAAS+qC,EAAOZ,MAAMS,aAAa,OAGnC5uC,GAAG2qB,MAAM3mB,KACTA,EAAS+qC,EAAOZ,MAAMS,aAAaG,EAAOU,OAAO1pB,WAAW64B,MAAM38C,KAGtE,IA/FSgiC,EA+FHhiC,GA/FGgiC,EA+FUjgC,EA9FnBhE,GAAG2qB,MAAMsZ,GACF,KAGPjkC,GAAG4G,OAAOsvB,OAAO+N,IACVA,EAIJA,EAAIhT,MADG,mCACY+B,OAAOo4B,GAAKnnB,GAwF5BjzB,EAAS/Q,GAAc,UACvB+F,EAAMgqC,GAAOjB,EAAOU,OAAO6R,KAAKC,MAAMvwC,OAAQ/O,EAAI8/B,GACxD/wB,EAAOo4B,aAAa,MAAOpjC,GAC3BgL,EAAOo4B,aAAa,kBAAmB,IACvCp4B,EAAOo4B,aAAa,oBAAqB,IACzCp4B,EAAOo4B,aAAa,QAAS,YAlCzB,IAwCElrB,EAAUje,GAAc,OAAS6hD,OAHpB/S,EAAX+S,OAGuCtX,MAAOuE,EAAOU,OAAOsF,WAAW8M,iBAC/E3jC,EAAQ/M,YAAYH,GACpB+9B,EAAOZ,MAAQvE,GAAe1rB,EAAS6wB,EAAOZ,OAG9CyD,GAAM5B,GAAOjB,EAAOU,OAAO6R,KAAKC,MAAMhU,IAAKtrC,GAAK,QAAQmoB,KAAK,SAAA6nB,GACzD,IAAIjyC,GAAG2qB,MAAMsnB,GAAb,CAKA,IAAMhO,EAAM,IAAIN,IAAIsO,EAAS,GAAGoZ,iBAGhCpnB,EAAIL,SAAcK,EAAIL,SAASlhC,MAAM,KAAK,GAA1C,OAGA8qC,GAAG0X,UAAUvkD,KAAKouC,EAAQ9K,EAAIJ,MAAM7W,MAAM,iBAK9C+hB,EAAO6P,MAAQ,IAAIngD,OAAOksD,MAAMW,OAAOt6C,GACnCwuC,UAAWzQ,EAAOU,OAAO+P,UACzBvH,MAAOlJ,EAAOkJ,QAGlBlJ,EAAOZ,MAAMe,QAAS,EACtBH,EAAOZ,MAAMc,YAAc,EAGvBF,EAAOzH,UAAUkG,IACjBuB,EAAO6P,MAAM2M,mBAIjBxc,EAAOZ,MAAMkB,KAAO,WAEhB,OADAmb,GAAoB7pD,KAAKouC,GAAQ,GAC1BA,EAAO6P,MAAMvP,QAGxBN,EAAOZ,MAAM8F,MAAQ,WAEjB,OADAuW,GAAoB7pD,KAAKouC,GAAQ,GAC1BA,EAAO6P,MAAM3K,SAGxBlF,EAAOZ,MAAMlP,KAAO,WAChB8P,EAAOkF,QACPlF,EAAOE,YAAc,GAxFrB,IA4FEA,EAAgBF,EAAOZ,MAAvBc,YACNtvC,OAAOC,eAAemvC,EAAOZ,MAAO,eAChCtuC,IAD+C,WAE3C,OAAOovC,GAEXriC,IAJ+C,SAI3CmtB,GAAM,IAIE6kB,EAAiC7P,EAAjC6P,MAAOzQ,EAA0BY,EAA1BZ,MAAOe,EAAmBH,EAAnBG,OAAQ0F,EAAW7F,EAAX6F,OACxB4W,EAAetc,IAAW0P,EAAM6L,UAGtCtc,EAAMqL,SAAU,EAChBpR,GAAaznC,KAAKouC,EAAQZ,EAAO,WAGjCxlB,QAAQG,QAAQ0iC,GAAgB5M,EAAM6M,UAAU,IAE3CrhC,KAAK,WAAA,OAAMw0B,EAAM8M,eAAe3xB,KAEhC3P,KAAK,WAAA,OAAMohC,GAAgB5M,EAAM3K,UAEjC7pB,KAAK,WAAA,OAAMohC,GAAgB5M,EAAM6M,UAAU7W,KAC3C5nB,MAAM,iBAOnB,IAAImuB,EAAQpM,EAAOU,OAAO0L,MAAM6E,SAChCrgD,OAAOC,eAAemvC,EAAOZ,MAAO,gBAChCtuC,IADgD,WAE5C,OAAOs7C,GAEXvuC,IAJgD,SAI5Ci5B,GACAkJ,EAAO6P,MACF+M,gBAAgB9lB,GAChBzb,KAAK,WACF+wB,EAAQtV,EACRuC,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,gBAE3CnhB,MAAM,SAAAV,GAEgB,UAAfA,EAAMvoB,MACNyvC,GAASyH,aAAat6C,KAAKouC,WA1I3C,IAiJE6F,EAAW7F,EAAOU,OAAlBmF,OACNj1C,OAAOC,eAAemvC,EAAOZ,MAAO,UAChCtuC,IAD0C,WAEtC,OAAO+0C,GAEXhoC,IAJ0C,SAItCi5B,GACAkJ,EAAO6P,MAAM6M,UAAU5lB,GAAOzb,KAAK,WAC/BwqB,EAAS/O,EACTuC,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,qBAzJhD,IA+JE8J,EAAUlJ,EAAOU,OAAjBwI,MACNt4C,OAAOC,eAAemvC,EAAOZ,MAAO,SAChCtuC,IADyC,WAErC,OAAOo4C,GAEXrrC,IAJyC,SAIrCi5B,GACA,IAAMxb,IAASrqB,GAAGsmC,QAAQT,IAASA,EAEnCkJ,EAAO6P,MAAM6M,UAAUphC,EAAS,EAAI0kB,EAAOU,OAAOmF,QAAQxqB,KAAK,WAC3D6tB,EAAQ5tB,EACR+d,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,qBAzKhD,IA+KE4R,EAAShR,EAAOU,OAAhBsQ,KACNpgD,OAAOC,eAAemvC,EAAOZ,MAAO,QAChCtuC,IADwC,WAEpC,OAAOkgD,GAEXnzC,IAJwC,SAIpCi5B,GACA,IAAMxb,EAASrqB,GAAGsmC,QAAQT,GAASA,EAAQkJ,EAAOU,OAAOsQ,KAAK9B,OAE9DlP,EAAO6P,MAAMgN,QAAQvhC,GAAQD,KAAK,WAC9B21B,EAAO11B,OAMnB,IAAIwhC,OAAAA,EACJ9c,EAAO6P,MACFkN,cACA1hC,KAAK,SAAAhpB,GACFyqD,EAAazqD,IAEhB4rB,MAAM,SAAAV,GACHssB,EAAKjJ,MAAMsF,KAAK3oB,KAGxB3sB,OAAOC,eAAemvC,EAAOZ,MAAO,cAChCtuC,IAD8C,WAE1C,OAAOgsD,KAKflsD,OAAOC,eAAemvC,EAAOZ,MAAO,SAChCtuC,IADyC,WAErC,OAAOkvC,EAAOE,cAAgBF,EAAO8F,YAK7ClsB,QAAQ0E,KAAK0hB,EAAO6P,MAAMmN,gBAAiBhd,EAAO6P,MAAMoN,mBAAmB5hC,KAAK,SAAA6hC,GAC5E,IAAMvM,EA9QlB,SAAwBxG,EAAO+C,GAC3B,IACMyD,EADW,SAAXwM,EAAY7rC,EAAG8rC,GAAJ,OAAiB,IAANA,EAAU9rC,EAAI6rC,EAASC,EAAG9rC,EAAI8rC,GAC5CD,CAAShT,EAAO+C,GAC9B,OAAU/C,EAAQwG,EAAlB,IAA2BzD,EAASyD,EA2Qd0M,CAAeH,EAAW,GAAIA,EAAW,IACvD1K,GAAMmJ,eAAe/pD,KAAKi4C,EAAM8G,KAIpC3Q,EAAO6P,MAAMyN,aAAatd,EAAOU,OAAO+P,WAAWp1B,KAAK,SAAAwW,GACpDmO,EAAOU,OAAO+P,UAAY5e,IAI9BmO,EAAO6P,MAAM0N,gBAAgBliC,KAAK,SAAA0mB,GAC9B/B,EAAOU,OAAOqB,MAAQA,EACtBtD,GAAGyX,SAAStkD,KAAKi4C,KAIrB7J,EAAO6P,MAAM2N,iBAAiBniC,KAAK,SAAAhpB,GAC/B6tC,EAAc7tC,EACdgnC,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,gBAI5CY,EAAO6P,MAAM4N,cAAcpiC,KAAK,SAAAhpB,GAC5B2tC,EAAOZ,MAAM0G,SAAWzzC,EACxBgnC,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,oBAI5CY,EAAO6P,MAAM6N,gBAAgBriC,KAAK,SAAAwwB,GAC9B7L,EAAOZ,MAAME,WAAauM,EAC1BrG,GAASqJ,MAAMj9C,KAAKouC,KAGxBA,EAAO6P,MAAM9W,GAAG,YAAa,SAAAkB,GAAmB,IAAA0jB,EAAA1jB,EAAhBiW,KACtB0N,QADsCrqD,IAAAoqD,KAAAA,GAClBxvC,IAAI,SAAA8pB,GAAA,OnBvQhBhjC,EmBuQiCgjC,EAAIqC,KnBtQrDujB,EAAW7sD,SAAS8sD,yBACpBjmB,EAAU7mC,SAASE,cAAc,OACvC2sD,EAASz7C,YAAYy1B,GACrBA,EAAQ6J,UAAYzsC,EACb4oD,EAASE,WAAWxjB,UALxB,IAAmBtlC,EAChB4oD,EACAhmB,ImBsQE2N,GAASgK,WAAW59C,KAAKouC,EAAQ4d,KAGrC5d,EAAO6P,MAAM9W,GAAG,SAAU,YAEtBiH,EAAO6P,MAAMmO,YAAY3iC,KAAK,SAAA8kB,GAC1Bsb,GAAoB7pD,KAAKouC,GAASG,GAC7BA,GACD9G,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,aAI5CnuC,GAAG4mC,QAAQmI,EAAO6P,MAAMhY,UAAYmI,EAAOzH,UAAUkG,KACvCuB,EAAO6P,MAAMhY,QAIrBwC,aAAa,YAAa,KAIxC2F,EAAO6P,MAAM9W,GAAG,OAAQ,WACpB0iB,GAAoB7pD,KAAKouC,GAAQ,GACjC3G,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,aAG5CY,EAAO6P,MAAM9W,GAAG,QAAS,WACrB0iB,GAAoB7pD,KAAKouC,GAAQ,KAGrCA,EAAO6P,MAAM9W,GAAG,aAAc,SAAAppB,GAC1BqwB,EAAOZ,MAAMqL,SAAU,EACvBvK,EAAcvwB,EAAKsuC,QACnB5kB,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,gBAG5CY,EAAO6P,MAAM9W,GAAG,WAAY,SAAAppB,GACxBqwB,EAAOZ,MAAMqK,SAAW95B,EAAK+5B,QAC7BrQ,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,YAGL,IAA/B4E,SAASr0B,EAAK+5B,QAAS,KACvBrQ,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,kBAK5CY,EAAO6P,MAAM4N,cAAcpiC,KAAK,SAAAhpB,GACxBA,IAAU2tC,EAAOZ,MAAM0G,WACvB9F,EAAOZ,MAAM0G,SAAWzzC,EACxBgnC,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,uBAKpDY,EAAO6P,MAAM9W,GAAG,SAAU,WACtBiH,EAAOZ,MAAMqL,SAAU,EACvBpR,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,YAG5CY,EAAO6P,MAAM9W,GAAG,QAAS,WACrBiH,EAAOZ,MAAMe,QAAS,EACtB9G,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,WAG5CY,EAAO6P,MAAM9W,GAAG,QAAS,SAAA1F,GACrB2M,EAAOZ,MAAM7hB,MAAQ8V,EACrBgG,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,WAI5C9lB,WAAW,WAAA,OAAMmlB,GAAGsX,MAAMnkD,KAAKouC,IAAS,KC5XhD,SAASke,GAAepnB,GACpB,IAWM/kB,EAAQnhB,OAAOmV,SAVjBo4C,OAAQ,KACRC,OAAQ,KACRC,OAAQ,KACRC,MAAO,IACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,IACPC,KAAM,MAG8B/wC,KAAK,SAAAoE,GAAA,OAASA,EAAM9D,SAAS6oB,KAErE,OAAI/kB,EAEOA,EAAMpE,KAAK,SAAAtb,GAAA,OAASA,IAAUykC,IAGlC,UAYX,SAAS2kB,GAAoBnb,GACrBA,IAASlsC,KAAKy7C,MAAM6L,YACpBtnD,KAAKy7C,MAAM6L,WAAY,GAEvBtnD,KAAKgrC,MAAMe,SAAWG,IACtBlsC,KAAKgrC,MAAMe,QAAUG,EACrBjH,GAAaznC,KAAKwC,KAAMA,KAAKgrC,MAAOkB,EAAO,OAAS,UAI5D,IrB5D0B1tC,GqB4DpB8/C,IACF7D,MADY,WACJ,IAAAxa,EAAAjgC,KAEJ0nC,GAAY1nC,KAAKolC,SAASrqB,QAAS/a,KAAKssC,OAAOsF,WAAW6J,OAAO,GAGjE6C,GAAQiJ,eAAe/pD,KAAKwC,MAGxBnD,GAAG2B,OAAOlD,OAAOivD,KAAO1tD,GAAGumC,SAAS9nC,OAAOivD,GAAGpC,QAC9C7J,GAAQuD,MAAMrkD,KAAKwC,OAGnBonD,GAAWpnD,KAAKssC,OAAO6R,KAAKG,QAAQD,KAAKx0B,MAAM,SAAAV,GAC3C8W,EAAKuM,MAAMsF,KAAK,6BAA8B3oB,KAKlD7tB,OAAOkvD,wBAA0BlvD,OAAOkvD,4BAGxClvD,OAAOkvD,wBAAwBhlD,KAAK,WAChC84C,GAAQuD,MAAMrkD,KAAKyiC,KAIvB3kC,OAAOmvD,wBAA0B,WAC7BnvD,OAAOkvD,wBAAwB9wC,QAAQ,SAAA0mB,GACnCA,SAOhBsqB,SApCY,SAoCHC,GAAS,IAAAlV,EAAAz1C,KAId,GAAInD,GAAGumC,SAASpjC,KAAKy7C,MAAMmP,cAAe,CAAA,IAC9Bjd,EAAU3tC,KAAKy7C,MAAMmP,eAArBjd,MAER,GAAI9wC,GAAG2qB,MAAMmmB,GAGT,OAFA3tC,KAAKssC,OAAOqB,MAAQA,OACpBtD,GAAGyX,SAAStkD,KAAKwC,MAMzB,IAAMvB,EAAMuB,KAAKssC,OAAOviC,KAAKu1C,OACzBziD,GAAG0zB,OAAO9xB,KAAS5B,GAAG2qB,MAAM/oB,IAG5BgwC,GAFY5B,GAAO7sC,KAAKssC,OAAO6R,KAAKG,QAAQlU,IAAKugB,EAASlsD,IAGrDwoB,KAAK,SAAA1hB,GACE1I,GAAG2B,OAAO+G,KACVkwC,EAAKnJ,OAAOqB,MAAQpoC,EAAOi6B,MAAM,GAAGqrB,QAAQld,MAC5CtD,GAAGyX,SAAStkD,KAAKi4C,MAGxB5rB,MAAM,eAKnB09B,eAnEY,WAoER,IAAMhL,EAAQv8C,KAAKssC,OAAOiQ,MAAMh9C,MAAM,KACtCS,KAAKolC,SAASrqB,QAAQjN,MAAM65C,cAAmB,IAAMpL,EAAM,GAAKA,EAAM,GAAtE,KAIJsF,MAzEY,WA0ER,IAAMjW,EAAS5rC,KAGT8qD,EAAYlf,EAAOZ,MAAMS,aAAa,MAC5C,GAAK5uC,GAAG2qB,MAAMsjC,KAAcA,EAAUx7B,WAAW,YAAjD,CAKA,IAAIzuB,EAAS+qC,EAAOZ,MAAMS,aAAa,OAGnC5uC,GAAG2qB,MAAM3mB,KACTA,EAAS+qC,EAAOZ,MAAMS,aAAazrC,KAAKssC,OAAO1pB,WAAW64B,MAAM38C,KAIpE,IA9ISgiC,EA8IH6pB,GA9IG7pB,EA8IejgC,EA7IxBhE,GAAG2qB,MAAMsZ,GACF,KAIJA,EAAIhT,MADG,gEACY+B,OAAOo4B,GAAKnnB,GAyI5BhiC,EAAgB8sC,EAAO3B,SpBvJjC,IAAoB1uC,KAAK2H,MAAsB,IAAhB3H,KAAKyD,UoB6J1BqpC,EAAYvrC,GAAc,OAASgC,GAAAA,EAAI6/C,OAH1B/S,EAAX+S,SAIR/S,EAAOZ,MAAQvE,GAAe4B,EAAWuD,EAAOZ,OAGhD,IAAM+f,EAAY,SAAAC,GAAA,MAAA,8BAAwCL,EAAxC,IAAmD9d,EAAnD,eAGlBsU,GAAU4J,EAAU,UAAW,KAC1BlhC,MAAM,WAAA,OAAMs3B,GAAU4J,EAAU,MAAO,OACvClhC,MAAM,WAAA,OAAMs3B,GAAU4J,EAAU,SAChC9jC,KAAK,SAAAo6B,GAAA,OAAShX,GAAG0X,UAAUvkD,KAAKouC,EAAQyV,EAAMx+C,OAC9CokB,KAAK,SAAA8jC,GAEGA,EAAUlxC,SAAS,YACpB+xB,EAAOxG,SAASuZ,OAAO7wC,MAAMs0C,eAAiB,WAGrDv4B,MAAM,cAIX+hB,EAAO6P,MAAQ,IAAIngD,OAAOivD,GAAGpC,OAAOrpD,GAChC6rD,QAAAA,EACAM,YACI7O,SAAUxQ,EAAOU,OAAO8P,SAAW,EAAI,EACvC8O,GAAItf,EAAOU,OAAO4e,GAClB7a,SAAUzE,EAAOzH,UAAUkG,GAAK,EAAI,EACpCgc,IAAK,EACL8E,SAAU,EACVC,eAAgB,EAChBC,eAAgB,EAChBC,UAAW,EACXphB,YAAa,EAIbqhB,gBAAiBjwD,OAASA,OAAOknC,SAAS9B,KAAO,KAGjD8qB,eAAgB5f,EAAOwF,SAAS0J,OAAS,EAAI,EAC7C2Q,aAAc7f,EAAOU,OAAO8E,SAASwG,UAEzCnT,QACIinB,QADI,SACIpnC,GAEJ,IAAKsnB,EAAOZ,MAAM7hB,MAAO,CACrB,IAAMkF,EAAO/J,EAAM/I,KAEbowC,GAEEC,EAAG,uOACHC,EAAG,uHACHC,IAAK,qIACLC,IAAK,uFACLC,IAAK,wFACP39B,IAAS,2BAEfud,EAAOZ,MAAM7hB,OAAUkF,KAAAA,EAAMs9B,QAAAA,GAE7B1mB,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,WAGhDihB,wBApBI,WAqBAhnB,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,iBAAiB,GACrDoB,QAASR,EAAOZ,MAAMoB,WAG9B8f,qBAzBI,SAyBiB5nC,GAEjB,IAAMjF,EAAWiF,EAAM7iB,OAGvBmqC,EAAOZ,MAAMmhB,aAAe9sC,EAAS+sC,kBAErCnnB,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,eAE5CqhB,QAlCI,SAkCI/nC,GAEJ,IAAIznB,GAAGumC,SAASwI,EAAOZ,MAAMkB,MAA7B,CAIA,IAAM7sB,EAAWiF,EAAM7iB,OAGvB68C,GAAQoM,SAASltD,KAAKouC,EAAQ+e,GAG9B/e,EAAOZ,MAAMkB,KAAO,WAChBmb,GAAoB7pD,KAAKouC,GAAQ,GACjCvsB,EAASitC,aAGb1gB,EAAOZ,MAAM8F,MAAQ,WACjBuW,GAAoB7pD,KAAKouC,GAAQ,GACjCvsB,EAASktC,cAGb3gB,EAAOZ,MAAMlP,KAAO,WAChBzc,EAASmtC,aAGb5gB,EAAOZ,MAAM0G,SAAWryB,EAASgqC,cACjCzd,EAAOZ,MAAMe,QAAS,EAGtBH,EAAOZ,MAAMc,YAAc,EAC3BtvC,OAAOC,eAAemvC,EAAOZ,MAAO,eAChCtuC,IAD+C,WAE3C,OAAOq2B,OAAO1T,EAAS+pC,mBAE3B3/C,IAJ+C,SAI3CmtB,GAEIgV,EAAOG,SAAWH,EAAO6P,MAAM6L,WAC/B1b,EAAO6P,MAAMvK,OAIjBtF,EAAOZ,MAAMqL,SAAU,EACvBpR,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,WAGxC3rB,EAASmlC,OAAO5tB,MAKxBp6B,OAAOC,eAAemvC,EAAOZ,MAAO,gBAChCtuC,IADgD,WAE5C,OAAO2iB,EAAS+sC,mBAEpB3iD,IAJgD,SAI5Ci5B,GACArjB,EAASmpC,gBAAgB9lB,MAKjClmC,OAAOC,eAAemvC,EAAOZ,MAAO,WAChCtuC,IAD2C,WAEvC,OAAOotD,GAAezqC,EAASotC,uBAEnChjD,IAJ2C,SAIvCi5B,GACArjB,EAASqtC,mBAAmB5C,GAAepnB,OAlExC,IAuEL+O,EAAW7F,EAAOU,OAAlBmF,OACNj1C,OAAOC,eAAemvC,EAAOZ,MAAO,UAChCtuC,IAD0C,WAEtC,OAAO+0C,GAEXhoC,IAJ0C,SAItCi5B,GACA+O,EAAS/O,EACTrjB,EAASipC,UAAmB,IAAT7W,GACnBxM,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,mBA/ErC,IAoFL8J,EAAUlJ,EAAOU,OAAjBwI,MACNt4C,OAAOC,eAAemvC,EAAOZ,MAAO,SAChCtuC,IADyC,WAErC,OAAOo4C,GAEXrrC,IAJyC,SAIrCi5B,GACA,IAAMxb,EAASrqB,GAAGsmC,QAAQT,GAASA,EAAQoS,EAC3CA,EAAQ5tB,EACR7H,EAAS6H,EAAS,OAAS,YAC3B+d,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,mBAKhDxuC,OAAOC,eAAemvC,EAAOZ,MAAO,cAChCtuC,IAD8C,WAE1C,OAAO2iB,EAASspC,iBAKxBnsD,OAAOC,eAAemvC,EAAOZ,MAAO,SAChCtuC,IADyC,WAErC,OAAOkvC,EAAOE,cAAgBF,EAAO8F,YAK7C9F,EAAOxH,QAAQ4T,MAAQ34B,EAASstC,4BAG5B/gB,EAAOzH,UAAUkG,IACjBuB,EAAOZ,MAAM/E,aAAa,YAAa,GAG3ChB,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,cACxC/F,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,kBAGxC4hB,cAAchhB,EAAO4W,OAAOqK,WAG5BjhB,EAAO4W,OAAOqK,UAAY/1B,YAAY,WAElC8U,EAAOZ,MAAMqK,SAAWh2B,EAASytC,0BAGC,OAA9BlhB,EAAOZ,MAAM+hB,cAAyBnhB,EAAOZ,MAAM+hB,aAAenhB,EAAOZ,MAAMqK,WAC/EpQ,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,YAI5CY,EAAOZ,MAAM+hB,aAAenhB,EAAOZ,MAAMqK,SAGX,IAA1BzJ,EAAOZ,MAAMqK,WACbuX,cAAchhB,EAAO4W,OAAOqK,WAG5B5nB,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,oBAE7C,KAGH9lB,WAAW,WAAA,OAAMmlB,GAAGsX,MAAMnkD,KAAKouC,IAAS,MAE5CohB,cAxLI,SAwLU1oC,GAEV,IAzVK2oC,EAyVC5tC,EAAWiF,EAAM7iB,OAoBvB,OAjBAmrD,cAAchhB,EAAO4W,OAAO1D,SAEblT,EAAOZ,MAAMqL,UAAY,EAAG,GAAGx8B,SAASyK,EAAM/I,QAIzDqwB,EAAOZ,MAAMqL,SAAU,EACvBpR,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,WAUpC1mB,EAAM/I,MACV,KAAM,EAEF0pB,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,cAGxCY,EAAOZ,MAAMqK,SAAWh2B,EAASytC,yBACjC7nB,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,YAExC,MAEJ,KAAK,EACDqc,GAAoB7pD,KAAKouC,GAAQ,GAG7BA,EAAOZ,MAAM4R,MAEbv9B,EAASmtC,YACTntC,EAASitC,aAETrnB,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,SAG5C,MAEJ,KAAK,EAEGY,EAAOZ,MAAMe,SAAWH,EAAO6P,MAAM6L,UACrC1b,EAAOZ,MAAM8F,SAEbuW,GAAoB7pD,KAAKouC,GAAQ,GAEjC3G,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,WAGxCY,EAAO4W,OAAO1D,QAAUhoB,YAAY,WAChCmO,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,eACzC,IAKCY,EAAOZ,MAAM0G,WAAaryB,EAASgqC,gBACnCzd,EAAOZ,MAAM0G,SAAWryB,EAASgqC,cACjCpkB,GAAaznC,KAAKouC,EAAQA,EAAOZ,MAAO,mBAI5CqF,GAASuG,eAAep5C,KACpBouC,GA9ZXqhB,EA+Z2B5tC,EAAS6tC,4BA9ZrDrwD,GAAG2qB,MAAMylC,GACFA,EAGJpf,GAAOof,EAAOlzC,IAAI,SAAAozC,GAAA,OAASrD,GAAeqD,SA8ZzB,MAEJ,KAAK,EAEIvhB,EAAOkJ,OACRlJ,EAAO6P,MAAM2R,SAEjB/F,GAAoB7pD,KAAKouC,GAAQ,GAQzC3G,GAAaznC,KAAKouC,EAAQA,EAAOxG,SAASiD,UAAW,eAAe,GAChEha,KAAM/J,EAAM/I,cC1d9ByvB,IAEFyP,MAFU,WAIDz6C,KAAKgrC,OAMVtD,GAAY1nC,KAAKolC,SAASiD,UAAWroC,KAAKssC,OAAOsF,WAAWjxC,KAAKgxB,QAAQ,MAAO3xB,KAAKW,OAAO,GAG5F+mC,GAAY1nC,KAAKolC,SAASiD,UAAWroC,KAAKssC,OAAOsF,WAAW3H,SAAStY,QAAQ,MAAO3xB,KAAKiqC,WAAW,GAIhGjqC,KAAKgiD,SACLta,GAAY1nC,KAAKolC,SAASiD,UAAWroC,KAAKssC,OAAOsF,WAAWjxC,KAAKgxB,QAAQ,MAAO,UAAU,GAI1F3xB,KAAK06C,UAEL16C,KAAKolC,SAASrqB,QAAUje,GAAc,OAClCuqC,MAAOrnC,KAAKssC,OAAOsF,WAAW5H,QAIlCle,GAAK9rB,KAAKgrC,MAAOhrC,KAAKolC,SAASrqB,SAG/B/a,KAAKolC,SAASuZ,OAAS7hD,GAAc,OACjCuqC,MAAOrnC,KAAKssC,OAAOsF,WAAW+M,SAGlC3+C,KAAKolC,SAASrqB,QAAQ/M,YAAYhO,KAAKolC,SAASuZ,SAGhD3+C,KAAK+qC,QACLQ,GAAMI,OAAOnuC,KAAKwC,MACXA,KAAK26C,UACZ2D,GAAQ7D,MAAMj9C,KAAKwC,MACZA,KAAKi4C,SACZmG,GAAM3D,MAAMj9C,KAAKwC,OAvCjBA,KAAKwsC,MAAMsF,KAAK,6BCEtBub,GAAAA,WAMF,SAAAA,EAAYzhB,GAAQ,IAAA3L,EAAAjgC,KAAAguC,GAAAhuC,KAAAqtD,GAChBrtD,KAAK4rC,OAASA,EACd5rC,KAAKu/C,YAAc3T,EAAOU,OAAOuS,IAAIU,YACrCv/C,KAAK8+C,SAAU,EACf9+C,KAAKwjD,aAAc,EACnBxjD,KAAKolC,UACDiD,UAAW,KACXilB,iBAAkB,MAEtBttD,KAAKutD,QAAU,KACfvtD,KAAKwtD,OAAS,KACdxtD,KAAKytD,UAAY,KACjBztD,KAAKykC,UACLzkC,KAAK0tD,YAAc,KACnB1tD,KAAK2tD,eAAiB,KAGtB3tD,KAAKyjD,eAAiB,IAAIj+B,QAAQ,SAACG,EAASC,GAExCqa,EAAK0E,GAAG,SAAUhf,GAGlBsa,EAAK0E,GAAG,QAAS/e,KAGrB5lB,KAAKmsC,iDAYF,IAAAsJ,EAAAz1C,KACCA,KAAKiuC,UAEApxC,GAAG2B,OAAOlD,OAAOgkD,SAAYziD,GAAG2B,OAAOlD,OAAOgkD,OAAOsO,KAUtD5tD,KAAK6hD,QATLuF,GAAWpnD,KAAK4rC,OAAOU,OAAO6R,KAAKI,UAAUF,KACxCp3B,KAAK,WACFwuB,EAAKoM,UAERh4B,MAAM,WAEH4rB,EAAKoY,QAAQ,QAAS,IAAIhxB,MAAM,qEAW5C,IAAAga,EAAA72C,KAGJA,KAAK8tD,iBAAiB,KAAO,WAG7B9tD,KAAKyjD,eAAex8B,KAAK,WACrB4vB,EAAKkX,iBAAiB,0BAI1B/tD,KAAKw+C,YAGLx+C,KAAKguD,8CA8BLhuD,KAAKolC,SAASiD,UAAYvrC,GAAc,OACpCuqC,MAAOrnC,KAAK4rC,OAAOU,OAAOsF,WAAWiN,MAEzC7+C,KAAK4rC,OAAOxG,SAASiD,UAAUr6B,YAAYhO,KAAKolC,SAASiD,WAGzDiX,OAAOsO,IAAIzc,SAAS8c,aAAa3O,OAAOsO,IAAIM,eAAeC,UAAUC,SAGrE9O,OAAOsO,IAAIzc,SAASkd,UAAUruD,KAAK4rC,OAAOU,OAAOuS,IAAIjH,UAIrD53C,KAAKolC,SAASkoB,iBAAmB,IAAIhO,OAAOsO,IAAIU,mBAAmBtuD,KAAKolC,SAASiD,WAGjFroC,KAAKuuD,kDAMI,IAAA/W,EAAAx3C,KACDqoC,EAAcroC,KAAK4rC,OAAOxG,SAA1BiD,UAER,IAEIroC,KAAKwtD,OAAS,IAAIlO,OAAOsO,IAAIY,UAAUxuD,KAAKolC,SAASkoB,kBAGrDttD,KAAKwtD,OAAO3oC,iBACRy6B,OAAOsO,IAAIa,sBAAsBC,KAAKC,mBACtC,SAAArqC,GAAA,OAASkzB,EAAKoX,mBAAmBtqC,KACjC,GAEJtkB,KAAKwtD,OAAO3oC,iBAAiBy6B,OAAOsO,IAAIiB,aAAaH,KAAKI,SAAU,SAAA3lC,GAAA,OAASquB,EAAKuX,UAAU5lC,KAAQ,GAGpG,IAAMwlB,EAAU,IAAI2Q,OAAOsO,IAAIoB,WAC/BrgB,EAAQsgB,SAAWjvD,KAAKkvD,OAIxBvgB,EAAQwgB,kBAAoB9mB,EAAU+mB,YACtCzgB,EAAQ0gB,mBAAqBhnB,EAAU8R,aACvCxL,EAAQ2gB,qBAAuBjnB,EAAU+mB,YACzCzgB,EAAQ4gB,sBAAwBlnB,EAAU8R,aAG1CxL,EAAQ6gB,wBAAyB,EAGjC7gB,EAAQ8gB,oBAAoBzvD,KAAK4rC,OAAOkJ,OAExC90C,KAAKwtD,OAAOe,WAAW5f,GACzB,MAAOtyC,GACL2D,KAAK+uD,UAAU1yD,4CAQM,IAAA07C,EAAA/3C,KACzB,KADyBS,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,IAIrB,OAFAmsD,cAAc5sD,KAAK2tD,qBACnB3tD,KAAKolC,SAASiD,UAAUZ,gBAAgB,mBAU5CznC,KAAK2tD,eAAiB72B,YANP,WACX,IAAMF,EAAOmZ,GAAWx0C,KAAK8I,IAAI0zC,EAAKwV,QAAQmC,mBAAoB,IAC5Dzc,EAAW1F,GAAS,gBAAiBwK,EAAKnM,OAAOU,QAAjD,MAA8D1V,EACpEmhB,EAAK3S,SAASiD,UAAUpC,aAAa,kBAAmBgN,IAGlB,gDAO3B3uB,GAAO,IAAA20B,EAAAj5C,KAEhBmxC,EAAW,IAAImO,OAAOsO,IAAI+B,qBAGhCxe,EAASye,6CAA8C,EACvDze,EAAS0e,kBAAmB,EAI5B7vD,KAAKutD,QAAUjpC,EAAMwrC,cAAc9vD,KAAK4rC,OAAQuF,GAGhDnxC,KAAKytD,UAAYztD,KAAKutD,QAAQwC,eAGzBlzD,GAAG2qB,MAAMxnB,KAAKytD,YACfztD,KAAKytD,UAAU/zC,QAAQ,SAAAs2C,GACnB,GAAiB,IAAbA,IAAgC,IAAdA,GAAmBA,EAAW/W,EAAKrN,OAAO8F,SAAU,CACtE,IAAMue,EAAchX,EAAKrN,OAAOxG,SAASkM,SAEzC,GAAIz0C,GAAG4mC,QAAQwsB,GAAc,CACzB,IAAMC,EAAgB,IAAMjX,EAAKrN,OAAO8F,SAAWse,EAC7CnsB,EAAM/mC,GAAc,QACtBuqC,MAAO4R,EAAKrN,OAAOU,OAAOsF,WAAWkK,OAGzCjY,EAAI/1B,MAAMkoB,KAAUk6B,EAAc3yD,WAAlC,IACA0yD,EAAYjiD,YAAY61B,OAWxC7jC,KAAKutD,QAAQjF,UAAUtoD,KAAK4rC,OAAO6F,QAInCzxC,KAAKutD,QAAQ1oC,iBAAiBy6B,OAAOsO,IAAIiB,aAAaH,KAAKI,SAAU,SAAA3lC,GAAA,OAAS8vB,EAAK8V,UAAU5lC,KAG7F3sB,OAAOuN,KAAKu1C,OAAOsO,IAAIuC,QAAQzB,MAAMh1C,QAAQ,SAAA/Y,GACzCs4C,EAAKsU,QAAQ1oC,iBAAiBy6B,OAAOsO,IAAIuC,QAAQzB,KAAK/tD,GAAO,SAAA2jB,GAAA,OAAS20B,EAAKmX,UAAU9rC,OAIzFtkB,KAAK6tD,QAAQ,4CASPvpC,GAAO,IAAAg1B,EAAAt5C,KACLqoC,EAAcroC,KAAK4rC,OAAOxG,SAA1BiD,UAIFgoB,EAAK/rC,EAAMgsC,QAGXnrB,EAAgB,SAAAxkC,GAClB,IAAM2jB,EAAAA,MAAc3jB,EAAKgxB,QAAQ,KAAM,IAAIub,cAC3CjI,GAAaznC,KAAK87C,EAAK1N,OAAQ0N,EAAK1N,OAAOZ,MAAO1mB,IAGtD,OAAQA,EAAM3jB,MACV,KAAK2+C,OAAOsO,IAAIuC,QAAQzB,KAAK6B,OAGzBvwD,KAAK6tD,QAAQ,UAGb1oB,EAAc7gB,EAAM3jB,MAGpBX,KAAKwwD,eAAc,GAEdH,EAAGI,aAEJJ,EAAGta,MAAQ1N,EAAU+mB,YACrBiB,EAAGvX,OAASzQ,EAAU8R,cAK1B,MAEJ,KAAKmF,OAAOsO,IAAIuC,QAAQzB,KAAKgC,kBAKzBvrB,EAAc7gB,EAAM3jB,MAyBpBX,KAAK2wD,UACL,MAEJ,KAAKrR,OAAOsO,IAAIuC,QAAQzB,KAAKkC,wBAKzBzrB,EAAc7gB,EAAM3jB,MAEpBX,KAAK6wD,eAEL,MAEJ,KAAKvR,OAAOsO,IAAIuC,QAAQzB,KAAKoC,yBAMzB3rB,EAAc7gB,EAAM3jB,MAEpBX,KAAKwwD,gBAELxwD,KAAK+wD,gBAEL,MAEJ,KAAKzR,OAAOsO,IAAIuC,QAAQzB,KAAKsC,QAC7B,KAAK1R,OAAOsO,IAAIuC,QAAQzB,KAAKuC,SAC7B,KAAK3R,OAAOsO,IAAIuC,QAAQzB,KAAKwC,SAC7B,KAAK5R,OAAOsO,IAAIuC,QAAQzB,KAAKyC,WAC7B,KAAK7R,OAAOsO,IAAIuC,QAAQzB,KAAK0C,MACzBjsB,EAAc7gB,EAAM3jB,yCAYtB2jB,GACNtkB,KAAKqxD,SACLrxD,KAAK4rC,OAAOY,MAAMsF,KAAK,YAAaxtB,uCAQ5B,IAAA01B,EAAAh6C,KACAqoC,EAAcroC,KAAK4rC,OAAOxG,SAA1BiD,UACJzR,OAAAA,EAGJ52B,KAAK4rC,OAAOjH,GAAG,QAAS,WACpBqV,EAAKwT,OAAO8D,oBAGhBtxD,KAAK4rC,OAAOjH,GAAG,UAAW,WAEtB,OADA/N,EAAOojB,EAAKpO,OAAOE,cAIvB9rC,KAAK4rC,OAAOjH,GAAG,SAAU,WACrB,IAAM4sB,EAAavX,EAAKpO,OAAOE,YAE3BjvC,GAAG2qB,MAAMwyB,EAAKyT,YAIlBzT,EAAKyT,UAAU/zC,QAAQ,SAACs2C,EAAUzrD,GAC1BqyB,EAAOo5B,GAAYA,EAAWuB,IAC9BvX,EAAKuT,QAAQiE,iBACbxX,EAAKyT,UAAU/sC,OAAOnc,EAAO,QAOzCjJ,OAAOupB,iBAAiB,SAAU,WAC1Bm1B,EAAKuT,SACLvT,EAAKuT,QAAQkE,OAAOppB,EAAU+mB,YAAa/mB,EAAU8R,aAAcmF,OAAOsO,IAAI8D,SAASC,yCAQ5F,IAAAC,EAAA5xD,KACKqoC,EAAcroC,KAAK4rC,OAAOxG,SAA1BiD,UAEHroC,KAAKyjD,gBACNzjD,KAAK+wD,gBAIT/wD,KAAKyjD,eACAx8B,KAAK,WAEF2qC,EAAKxsB,SAASkoB,iBAAiBuE,aAE/B,IACSD,EAAKpO,cAENoO,EAAKrE,QAAQjxC,KAAK+rB,EAAU+mB,YAAa/mB,EAAU8R,aAAcmF,OAAOsO,IAAI8D,SAASC,QAIrFC,EAAKrE,QAAQjkD,SAGjBsoD,EAAKpO,aAAc,EACrB,MAAOsO,GAGLF,EAAK7C,UAAU+C,MAGtBjoC,MAAM,sDAQX7pB,KAAKolC,SAASiD,UAAUv6B,MAAMikD,OAAS,GAGvC/xD,KAAK8+C,SAAU,EAGX9+C,KAAK4rC,OAAOE,YAAc9rC,KAAK4rC,OAAO8F,UACtC1xC,KAAK4rC,OAAOM,8CAShBlsC,KAAKolC,SAASiD,UAAUv6B,MAAMikD,OAAS,EAGvC/xD,KAAK8+C,SAAU,EAGf9+C,KAAK4rC,OAAOkF,yCAWR9wC,KAAKwjD,aACLxjD,KAAK+wD,gBAIT/wD,KAAK6tD,QAAQ,SAGb7tD,KAAK2wD,4CAMC,IAAAqB,EAAAhyD,KAENA,KAAKyjD,eACAx8B,KAAK,WAEE+qC,EAAKzE,SACLyE,EAAKzE,QAAQ0E,UAIjBD,EAAKvO,eAAiB,IAAIj+B,QAAQ,SAAAG,GAC9BqsC,EAAKrtB,GAAG,SAAUhf,GAClBqsC,EAAKpmB,OAAOY,MAAMrlC,IAAI6qD,EAAKzE,WAI/ByE,EAAKzD,eAER1kC,MAAM,8CAOPvF,GAAgB,IAAA,IAAA4tC,EAAAlyD,KAAA+kC,EAAAtkC,UAAAL,OAANwhB,EAAM9Z,MAAAi9B,EAAA,EAAAA,EAAA,EAAA,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAANpjB,EAAMojB,EAAA,GAAAvkC,UAAAukC,GACpB,IAAMmtB,EAAWnyD,KAAKykC,OAAOngB,GAEzBznB,GAAGwmC,MAAM8uB,IACTA,EAASz4C,QAAQ,SAAA6O,GACT1rB,GAAGumC,SAAS7a,IACZA,EAAQ/nB,MAAM0xD,EAAMtwC,gCAYjC0C,EAAO8b,GAON,OANKvjC,GAAGwmC,MAAMrjC,KAAKykC,OAAOngB,MACtBtkB,KAAKykC,OAAOngB,OAGhBtkB,KAAKykC,OAAOngB,GAAO9e,KAAK46B,GAEjBpgC,8CAWM42B,EAAM/jB,GAAM,IAAAu/C,EAAApyD,KACzBA,KAAK4rC,OAAOY,MAAMrlC,IAAlB,8BAAoD0L,GAEpD7S,KAAK0tD,YAAcxoC,WAAW,WAC1BktC,EAAKf,SACLe,EAAKrE,iBAAiB,uBACvBn3B,4CAOU/jB,GACRhW,GAAGqmC,gBAAgBljC,KAAK0tD,eACzB1tD,KAAK4rC,OAAOY,MAAMrlC,IAAlB,8BAAoD0L,GAEpD0vC,aAAaviD,KAAK0tD,aAClB1tD,KAAK0tD,YAAc,sCA9hBvB,OACI1tD,KAAK4rC,OAAOb,SAAW/qC,KAAK4rC,OAAO8O,SAAW16C,KAAK4rC,OAAOU,OAAOuS,IAAI5Q,UAAYpxC,GAAG2qB,MAAMxnB,KAAKu/C,4CA2DnG,MAAUxe,8CAAQyZ,IAXd6X,eAAgB,2BAChBC,aAAc,2BACdC,OAAQj3D,OAAOknC,SAASR,SACxBwwB,GAAIC,KAAKjuC,MACTkuC,SAAU,IACVC,UAAW,IACXC,SAAU5yD,KAAKu/C,oBA1FrB8N,GCHAxsD,IAEFgyD,eAFW,SAEIlyD,EAAMiiB,GAAY,IAAAqd,EAAAjgC,KACzBnD,GAAG0zB,OAAO3N,GACVwjB,GAAczlC,EAAMX,KAAKgrC,OACrBnoC,IAAK+f,IAEF/lB,GAAGwmC,MAAMzgB,IAChBA,EAAWlJ,QAAQ,SAAAqmB,GACfqG,GAAczlC,EAAMs/B,EAAK+K,MAAOjL,MAO5C+yB,OAhBW,SAgBJpwB,GAAO,IAAA+S,EAAAz1C,KACLysC,GAAQ/J,EAAO,mBAMpB6I,GAAMc,eAAe7uC,KAAKwC,MAG1BA,KAAKiyD,QAAQz0D,KACTwC,KACA,WAEIy1C,EAAKrR,QAAQgI,WAGb/F,GAAcoP,EAAKzK,OACnByK,EAAKzK,MAAQ,KAGTnuC,GAAG4mC,QAAQgS,EAAKrQ,SAASiD,YACzBoN,EAAKrQ,SAASiD,UAAUZ,gBAAgB,SAV1C,IAcMkF,EAAkBjK,EAAlBiK,QAAShsC,EAAS+hC,EAAT/hC,KAdfoyD,EAAAjtB,GAe4C6G,EAf5C,GAAA,GAAAqmB,EAAAD,EAeO9oB,SAAAA,OAfP9qC,IAAA6zD,EAekBxT,GAAUjU,MAf5BynB,EAemCnwD,EAfnCkwD,EAemClwD,IAC/BowD,EAAuB,UAAbhpB,EAAuBtpC,EAAO,MACxCiiB,EAA0B,UAAbqnB,MAA8BpnC,IAAAA,GAEjDrG,OAAOwjB,OAAOy1B,GACVxL,SAAAA,EACAtpC,KAAAA,EAEAwjC,UAAW2F,GAAQnrB,MAAMhe,EAAMspC,EAAUwL,EAAKnJ,OAAOpC,aAErDc,MAAOluC,GAAcm2D,EAASrwC,KAIlC6yB,EAAKrQ,SAASiD,UAAUr6B,YAAYynC,EAAKzK,OAGrCnuC,GAAGsmC,QAAQT,EAAM0Z,YACjB3G,EAAKnJ,OAAO8P,SAAW1Z,EAAM0Z,UAI7B3G,EAAK1K,UACD0K,EAAKnJ,OAAO4mB,aACZzd,EAAKzK,MAAM/E,aAAa,cAAe,IAEvCwP,EAAKnJ,OAAO8P,UACZ3G,EAAKzK,MAAM/E,aAAa,WAAY,IAEnCppC,GAAG2qB,MAAMkb,EAAMic,UAChBlJ,EAAKkJ,OAASjc,EAAMic,QAEpBlJ,EAAKnJ,OAAOsQ,KAAK9B,QACjBrF,EAAKzK,MAAM/E,aAAa,OAAQ,IAEhCwP,EAAKnJ,OAAOwI,OACZW,EAAKzK,MAAM/E,aAAa,QAAS,IAEjCwP,EAAKnJ,OAAOpC,aACZuL,EAAKzK,MAAM/E,aAAa,cAAe,KAK/CoE,GAAGqX,aAAalkD,KAAKi4C,GAGjBA,EAAK1K,SACLlqC,GAAOgyD,eAAer1D,KAAKi4C,EAAM,SAAU9I,GAI/C8I,EAAKnJ,OAAOqB,MAAQjL,EAAMiL,MAG1B3C,GAAMyP,MAAMj9C,KAAKi4C,GAGbA,EAAK1K,UAED,WAAYrI,GACZ7hC,GAAOgyD,eAAer1D,KAAKi4C,EAAM,QAAS/S,EAAM+U,QAIpDhC,EAAKzK,MAAMmB,SAIXsJ,EAAK1K,SAAY0K,EAAKuM,UAAYvM,EAAKtR,UAAUkG,KAEjDA,GAAGsX,MAAMnkD,KAAKi4C,GAIlBA,EAAKpE,WAAWhC,WAEpB,IAtGArvC,KAAKwsC,MAAMsF,KAAK,2BCEtBqhB,GAAAA,WACF,SAAAA,EAAY1xD,EAAQ2iC,GAAS,IAAAnE,EAAAjgC,KAkFzB,GAlFyBguC,GAAAhuC,KAAAmzD,GACzBnzD,KAAKwiD,UAGLxiD,KAAK6hD,OAAQ,EACb7hD,KAAKg/C,SAAU,EACfh/C,KAAKozD,QAAS,EAGdpzD,KAAKmrC,MAAQrB,GAAQqB,MAGrBnrC,KAAKgrC,MAAQvpC,EAGT5E,GAAG0zB,OAAOvwB,KAAKgrC,SACfhrC,KAAKgrC,MAAQpuC,SAASurC,iBAAiBnoC,KAAKgrC,SAI3C1vC,OAAO+3D,QAAUrzD,KAAKgrC,iBAAiBqoB,QAAWx2D,GAAG2mC,SAASxjC,KAAKgrC,QAAUnuC,GAAGwmC,MAAMrjC,KAAKgrC,UAE5FhrC,KAAKgrC,MAAQhrC,KAAKgrC,MAAM,IAI5BhrC,KAAKssC,OAASX,MAEVwQ,GACAgX,EAAKhX,SACL/X,MACC,WACG,IACI,OAAOpZ,KAAKsjB,MAAMrO,EAAK+K,MAAMS,aAAa,qBAC5C,MAAOpvC,GACL,UAJP,IAUL2D,KAAKolC,UACDiD,UAAW,KACXwI,WACA9iC,WACAujC,YACAC,UACAJ,UACI0B,KAAM,KACNiE,SACAH,SAEJvF,SAAU,MAIdpxC,KAAKoxC,UACD0J,OAAQ,KACRzD,cAAe,EACfl6B,KAAM,IAAIomB,SAIdvjC,KAAKqxC,YACDyJ,QAAQ,GAIZ96C,KAAKokC,SACD4T,SACA5L,YAKJpsC,KAAKwsC,MAAQ,IAAImT,GAAQ3/C,KAAKssC,OAAOE,OAGrCxsC,KAAKwsC,MAAMrlC,IAAI,SAAUnH,KAAKssC,QAC9BtsC,KAAKwsC,MAAMrlC,IAAI,UAAW2iC,KAGtBjtC,GAAGqmC,gBAAgBljC,KAAKgrC,QAAWnuC,GAAG4mC,QAAQzjC,KAAKgrC,OAMvD,GAAIhrC,KAAKgrC,MAAM9F,KACXllC,KAAKwsC,MAAMsF,KAAK,6BAKpB,GAAK9xC,KAAKssC,OAAO2B,QAOjB,GAAKnE,GAAQnrB,QAAQyrB,IAArB,CAMA,IAAMsO,EAAQ14C,KAAKgrC,MAAMzF,WAAU,GACnCmT,EAAM0D,UAAW,EACjBp8C,KAAKolC,SAASj2B,SAAWupC,EAIzB,IAAM/3C,EAAOX,KAAKgrC,MAAMioB,QAAQ/lB,cAG5Br/B,EAAS,KACTizB,EAAM,KAGV,OAAQngC,GACJ,IAAK,MAKD,GAHAkN,EAAS7N,KAAKgrC,MAAMzC,cAAc,UAG9B1rC,GAAG4mC,QAAQ51B,IAaX,GAXAizB,EAAMwZ,GAASzsC,EAAO49B,aAAa,QACnCzrC,KAAKiqC,SbhJlB,SAA0BnJ,GAE7B,MAAI,wDAAwDhiB,KAAKgiB,GACtD0e,GAAUlB,QAIjB,wDAAwDx/B,KAAKgiB,GACtD0e,GAAUpB,MAGd,KaqIyBkV,CAAiBxyB,EAAIvjC,YAGrCyC,KAAKolC,SAASiD,UAAYroC,KAAKgrC,MAC/BhrC,KAAKgrC,MAAQn9B,EAGb7N,KAAKolC,SAASiD,UAAUlB,UAAY,GAGhCrG,EAAItR,OAAOpvB,OAAQ,CACnB,IAAMmzD,GAAU,IAAK,QAEjBA,EAAO15C,SAASinB,EAAIH,aAAajkC,IAAI,eACrCsD,KAAKssC,OAAO8P,UAAW,GAEvBmX,EAAO15C,SAASinB,EAAIH,aAAajkC,IAAI,WACrCsD,KAAKssC,OAAOsQ,KAAK9B,QAAS,GAK1B96C,KAAK26C,WACL36C,KAAKssC,OAAOpC,YAAcqpB,EAAO15C,SAASinB,EAAIH,aAAajkC,IAAI,gBAC/DsD,KAAKssC,OAAO4e,GAAKpqB,EAAIH,aAAajkC,IAAI,OAEtCsD,KAAKssC,OAAOpC,aAAc,QAKlClqC,KAAKiqC,SAAWjqC,KAAKgrC,MAAMS,aAAazrC,KAAKssC,OAAO1pB,WAAW64B,MAAMxR,UAGrEjqC,KAAKgrC,MAAMvD,gBAAgBznC,KAAKssC,OAAO1pB,WAAW64B,MAAMxR,UAI5D,GAAIptC,GAAG2qB,MAAMxnB,KAAKiqC,YAAcztC,OAAOuN,KAAKy1C,IAAW3lC,SAAS7Z,KAAKiqC,UAEjE,YADAjqC,KAAKwsC,MAAMrjB,MAAM,kCAKrBnpB,KAAKW,KAAO8+C,GAAMzV,MAElB,MAEJ,IAAK,QACL,IAAK,QACDhqC,KAAKW,KAAOA,EACZX,KAAKiqC,SAAWuV,GAAUjU,MAGtBvrC,KAAKgrC,MAAMxD,aAAa,iBACxBxnC,KAAKssC,OAAO4mB,aAAc,GAE1BlzD,KAAKgrC,MAAMxD,aAAa,cACxBxnC,KAAKssC,OAAO8P,UAAW,GAEvBp8C,KAAKgrC,MAAMxD,aAAa,iBACxBxnC,KAAKssC,OAAOpC,aAAc,GAE1BlqC,KAAKgrC,MAAMxD,aAAa,WACxBxnC,KAAKssC,OAAOwI,OAAQ,GAEpB90C,KAAKgrC,MAAMxD,aAAa,UACxBxnC,KAAKssC,OAAOsQ,KAAK9B,QAAS,GAG9B,MAEJ,QAEI,YADA96C,KAAKwsC,MAAMrjB,MAAM,kCAKzBnpB,KAAKmkC,UAAY2F,GAAQnrB,MAAM3e,KAAKW,KAAMX,KAAKiqC,SAAUjqC,KAAKssC,OAAOpC,aAGhElqC,KAAKmkC,UAAUiG,KAKpBpqC,KAAK0kC,kBAGL1kC,KAAKw+C,UAAY,IAAIiE,GAAUziD,MAG/BA,KAAKkuC,QAAU,IAAIH,GAAQ/tC,MAG3BA,KAAKgrC,MAAM9F,KAAOllC,KAGbnD,GAAG4mC,QAAQzjC,KAAKolC,SAASiD,aAC1BroC,KAAKolC,SAASiD,UAAYvrC,GAAc,OACxCgvB,GAAK9rB,KAAKgrC,MAAOhrC,KAAKolC,SAASiD,YAInCgC,GAAGqX,aAAalkD,KAAKwC,MAGrBgrC,GAAMyP,MAAMj9C,KAAKwC,MAGbA,KAAKssC,OAAOE,OACZ7H,GAAGnnC,KAAKwC,KAAMA,KAAKolC,SAASiD,UAAWroC,KAAKssC,OAAO7H,OAAO5kC,KAAK,KAAM,SAAAykB,GACjE2b,EAAKuM,MAAMrlC,IAAX,UAAyBmd,EAAM3jB,SAMnCX,KAAK+qC,SAAY/qC,KAAKgiD,UAAYhiD,KAAKmkC,UAAUkG,KACjDA,GAAGsX,MAAMnkD,KAAKwC,MAIlBA,KAAKw+C,UAAUnW,YAGfroC,KAAKw+C,UAAUrjD,SAGf6E,KAAKqxC,WAAa,IAAIgP,GAAWrgD,MAGjCA,KAAK6+C,IAAM,IAAIwO,GAAIrtD,MAGfA,KAAKssC,OAAO8P,UACZp8C,KAAKksC,QAtDLlsC,KAAKwsC,MAAMrjB,MAAM,iCA7GjBnpB,KAAKwsC,MAAMrjB,MAAM,iCAPjBnpB,KAAKwsC,MAAMrjB,MAAM,yCAZjBnpB,KAAKwsC,MAAMrjB,MAAM,sFA6NrB,OAAKtsB,GAAGumC,SAASpjC,KAAKgrC,MAAMkB,MAKrBlsC,KAAKgrC,MAAMkB,OAJP,qCAWNlsC,KAAK8+C,SAAYjiD,GAAGumC,SAASpjC,KAAKgrC,MAAM8F,QAI7C9wC,KAAKgrC,MAAM8F,2CAmCJpO,IAEQ7lC,GAAGsmC,QAAQT,GAASA,GAAS1iC,KAAK8+C,SAG7C9+C,KAAKksC,OAELlsC,KAAK8wC,uCAQL9wC,KAAK+qC,SACL/qC,KAAK8wC,QACL9wC,KAAK+wC,WACEl0C,GAAGumC,SAASpjC,KAAKgrC,MAAMlP,OAC9B97B,KAAKgrC,MAAMlP,yCAQf97B,KAAK8rC,YAAc,iCAOhB2B,GACHztC,KAAK8rC,YAAc9rC,KAAK8rC,aAAejvC,GAAG4G,OAAOgqC,GAAYA,EAAWztC,KAAKssC,OAAOmB,0CAOhFA,GACJztC,KAAK8rC,YAAc9rC,KAAK8rC,aAAejvC,GAAG4G,OAAOgqC,GAAYA,EAAWztC,KAAKssC,OAAOmB,iDAgIzEv7B,GACX,IAAMu/B,EAASzxC,KAAKgrC,MAAM8J,MAAQ,EAAI90C,KAAKyxC,OAC3CzxC,KAAKyxC,OAASA,GAAU50C,GAAG4G,OAAOyO,GAAQA,EAAO,0CAOtCA,GACXlS,KAAKkjD,gBAAgBhxC,0CAwQVwwB,GACX0O,GAASlqB,OAAO1pB,KAAKwC,KAAM0iC,GAAO,qCA2E9BoH,GAAQW,SACRzqC,KAAKgrC,MAAMwoB,wEAQJtsC,GAEX,GAAIlnB,KAAKmkC,UAAUkG,KAAOrqC,KAAK0jD,QAAS,CAEpC,IAAM+P,EAAW3rB,GAAS9nC,KAAKolC,SAASiD,UAAWroC,KAAKssC,OAAOsF,WAAW6K,cAGpE9U,OAA0B,IAAXzgB,OAAyB/nB,GAAa+nB,EAGrDwsC,EAAShsB,GAAY1nC,KAAKolC,SAASiD,UAAWroC,KAAKssC,OAAOsF,WAAW6K,aAAc9U,GAOzF,GAJI+rB,GAAU1zD,KAAKssC,OAAO+D,SAASx2B,SAAS,cAAgBhd,GAAG2qB,MAAMxnB,KAAKssC,OAAO6E,WAC7Ed,GAAS8H,WAAW36C,KAAKwC,MAAM,GAG/B0zD,IAAWD,EAAU,CACrB,IAAME,EAAYD,EAAS,iBAAmB,gBAC9CzuB,GAAaznC,KAAKwC,KAAMA,KAAKgrC,MAAO2oB,GAExC,OAAQD,EAEZ,OAAO,6BAQRpvC,EAAO8b,GACNuE,GAAGnnC,KAAKwC,KAAMA,KAAKolC,SAASiD,UAAW/jB,EAAO8b,gCAQ7C9b,EAAO8b,GACRyE,GAAKrnC,KAAKwC,KAAMA,KAAKolC,SAASiD,UAAW/jB,EAAO8b,+BAQhD9b,EAAO8b,GACPwE,GAAI5kC,KAAKolC,SAASiD,UAAW/jB,EAAO8b,mCAUhCA,GAAwB,IAAAqV,EAAAz1C,KAAd4zD,EAAcnzD,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,IAAAA,UAAA,GAC5B,GAAKT,KAAK6hD,MAAV,CAIA,IAAM1xC,EAAO,WAETvT,SAASykC,KAAKvzB,MAAMsyC,SAAW,GAG/B3K,EAAKgG,MAAQ,KAGTmY,GACIp3D,OAAOuN,KAAK0rC,EAAKrQ,UAAUhlC,SAE3BimC,GAAcoP,EAAKrQ,SAASyL,QAAQ3E,MACpC7F,GAAcoP,EAAKrQ,SAASgM,UAC5B/K,GAAcoP,EAAKrQ,SAASiL,UAC5BhK,GAAcoP,EAAKrQ,SAASrqB,SAG5B06B,EAAKrQ,SAASyL,QAAQ3E,KAAO,KAC7BuJ,EAAKrQ,SAASgM,SAAW,KACzBqE,EAAKrQ,SAASiL,SAAW,KACzBoF,EAAKrQ,SAASrqB,QAAU,MAIxBle,GAAGumC,SAAShD,IACZA,M/B14Bb,WACCpgC,MAAQA,KAAK0kC,iBACb1kC,KAAK0kC,eAAehrB,QAAQ,SAAAo0B,GAAQ,IACxBrK,EAAqCqK,EAArCrK,QAAS9iC,EAA4BmtC,EAA5BntC,KAAMy/B,EAAsB0N,EAAtB1N,SAAUgE,EAAY0J,EAAZ1J,QACjCX,EAAQY,oBAAoB1jC,EAAMy/B,EAAUgE,KAGhDpkC,KAAK0kC,oB+Bu4BmBlnC,KAAKi4C,GAGrBhP,GAAegP,EAAKrQ,SAASj2B,SAAUsmC,EAAKrQ,SAASiD,WAGrDpD,GAAaznC,KAAKi4C,EAAMA,EAAKrQ,SAASj2B,SAAU,aAAa,GAGzDtS,GAAGumC,SAAShD,IACZA,EAAS5iC,KAAKi4C,EAAKrQ,SAASj2B,UAIhCsmC,EAAKoM,OAAQ,EAGb38B,WAAW,WACPuwB,EAAKrQ,SAAW,KAChBqQ,EAAKzK,MAAQ,MACd,OAKXhrC,KAAK87B,OAGD97B,KAAK+qC,SAELwX,aAAaviD,KAAKwiD,OAAOxD,SAGzB3U,GAAG0H,qBAAqBv0C,KAAKwC,MAAM,GAGnCmQ,KACOnQ,KAAK26C,WAEZiS,cAAc5sD,KAAKwiD,OAAOqK,WAC1BD,cAAc5sD,KAAKwiD,OAAO1D,SAGP,OAAf9+C,KAAKy7C,OAAkB5+C,GAAGumC,SAASpjC,KAAKy7C,MAAMwW,UAC9CjyD,KAAKy7C,MAAMwW,UAIf9hD,KACOnQ,KAAKi4C,UAGO,OAAfj4C,KAAKy7C,OACLz7C,KAAKy7C,MAAMoY,SAAS5sC,KAAK9W,GAI7B+U,WAAW/U,EAAM,wCAQhBxP,GACL,OAAOmpC,GAAQa,KAAKntC,KAAKwC,KAAMW,mCAhwB/B,OAAOiiC,QAAQ5iC,KAAKiqC,WAAauV,GAAUjU,uCAI3C,OAAO3I,QAAQ5iC,KAAK26C,WAAa36C,KAAKi4C,2CAItC,OAAOrV,QAAQ5iC,KAAKiqC,WAAauV,GAAUlB,yCAI3C,OAAO1b,QAAQ5iC,KAAKiqC,WAAauV,GAAUpB,uCAI3C,OAAOxb,QAAQ5iC,KAAKW,OAAS8+C,GAAMzV,uCAInC,OAAOpH,QAAQ5iC,KAAKW,OAAS8+C,GAAM1V,uCA8BnC,OAAOnH,QAAQ5iC,KAAK6hD,QAAU7hD,KAAK+rC,SAAW/rC,KAAK2jD,sCAOnD,OAAO/gB,QAAQ5iC,KAAKgrC,MAAMe,wCAO1B,OAAOnJ,QAAQ5iC,KAAK+rC,QAA+B,IAArB/rC,KAAK8rC,2CAOnC,OAAOlJ,QAAQ5iC,KAAKgrC,MAAM2Y,yCAyDdjhB,GAEZ,GAAK1iC,KAAK0xC,SAAV,CAKA,IAAMoiB,EAAej3D,GAAG4G,OAAOi/B,IAAUA,EAAQ,EAGjD1iC,KAAKgrC,MAAMc,YAAcgoB,EAAev4D,KAAK8H,IAAIq/B,EAAO1iC,KAAK0xC,UAAY,EAGzE1xC,KAAKwsC,MAAMrlC,IAAX,cAA6BnH,KAAK8rC,YAAlC,6BAOA,OAAO/Y,OAAO/yB,KAAKgrC,MAAMc,8CAMd,IACHuJ,EAAar1C,KAAKgrC,MAAlBqK,SAGR,OAAIx4C,GAAG4G,OAAO4xC,GACHA,EAMPA,GAAYA,EAASj1C,QAAUJ,KAAK0xC,SAAW,EACxC2D,EAASpvC,IAAI,GAAKjG,KAAK0xC,SAG3B,kCAOP,OAAO9O,QAAQ5iC,KAAKgrC,MAAMqL,0CAQ1B,IAAM0d,EAAe9d,WAAWj2C,KAAKssC,OAAOoF,UAGtCsiB,GAAgBh0D,KAAKgrC,WAAa0G,SAClCA,EAAY70C,GAAG4G,OAAOuwD,IAAiBA,IAAiBjtD,EAAAA,EAAeitD,EAAJ,EAGzE,OAAOD,GAAgBriB,+BAOhBzzC,GACP,IAAIwzC,EAASxzC,EAITpB,GAAG0zB,OAAOkhB,KACVA,EAAS1e,OAAO0e,IAIf50C,GAAG4G,OAAOguC,KACXA,EAASzxC,KAAKkuC,QAAQxxC,IAAI,WAIzBG,GAAG4G,OAAOguC,KACRA,EAAWzxC,KAAKssC,OAAhBmF,QAIHA,EAlBQ,IAmBRA,EAnBQ,GAsBRA,EArBQ,IAsBRA,EAtBQ,GA0BZzxC,KAAKssC,OAAOmF,OAASA,EAGrBzxC,KAAKgrC,MAAMyG,OAASA,GAGf50C,GAAG2qB,MAAMvpB,IAAU+B,KAAK80C,OAASrD,EAAS,IAC3CzxC,KAAK80C,OAAQ,mBAQjB,OAAO/hB,OAAO/yB,KAAKgrC,MAAMyG,oCAwBnBP,GACN,IAAIhqB,EAASgqB,EAGRr0C,GAAGsmC,QAAQjc,KACZA,EAASlnB,KAAKkuC,QAAQxxC,IAAI,UAIzBG,GAAGsmC,QAAQjc,KACZA,EAASlnB,KAAKssC,OAAOwI,OAIzB90C,KAAKssC,OAAOwI,MAAQ5tB,EAGpBlnB,KAAKgrC,MAAM8J,MAAQ5tB,kBAOnB,OAAO0b,QAAQ5iC,KAAKgrC,MAAM8J,wCAQ1B,OAAK90C,KAAK+qC,YAIN/qC,KAAK0jD,UAML9gB,QAAQ5iC,KAAKgrC,MAAMipB,cACnBrxB,QAAQ5iC,KAAKgrC,MAAMkpB,8BACnBtxB,QAAQ5iC,KAAKgrC,MAAMmpB,aAAen0D,KAAKgrC,MAAMmpB,YAAY/zD,sCAQvDsiC,GACN,IAAIsV,EAAQ,KAERn7C,GAAG4G,OAAOi/B,KACVsV,EAAQtV,GAGP7lC,GAAG4G,OAAOu0C,KACXA,EAAQh4C,KAAKkuC,QAAQxxC,IAAI,UAGxBG,GAAG4G,OAAOu0C,KACXA,EAAQh4C,KAAKssC,OAAO0L,MAAM6E,UAI1B7E,EAAQ,KACRA,EAAQ,IAERA,EAAQ,IACRA,EAAQ,GAGPh4C,KAAKssC,OAAO0L,MAAM5T,QAAQvqB,SAASm+B,IAMxCh4C,KAAKssC,OAAO0L,MAAM6E,SAAW7E,EAG7Bh4C,KAAKgrC,MAAMmhB,aAAenU,GARtBh4C,KAAKwsC,MAAMsF,KAAX,sBAAsCkG,EAAtC,qBAeJ,OAAOjlB,OAAO/yB,KAAKgrC,MAAMmhB,4CAQjBzpB,GACR,IAAM4J,EAAStsC,KAAKssC,OAAOF,QACrBhI,EAAUpkC,KAAKokC,QAAQgI,QAE7B,GAAKhI,EAAQhkC,OAAb,CAIA,IAAIgsC,IACCvvC,GAAG2qB,MAAMkb,IAAU3P,OAAO2P,GAC3B1iC,KAAKkuC,QAAQxxC,IAAI,WACjB4vC,EAAOuQ,SACPvQ,EAAOgL,SACT/9B,KAAK1c,GAAG4G,QAEV,IAAK2gC,EAAQvqB,SAASuyB,GAAU,CAC5B,IAAMnuC,EtBpqBX,SAAiBolC,EAAOplC,GAC3B,OAAKpB,GAAGwmC,MAAMA,IAAWA,EAAMjjC,OAIxBijC,EAAMnsB,OAAO,SAACsH,EAAM41C,GAAP,OAAiB74D,KAAK0L,IAAImtD,EAAOn2D,GAAS1C,KAAK0L,IAAIuX,EAAOvgB,GAASm2D,EAAO51C,IAHnF,KsBkqBW61C,CAAQjwB,EAASgI,GAC/BpsC,KAAKwsC,MAAMsF,KAAX,+BAA+C1F,EAA/C,WAAiEnuC,EAAjE,YACAmuC,EAAUnuC,EAIdgnC,GAAaznC,KAAKwC,KAAMA,KAAKgrC,MAAO,oBAAoB,GAASoB,QAAAA,IAGjEE,EAAOuQ,SAAWzQ,EAGlBpsC,KAAKgrC,MAAMoB,QAAUA,mBAOrB,OAAOpsC,KAAKgrC,MAAMoB,mCAQb1J,GACL,IAAMxb,EAASrqB,GAAGsmC,QAAQT,GAASA,EAAQ1iC,KAAKssC,OAAOsQ,KAAK9B,OAC5D96C,KAAKssC,OAAOsQ,KAAK9B,OAAS5zB,EAC1BlnB,KAAKgrC,MAAM4R,KAAO11B,kBAkDlB,OAAO0b,QAAQ5iC,KAAKgrC,MAAM4R,mCAOnBla,GACP7hC,GAAOiyD,OAAOt1D,KAAKwC,KAAM0iC,mBAOzB,OAAO1iC,KAAKgrC,MAAM0d,wCAOXhmB,GACF1iC,KAAK06C,QAKVrQ,GAAG0X,UAAUvkD,KAAKwC,KAAM0iC,GAAO,GAAO7Y,MAAM,cAJxC7pB,KAAKwsC,MAAMsF,KAAK,oDAWpB,OAAK9xC,KAAK06C,QAIH16C,KAAKgrC,MAAMS,aAAa,UAHpB,oCAUF/I,GACT,IAAMxb,EAASrqB,GAAGsmC,QAAQT,GAASA,EAAQ1iC,KAAKssC,OAAO8P,SACvDp8C,KAAKssC,OAAO8P,SAAWl1B,kBAOvB,OAAO0b,QAAQ5iC,KAAKssC,OAAO8P,6CAed1Z,GACb0O,GAAS3nC,IAAIjM,KAAKwC,KAAM0iC,GAAO,mBAMhB,IAAAsY,EACmBh7C,KAAKoxC,SAA/BuG,EADOqD,EACPrD,QAASN,EADF2D,EACE3D,aACjB,OAAOM,EAAUN,GAAgB,iCAQxB3U,GACT0O,GAASiK,YAAY79C,KAAKwC,KAAM0iC,GAAO,mBAOvC,OAAQ0O,GAASyK,gBAAgBr+C,KAAKwC,WAAa43C,mCAQ/ClV,GACJ,IAAM4xB,EACG,qBADHA,EAEM,SAIZ,GAAKxqB,GAAQS,IAAb,CAKA,IAAMrjB,EAASrqB,GAAGsmC,QAAQT,GAASA,EAAQ1iC,KAAKuqC,MAAQ+pB,EAGxDt0D,KAAKgrC,MAAMR,0BAA0BtjB,EAASotC,EAAaA,oBAO3D,OAAKxqB,GAAQS,IAINvqC,KAAKgrC,MAAMupB,uBAHP,yCA8LE5zD,EAAMspC,EAAUuqB,GAC7B,OAAO1qB,GAAQnrB,MAAMhe,EAAMspC,EAAUuqB,sCAQvB1zB,EAAKhiC,GACnB,OAAOmwC,GAAWnO,EAAKhiC,iCAQdmoC,GAAwB,IAAd7C,EAAc3jC,UAAAL,OAAA,QAAAjB,IAAAsB,UAAA,GAAAA,UAAA,MAC7B4kC,EAAU,KAUd,OARIxoC,GAAG0zB,OAAO0W,GACV5B,EAAUv9B,MAAM+K,KAAKjW,SAASurC,iBAAiBlB,IACxCpqC,GAAG2mC,SAASyD,GACnB5B,EAAUv9B,MAAM+K,KAAKo0B,GACdpqC,GAAGwmC,MAAM4D,KAChB5B,EAAU4B,EAAS3tB,OAAOzc,GAAG4mC,UAG7B5mC,GAAG2qB,MAAM6d,GACF,KAGJA,EAAQtrB,IAAI,SAAA06C,GAAA,OAAK,IAAItB,EAAKsB,EAAGrwB,WAhkCtC+uB,UAokCNA,GAAKhX,UzB9lCqB39C,GyB8lCA29C,GzB7lCfnxB,KAAKsjB,MAAMtjB,KAAKE,UAAU1sB","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.3' };\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 global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\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 final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\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 has = require('./_has');\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 = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = 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 && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'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 existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\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 var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'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 promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\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') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\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 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","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\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\ntry {\n var ce = new window.CustomEvent('test');\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(event, params.bubbles, params.cancelable, params.detail);\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","(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 searchString = '';\r\n this.forEach(function(value, name) {\r\n if(searchString.length > 0) searchString+= '&';\r\n searchString += serializeParam(name) + '=' + serializeParam(value);\r\n });\r\n return searchString;\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 var doc = document.implementation.createHTMLDocument('');\r\n window.doc = doc;\r\n if(base) {\r\n var baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\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 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 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 target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n // Inject the new <element>\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 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.hasAttribute('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.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 null;\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// Get the focused element\nexport function getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\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 = getFocusElement();\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// 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(event => element.style[event] !== undefined);\n\n return is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element) {\n setTimeout(() => {\n toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\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 });\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// 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 './utils/is';\nimport { getDeep } from './utils/objects';\nimport { replaceAll } from './utils/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// 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// 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// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n createElement,\n emptyElement,\n getAttributesFromSelector,\n getElement,\n getElements,\n hasClass,\n matches,\n removeElement,\n setAttributes,\n toggleClass,\n toggleHidden,\n} from './utils/elements';\nimport { off, on } from './utils/events';\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(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\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 // Toggle classname when pressed property is set\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 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: `plyr__time ${attributes.class}`,\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 // Create a settings menu item\n createMenuItem({ value, list, type, title, badge = null, checked = false }) {\n const item = createElement('li');\n\n const label = createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = createElement(\n 'input',\n extend(getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\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}%`);\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 toggleTab(setting, toggle) {\n toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n setQualityMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\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.toggleTab.call(this, type, toggle);\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 // Empty the menu\n emptyElement(list);\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 // 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}×`;\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 // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[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('ul');\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.tabs[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(`input[value=\"${value}\"]`);\n\n if (is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n toggleHidden(this.elements.settings.tabs.loop, false);\n toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.loop.options);\n controls.toggleTab.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 // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n const tracks = captions.getTracks.call(this);\n\n // Toggle the pane and tab\n controls.toggleTab.call(this, type, tracks.length);\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 (!tracks.length) {\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 // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\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.toggleTab.call(this, type, toggle);\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 list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n emptyElement(list);\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 { tabs } = this.elements.settings;\n const visible = !is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!is.element(form) || !is.element(button)) {\n return;\n }\n\n const show = is.boolean(event) ? event : is.element(form) && form.hasAttribute('hidden');\n\n if (is.event(event)) {\n const isMenuItem = is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form 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 && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (is.element(form)) {\n toggleHidden(form, !show);\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\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 // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!is.element(pane)) {\n return;\n }\n\n // Are we targeting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\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.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || !['width', 'height'].includes(e.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 current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n toggleHidden(pane, false);\n\n const tabs = getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (is.empty(this.config.controls)) {\n return null;\n }\n\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 // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\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 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 menu = createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = createElement('div');\n\n const home = createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = 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 id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\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 button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\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 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 (is.string(this.config.controls) || is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\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 // 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 i18n from './i18n';\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 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 languages = dedupe(\n Array.from(navigator.languages || navigator.language || navigator.userLanguage).map(language => language.split('-')[0]),\n );\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: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\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 'qualitychange',\n 'qualityrequested',\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 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 if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\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 i18n from './i18n';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\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 browser from './utils/browser';\nimport { getElement, getElements, getFocusElement, 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\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\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 this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\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 // 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 = getFocusElement();\n if (\n is.element(focused) &&\n (focused !== this.player.elements.inputs.seek &&\n matches(focused, this.player.config.selectors.editable))\n ) {\n return;\n }\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 this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.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 (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.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 this.player.touch = true;\n\n // Add touch class\n toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n toggleListener.call(this.player, window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n toggleListener.call(this.player, document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n once.call(this.player, document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n on.call(this.player, this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n on.call(this.player, this.player.elements.container, 'focusout', event => {\n toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n // Add classname to tabbed elements\n on.call(this.player, this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n toggleClass(getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n this.player,\n this.player.elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (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(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n },\n );\n }\n\n // Listen for media events\n media() {\n // Time change on media\n on.call(this.player, this.player.media, 'timeupdate seeking seeked', event =>\n controls.timeUpdate.call(this.player, event),\n );\n\n // Display duration\n on.call(this.player, this.player.media, 'durationchange loadeddata loadedmetadata', event =>\n controls.durationUpdate.call(this.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(this.player, this.player.media, 'canplay', () => {\n toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n on.call(this.player, this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n on.call(this.player, this.player.media, 'progress playing seeking seeked', event =>\n controls.updateProgress.call(this.player, event),\n );\n\n // Handle volume changes\n on.call(this.player, this.player.media, 'volumechange', event =>\n controls.updateVolume.call(this.player, event),\n );\n\n // Handle play/pause\n on.call(this.player, this.player.media, 'playing play pause ended emptied timeupdate', event =>\n ui.checkPlaying.call(this.player, event),\n );\n\n // Loading state\n on.call(this.player, this.player.media, 'waiting canplay seeked playing', event =>\n ui.checkLoading.call(this.player, event),\n );\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(this.player, this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(this.player, `.${this.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(this.player, wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n on.call(\n this.player,\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(this.player, this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n on.call(this.player, this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n on.call(this.player, this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n on.call(this.player, this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = this.player.config.events.concat(['keyup', 'keydown']).join(' ');\n on.call(this.player, this.player.media, proxyEvents, event => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n triggerEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.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(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const bind = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n this.player,\n element,\n type,\n event => proxy(event, defaultHandler, customHandlerKey),\n passive && !hasCustomHandler,\n );\n };\n\n // Play/pause toggle\n if (this.player.elements.buttons.play) {\n Array.from(this.player.elements.buttons.play).forEach(button => {\n bind(button, 'click', this.player.togglePlay, 'play');\n });\n }\n\n // Pause\n bind(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n bind(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n bind(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n bind(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n bind(this.player.elements.buttons.captions, 'click', () => this.player.toggleCaptions());\n\n // Fullscreen toggle\n bind(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n bind(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n bind(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n bind(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n bind(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.currentTrack = Number(event.target.value);\n showHomeTab();\n },\n 'language',\n );\n } else if (matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n bind(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n bind(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n const code = event.keyCode ? event.keyCode : event.which;\n const eventType = event.type;\n\n if ((eventType === 'keydown' || eventType === 'keyup') && (code !== 39 && code !== 37)) {\n return;\n }\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\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('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n bind(\n this.player.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 this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !is.element(this.player.elements.display.duration)) {\n bind(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n bind(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(getElements.call(this.player, 'input[type=\"range\"]')).forEach(element => {\n bind(element, 'input', event => controls.updateRangeFill.call(this.player, event.target));\n });\n }\n\n // Seek tooltip\n bind(this.player.elements.progress, 'mouseenter mouseleave mousemove', event =>\n controls.updateSeekTooltip.call(this.player, event),\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n bind(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n bind(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Focus in/out on controls\n bind(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\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 // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n bind(\n this.player.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 this.player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = this.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 controls from '../controls';\nimport ui from '../ui';\nimport { dedupe } from '../utils/arrays';\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// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n const qualities = {\n hd2160: 2160,\n hd1440: 1440,\n hd1080: 1080,\n hd720: 720,\n large: 480,\n medium: 360,\n small: 240,\n tiny: 144,\n };\n\n const entry = Object.entries(qualities).find(entry => entry.includes(input));\n\n if (entry) {\n // Get the match corresponding to the input\n return entry.find(value => value !== input);\n }\n\n return 'default';\n}\n\nfunction mapQualityUnits(levels) {\n if (is.empty(levels)) {\n return levels;\n }\n\n return dedupe(levels.map(level => mapQualityUnit(level)));\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 onPlaybackQualityChange() {\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\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 // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n instance.setPlaybackQuality(mapQualityUnit(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 // Get quality\n controls.setQualityMenu.call(\n player,\n mapQualityUnits(instance.getAvailableQualityLevels()),\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 i18n from '../i18n';\nimport { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\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 // 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 // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\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.3.22\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 buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\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');\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')) {\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 this.ads = new Ads(this);\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 // Trigger request event\n triggerEvent.call(this, this.media, 'qualityrequested', false, { quality });\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 // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n triggerEvent.call(this, this.media, eventName);\n }\n return !hiding;\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"]}
\ No newline at end of file +{"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/_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/_user-agent.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/custom-event-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/objects.js","src/js/utils/strings.js","src/js/i18n.js","src/js/utils/arrays.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","_shared","shared","_sharedKey","arrayIndexOf","IE_PROTO","_objectKeysInternal","names","result","push","_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","final","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","task","microtask","head","last","notify","flush","parent","domain","exit","enter","navigator","standalone","then","toggle","node","createTextNode","observe","characterData","$Promise","empty","newPromiseCapability","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","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","_userAgent","userAgent","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","preventDefault","defaultPrevented","params","evt","origPrevent","bubbles","cancelable","detail","createEvent","initCustomEvent","Event","iteratorSupported","checkIfIteratorIsSupported","createIterator","items","shift","serializeParam","encodeURIComponent","deserializeParam","decodeURIComponent","URLSearchParams","attribute","append","_this","_entries","getAll","callback","thisArg","polyfillURLSearchParams","u","URL","pathname","href","searchParams","checkIfURLIsSupported","_URL","url","base","doc","implementation","createHTMLDocument","baseElement","anchorElement","body","protocol","attributeName","_anchorElement","linkURLWithAnchorAttribute","origin","expectedPort","http:","https:","ftp:","addPortToOrigin","hostname","password","username","methodName","createObjectURL","blob","revokeObjectURL","polyfillURL","location","getOrigin","input","instanceOf","Boolean","isNullOrUndefined","isString","isNodeList","isEmpty","is$1","nullOrUndefined","boolean","function","array","weakMap","WeakMap","nodeList","element","Element","textNode","Text","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","hasAttribute","removeAttribute","toggleClass","force","classList","contains","hasClass","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelectorAll","getElements","container","getElement","querySelector","getFocusElement","focused","activeElement","transitionEndEvent","WebkitTransition","MozTransition","OTransition","transition","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","cancelRequests","config","blankVideo","debug","getDeep","path","sources","defineProperty$1","format","replaceAll","toTitleCase","toUpperCase","substr","toLowerCase","toCamelCase","toPascalCase","getHTML","innerHTML","i18n","{seektime}","seekTime","{title}","title","_ref2","dedupe","item","Storage","classCallCheck","enabled","storage","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","classNames","tooltip","warn","toggleNativeControls","createIcon","iconPath","iconPrefix","icon","createElementNS","role","focusable","use","setAttributeNS","createLabel","attr","createBadge","badge","menu","createButton","buttonType","button","label","labelPressed","iconPressed","control","controlPressed","pressed","createRange","autocomplete","aria-label","aria-valuemin","aria-valuemax","aria-valuenow","updateRangeFill","createProgress","aria-hidden","suffixKey","played","suffix","createTime","createMenuItem","_ref$badge","_ref$checked","checked","radio","faux","insertAdjacentHTML","updateTimeDisplay","updateVolume","setRange","muted","updateProgress","current","toFixed","getElementsByTagName","nodeValue","setProgress","buffered","percent","setProperty","updateSeekTooltip","_this2","tooltips","clientRect","getBoundingClientRect","visible","_toggle","width","pageX","parseFloat","timeUpdate","invert","invertTime","seeking","durationUpdate","hasDuration","displayDuration","toggleTab","setting","tabs","setQualityMenu","_this3","panes","checkMenu","sorting","getLabel","getBadge","updateSetting","pane","currentTrack","default","setCaptionsMenu","_this4","tracks","getTracks","toggled","language","unshift","setSpeedMenu","_this5","speed","isVimeo","tab","toggleMenu","form","show","isMenuItem","isButton","stopPropagation","getTabSize","clone","position","opacity","scrollWidth","height","scrollHeight","showTab","_this6","size","restore","propertyName","focus","_this7","aria-haspopup","aria-controls","aria-expanded","aria-labelled-by","tabindex","inner","home","back","inject","_this8","props","seektime","offsetHeight","_config","labels","parseUrl","parser","buildUrlParams","setup","isVideo","isYouTube","languages","userLanguage","active","trackEvents","_captions","currentTrackNode","languageExists","mode","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","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","listeners","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","tabFocus","google","publisherId","providers","types","noop","Console","onChange","keyCode","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","handleKey","firstTouch","which","altKey","ctrlKey","metaKey","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","delay","hasAudio","initialized","managerPromise","isAudio","ended","proxyEvents","_event$detail","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","showHomeTab","currentTarget","eventType","seekTo","_player","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","mapQualityUnit","hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","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","onPlaybackQualityChange","onPlaybackRateChange","playbackRate","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","getPlaybackQuality","setPlaybackQuality","getAvailablePlaybackRates","clearInterval","buffering","getVideoLoadedFraction","lastBuffered","onStateChange","levels","getAvailableQualityLevels","level","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","_this9","initialize","adError","zIndex","_this10","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.3' };\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 global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\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 final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\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 has = require('./_has');\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 = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = 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 && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'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 existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\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 var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'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 promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\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') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\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 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","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\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\ntry {\n var ce = new window.CustomEvent('test');\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(event, params.bubbles, params.cancelable, params.detail);\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","(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 searchString = '';\r\n this.forEach(function(value, name) {\r\n if(searchString.length > 0) searchString+= '&';\r\n searchString += serializeParam(name) + '=' + serializeParam(value);\r\n });\r\n return searchString;\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 var doc = document.implementation.createHTMLDocument('');\r\n window.doc = doc;\r\n if(base) {\r\n var baseElement = doc.createElement('base');\r\n baseElement.href = base;\r\n doc.head.appendChild(baseElement);\r\n }\r\n\r\n var anchorElement = doc.createElement('a');\r\n anchorElement.href = url;\r\n doc.body.appendChild(anchorElement);\r\n anchorElement.href = anchorElement.href; // force href to refresh\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 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 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 target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nexport function insertElement(type, parent, attributes, text) {\n // Inject the new <element>\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 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.hasAttribute('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.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 null;\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// Get the focused element\nexport function getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\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 = getFocusElement();\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// 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(event => element.style[event] !== undefined);\n\n return is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nexport function repaint(element) {\n setTimeout(() => {\n toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n toggleHidden(element, false);\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 });\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// 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 './utils/is';\nimport { getDeep } from './utils/objects';\nimport { replaceAll } from './utils/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// 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// 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// ==========================================================================\n\nimport captions from './captions';\nimport html5 from './html5';\nimport i18n from './i18n';\nimport support from './support';\nimport { repaint, transitionEndEvent } from './utils/animation';\nimport { dedupe } from './utils/arrays';\nimport browser from './utils/browser';\nimport {\n createElement,\n emptyElement,\n getAttributesFromSelector,\n getElement,\n getElements,\n hasClass,\n matches,\n removeElement,\n setAttributes,\n toggleClass,\n toggleHidden,\n} from './utils/elements';\nimport { off, on } from './utils/events';\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(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\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 // Toggle classname when pressed property is set\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 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: `plyr__time ${attributes.class}`,\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 // Create a settings menu item\n createMenuItem({ value, list, type, title, badge = null, checked = false }) {\n const item = createElement('li');\n\n const label = createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = createElement(\n 'input',\n extend(getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = createElement('span', { hidden: '' });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\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}%`);\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 toggleTab(setting, toggle) {\n toggleHidden(this.elements.settings.tabs[setting], !toggle);\n },\n\n // Set the quality menu\n setQualityMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\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.toggleTab.call(this, type, toggle);\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 // Empty the menu\n emptyElement(list);\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 // 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}×`;\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 // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[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('ul');\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.tabs[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(`input[value=\"${value}\"]`);\n\n if (is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n toggleHidden(this.elements.settings.tabs.loop, false);\n toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.loop.options);\n controls.toggleTab.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 // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n const tracks = captions.getTracks.call(this);\n\n // Toggle the pane and tab\n controls.toggleTab.call(this, type, tracks.length);\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 (!tracks.length) {\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 // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\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.toggleTab.call(this, type, toggle);\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 list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Empty the menu\n emptyElement(list);\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 { tabs } = this.elements.settings;\n const visible = !is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!is.element(form) || !is.element(button)) {\n return;\n }\n\n const show = is.boolean(event) ? event : is.element(form) && form.hasAttribute('hidden');\n\n if (is.event(event)) {\n const isMenuItem = is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form 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 && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (is.element(form)) {\n toggleHidden(form, !show);\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\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 // Toggle Menu\n showTab(target = '') {\n const { menu } = this.elements.settings;\n const pane = document.getElementById(target);\n\n // Nothing to show, bail\n if (!is.element(pane)) {\n return;\n }\n\n // Are we targeting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"]:not([hidden])');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\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.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || !['width', 'height'].includes(e.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 current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n toggleHidden(pane, false);\n\n const tabs = getElements.call(this, `[aria-controls=\"${target}\"]`);\n Array.from(tabs).forEach(tab => {\n tab.setAttribute('aria-expanded', true);\n });\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (is.empty(this.config.controls)) {\n return null;\n }\n\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 // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = createElement('div', {\n class: 'plyr__volume',\n });\n\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 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 menu = createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = createElement('div');\n\n const home = createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = 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 id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\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 button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: '',\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n });\n\n const back = createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\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 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 (is.string(this.config.controls) || is.element(this.config.controls)) {\n // String or HTMLElement passed as the option\n container = this.config.controls;\n } else if (is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls.call(this, props);\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 // 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 i18n from './i18n';\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 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 languages = dedupe(\n Array.from(navigator.languages || navigator.language || navigator.userLanguage).map(language => language.split('-')[0]),\n );\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: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\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 'qualitychange',\n 'qualityrequested',\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 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 if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\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 i18n from './i18n';\nimport support from './support';\nimport browser from './utils/browser';\nimport { getElement, toggleClass } from './utils/elements';\nimport { ready, triggerEvent } from './utils/events';\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 browser from './utils/browser';\nimport { getElement, getElements, getFocusElement, 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\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\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 this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\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 // 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 = getFocusElement();\n if (\n is.element(focused) &&\n (focused !== this.player.elements.inputs.seek &&\n matches(focused, this.player.config.selectors.editable))\n ) {\n return;\n }\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 this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.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 (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.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 this.player.touch = true;\n\n // Add touch class\n toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n toggleListener.call(this.player, window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n toggleListener.call(this.player, document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n once.call(this.player, document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n on.call(this.player, this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n on.call(this.player, this.player.elements.container, 'focusout', event => {\n toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n // Add classname to tabbed elements\n on.call(this.player, this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n toggleClass(getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(\n this.player,\n this.player.elements.container,\n 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen',\n event => {\n const { controls } = this.player.elements;\n\n // Remove button states for fullscreen\n if (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(this.player, true);\n // Use longer timeout for touch devices\n delay = this.player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(this.player.timers.controls);\n // Timer to prevent flicker when seeking\n this.player.timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n },\n );\n }\n\n // Listen for media events\n media() {\n // Time change on media\n on.call(this.player, this.player.media, 'timeupdate seeking seeked', event =>\n controls.timeUpdate.call(this.player, event),\n );\n\n // Display duration\n on.call(this.player, this.player.media, 'durationchange loadeddata loadedmetadata', event =>\n controls.durationUpdate.call(this.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(this.player, this.player.media, 'canplay', () => {\n toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n on.call(this.player, this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.resetOnEnd) {\n // Restart\n this.player.restart();\n }\n });\n\n // Check for buffer progress\n on.call(this.player, this.player.media, 'progress playing seeking seeked', event =>\n controls.updateProgress.call(this.player, event),\n );\n\n // Handle volume changes\n on.call(this.player, this.player.media, 'volumechange', event =>\n controls.updateVolume.call(this.player, event),\n );\n\n // Handle play/pause\n on.call(this.player, this.player.media, 'playing play pause ended emptied timeupdate', event =>\n ui.checkPlaying.call(this.player, event),\n );\n\n // Loading state\n on.call(this.player, this.player.media, 'waiting canplay seeked playing', event =>\n ui.checkLoading.call(this.player, event),\n );\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(this.player, this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(this.player, `.${this.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(this.player, wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n on.call(\n this.player,\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n on.call(this.player, this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n on.call(this.player, this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n on.call(this.player, this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n on.call(this.player, this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = this.player.config.events.concat(['keyup', 'keydown']).join(' ');\n on.call(this.player, this.player.media, proxyEvents, event => {\n let { detail = {} } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n triggerEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.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(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const bind = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n\n on.call(\n this.player,\n element,\n type,\n event => proxy(event, defaultHandler, customHandlerKey),\n passive && !hasCustomHandler,\n );\n };\n\n // Play/pause toggle\n if (this.player.elements.buttons.play) {\n Array.from(this.player.elements.buttons.play).forEach(button => {\n bind(button, 'click', this.player.togglePlay, 'play');\n });\n }\n\n // Pause\n bind(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n bind(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n bind(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n bind(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n bind(this.player.elements.buttons.captions, 'click', () => this.player.toggleCaptions());\n\n // Fullscreen toggle\n bind(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n bind(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n bind(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n bind(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n bind(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Go back to home tab on click\n const showHomeTab = () => {\n const id = `plyr-settings-${this.player.id}-home`;\n controls.showTab.call(this.player, id);\n };\n\n // Settings menu items - use event delegation as items are added/removed\n if (matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.currentTrack = Number(event.target.value);\n showHomeTab();\n },\n 'language',\n );\n } else if (matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n showHomeTab();\n },\n 'quality',\n );\n } else if (matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n showHomeTab();\n },\n 'speed',\n );\n } else {\n const tab = event.target;\n controls.showTab.call(this.player, tab.getAttribute('aria-controls'));\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n bind(this.player.elements.inputs.seek, 'mousedown mousemove', event => {\n const clientRect = this.player.elements.progress.getBoundingClientRect();\n const percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n bind(this.player.elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n\n const code = event.keyCode ? event.keyCode : event.which;\n const eventType = event.type;\n\n if ((eventType === 'keydown' || eventType === 'keyup') && (code !== 39 && code !== 37)) {\n return;\n }\n // Was playing before?\n const play = seek.hasAttribute('play-on-seeked');\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('play-on-seeked');\n this.player.play();\n } else if (!done && this.player.playing) {\n seek.setAttribute('play-on-seeked', '');\n this.player.pause();\n }\n });\n\n // Seek\n bind(\n this.player.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 this.player.currentTime = seekTo / seek.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !is.element(this.player.elements.display.duration)) {\n bind(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n\n controls.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n bind(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n Array.from(getElements.call(this.player, 'input[type=\"range\"]')).forEach(element => {\n bind(element, 'input', event => controls.updateRangeFill.call(this.player, event.target));\n });\n }\n\n // Seek tooltip\n bind(this.player.elements.progress, 'mouseenter mouseleave mousemove', event =>\n controls.updateSeekTooltip.call(this.player, event),\n );\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n bind(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n bind(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Focus in/out on controls\n bind(this.player.elements.controls, 'focusin focusout', event => {\n const { config, elements, timers } = this.player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(elements.controls, config.classNames.noTransition, event.type === 'focusin');\n\n // Toggle\n ui.toggleControls.call(this.player, event.type === 'focusin');\n\n // If focusin, hide again after delay\n if (event.type === 'focusin') {\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 // Hide\n timers.controls = setTimeout(() => ui.toggleControls.call(this.player, false), delay);\n }\n });\n\n // Mouse wheel for volume\n bind(\n this.player.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 this.player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const { volume } = this.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 controls from '../controls';\nimport ui from '../ui';\nimport { dedupe } from '../utils/arrays';\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// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n const qualities = {\n hd2160: 2160,\n hd1440: 1440,\n hd1080: 1080,\n hd720: 720,\n large: 480,\n medium: 360,\n small: 240,\n tiny: 144,\n };\n\n const entry = Object.entries(qualities).find(entry => entry.includes(input));\n\n if (entry) {\n // Get the match corresponding to the input\n return entry.find(value => value !== input);\n }\n\n return 'default';\n}\n\nfunction mapQualityUnits(levels) {\n if (is.empty(levels)) {\n return levels;\n }\n\n return dedupe(levels.map(level => mapQualityUnit(level)));\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 onPlaybackQualityChange() {\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\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 // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n instance.setPlaybackQuality(mapQualityUnit(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 // Get quality\n controls.setQualityMenu.call(\n player,\n mapQualityUnits(instance.getAvailableQualityLevels()),\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 i18n from '../i18n';\nimport { createElement } from '../utils/elements';\nimport { triggerEvent } from '../utils/events';\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 // 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 // Get skippable state\n // TODO: Skip button\n // this.player.debug.warn(this.manager.getAdSkippableState());\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.3.23\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 buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\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');\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')) {\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 this.ads = new Ads(this);\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 // Trigger request event\n triggerEvent.call(this, this.media, 'qualityrequested', false, { quality });\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 // Trigger event on change\n if (hiding !== isHidden) {\n const eventName = hiding ? 'controlshidden' : 'controlsshown';\n triggerEvent.call(this, this.media, eventName);\n }\n return !hiding;\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"]}
\ No newline at end of file @@ -132,13 +132,13 @@ See [initialising](#initialising) for more information on advanced setups. You can use our CDN (provided by [Fastly](https://www.fastly.com/)) for the JavaScript. There's 2 versions; one with and one without [polyfills](#polyfills). My recommendation would be to manage polyfills seperately as part of your application but to make life easier you can use the polyfilled build. ```html -<script src="https://cdn.plyr.io/3.3.22/plyr.js"></script> +<script src="https://cdn.plyr.io/3.3.23/plyr.js"></script> ``` ...or... ```html -<script src="https://cdn.plyr.io/3.3.22/plyr.polyfilled.js"></script> +<script src="https://cdn.plyr.io/3.3.23/plyr.polyfilled.js"></script> ``` ### CSS @@ -152,13 +152,13 @@ Include the `plyr.css` stylsheet into your `<head>` If you want to use our CDN (provided by [Fastly](https://www.fastly.com/)) for the default CSS, you can use the following: ```html -<link rel="stylesheet" href="https://cdn.plyr.io/3.3.22/plyr.css"> +<link rel="stylesheet" href="https://cdn.plyr.io/3.3.23/plyr.css"> ``` ### SVG Sprite The SVG sprite is loaded automatically from our CDN (provided by [Fastly](https://www.fastly.com/)). To change this, see the [options](#options) below. For -reference, the CDN hosted SVG sprite can be found at `https://cdn.plyr.io/3.3.22/plyr.svg`. +reference, the CDN hosted SVG sprite can be found at `https://cdn.plyr.io/3.3.23/plyr.svg`. ## Ads diff --git a/src/js/plyr.js b/src/js/plyr.js index 6d321112..65b6c94d 100644 --- a/src/js/plyr.js +++ b/src/js/plyr.js @@ -1,6 +1,6 @@ // ========================================================================== // Plyr -// plyr.js v3.3.22 +// plyr.js v3.3.23 // https://github.com/sampotts/plyr // License: The MIT License (MIT) // ========================================================================== diff --git a/src/js/plyr.polyfilled.js b/src/js/plyr.polyfilled.js index 574ad5e5..7553ee91 100644 --- a/src/js/plyr.polyfilled.js +++ b/src/js/plyr.polyfilled.js @@ -1,6 +1,6 @@ // ========================================================================== // Plyr Polyfilled Build -// plyr.js v3.3.22 +// plyr.js v3.3.23 // https://github.com/sampotts/plyr // License: The MIT License (MIT) // ========================================================================== |