{"version":3,"sources":["webpack:///./node_modules/yt-player/index.js","webpack:///./node_modules/events/events.js","webpack:///./node_modules/load-script2/index.js"],"names":["EventEmitter","loadScript","YOUTUBE_STATES","0","1","2","3","5","YOUTUBE_ERROR","loadIframeAPICallbacks","module","exports","element","opts","super","elem","document","querySelector","id","this","_id","Math","random","toString","slice","_opts","Object","assign","width","height","autoplay","captions","undefined","controls","keyboard","fullscreen","annotations","modestBranding","related","timeupdateFrequency","playsInline","videoId","destroyed","_api","_autoplay","_player","_ready","_queue","_interval","_startInterval","bind","_stopInterval","on","_loadIframeAPI","err","api","_destroy","Error","load","loadVideoById","cueVideoById","_createPlayer","playVideo","_queueCommand","pauseVideo","stopVideo","seconds","seekTo","volume","setVolume","getVolume","mute","unMute","isMuted","setSize","rate","setPlaybackRate","suggestedQuality","setPlaybackQuality","getPlaybackRate","getAvailablePlaybackRates","getDuration","getVideoLoadedFraction","getPlayerState","getCurrentTime","destroy","removeListener","emit","command","args","push","length","shift","apply","cb","window","YT","Player","Array","from","getElementsByTagName","some","script","src","catch","loadCb","onYouTubeIframeAPIReady","playerVars","cc_load_policy","hl","cc_lang_pref","disablekb","enablejsapi","fs","iv_load_policy","modestbranding","origin","location","playsinline","rel","wmode","events","onReady","_onReady","onStateChange","data","_onStateChange","onPlaybackQualityChange","_onPlaybackQualityChange","onPlaybackRateChange","_onPlaybackRateChange","onError","_onError","_flushQueue","state","includes","_onTimeupdate","code","setInterval","clearInterval","ReflectOwnKeys","R","Reflect","ReflectApply","target","receiver","Function","prototype","call","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","concat","NumberIsNaN","Number","isNaN","value","init","once","emitter","name","Promise","resolve","reject","errorListener","resolver","arguments","eventTargetAgnosticAddListener","handler","flags","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","TypeError","_getMaxListeners","that","_addListener","type","prepend","m","existing","warning","create","newListener","unshift","warned","w","String","count","console","warn","onceWrapper","fired","wrapFn","_onceWrap","wrapped","_listeners","unwrap","evlistener","arr","ret","i","unwrapListeners","arrayClone","listenerCount","n","copy","addEventListener","wrapListener","arg","removeEventListener","defineProperty","enumerable","get","set","RangeError","getPrototypeOf","setMaxListeners","getMaxListeners","doError","error","er","message","context","len","listeners","addListener","prependListener","prependOnceListener","list","position","originalListener","index","pop","spliceOne","off","removeAllListeners","key","keys","rawListeners","eventNames","attrs","parentNode","createElement","async","k","v","entries","setAttribute","onload","onerror","head","appendChild"],"mappings":"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","file":"2.29d926.js","sourcesContent":["const EventEmitter = require('events').EventEmitter\nconst loadScript = require('load-script2')\n\nconst YOUTUBE_IFRAME_API_SRC = 'https://www.youtube.com/iframe_api'\n\nconst YOUTUBE_STATES = {\n '-1': 'unstarted',\n 0: 'ended',\n 1: 'playing',\n 2: 'paused',\n 3: 'buffering',\n 5: 'cued'\n}\n\nconst YOUTUBE_ERROR = {\n // The request contains an invalid parameter value. For example, this error\n // occurs if you specify a videoId that does not have 11 characters, or if the\n // videoId contains invalid characters, such as exclamation points or asterisks.\n INVALID_PARAM: 2,\n\n // The requested content cannot be played in an HTML5 player or another error\n // related to the HTML5 player has occurred.\n HTML5_ERROR: 5,\n\n // The video requested was not found. This error occurs when a video has been\n // removed (for any reason) or has been marked as private.\n NOT_FOUND: 100,\n\n // The owner of the requested video does not allow it to be played in embedded\n // players.\n UNPLAYABLE_1: 101,\n\n // This error is the same as 101. It's just a 101 error in disguise!\n UNPLAYABLE_2: 150\n}\n\nconst loadIframeAPICallbacks = []\n\n/**\n * YouTube Player. Exposes a better API, with nicer events.\n * @param {HTMLElement|selector} element\n */\nclass YouTubePlayer extends EventEmitter {\n constructor (element, opts) {\n super()\n\n const elem = typeof element === 'string'\n ? document.querySelector(element)\n : element\n\n if (elem.id) {\n this._id = elem.id // use existing element id\n } else {\n this._id = elem.id = 'ytplayer-' + Math.random().toString(16).slice(2, 8)\n }\n\n this._opts = Object.assign({\n width: 640,\n height: 360,\n autoplay: false,\n captions: undefined,\n controls: true,\n keyboard: true,\n fullscreen: true,\n annotations: true,\n modestBranding: false,\n related: true,\n timeupdateFrequency: 1000,\n playsInline: true\n }, opts)\n\n this.videoId = null\n this.destroyed = false\n\n this._api = null\n this._autoplay = false // autoplay the first video?\n this._player = null\n this._ready = false // is player ready?\n this._queue = []\n\n this._interval = null\n\n // Setup listeners for 'timeupdate' events. The YouTube Player does not fire\n // 'timeupdate' events, so they are simulated using a setInterval().\n this._startInterval = this._startInterval.bind(this)\n this._stopInterval = this._stopInterval.bind(this)\n\n this.on('playing', this._startInterval)\n this.on('unstarted', this._stopInterval)\n this.on('ended', this._stopInterval)\n this.on('paused', this._stopInterval)\n this.on('buffering', this._stopInterval)\n\n this._loadIframeAPI((err, api) => {\n if (err) return this._destroy(new Error('YouTube Iframe API failed to load'))\n this._api = api\n\n // If load(videoId, [autoplay]) was called before Iframe API loaded, ensure it gets\n // called again now\n if (this.videoId) this.load(this.videoId, this._autoplay)\n })\n }\n\n load (videoId, autoplay = false) {\n if (this.destroyed) return\n\n this.videoId = videoId\n this._autoplay = autoplay\n\n // If the Iframe API is not ready yet, do nothing. Once the Iframe API is\n // ready, `load(this.videoId)` will be called.\n if (!this._api) return\n\n // If there is no player instance, create one.\n if (!this._player) {\n this._createPlayer(videoId)\n return\n }\n\n // If the player instance is not ready yet, do nothing. Once the player\n // instance is ready, `load(this.videoId)` will be called. This ensures that\n // the last call to `load()` is the one that takes effect.\n if (!this._ready) return\n\n // If the player instance is ready, load the given `videoId`.\n if (autoplay) {\n this._player.loadVideoById(videoId)\n } else {\n this._player.cueVideoById(videoId)\n }\n }\n\n play () {\n if (this._ready) this._player.playVideo()\n else this._queueCommand('play')\n }\n\n pause () {\n if (this._ready) this._player.pauseVideo()\n else this._queueCommand('pause')\n }\n\n stop () {\n if (this._ready) this._player.stopVideo()\n else this._queueCommand('stop')\n }\n\n seek (seconds) {\n if (this._ready) this._player.seekTo(seconds, true)\n else this._queueCommand('seek', seconds)\n }\n\n setVolume (volume) {\n if (this._ready) this._player.setVolume(volume)\n else this._queueCommand('setVolume', volume)\n }\n\n getVolume () {\n return (this._ready && this._player.getVolume()) || 0\n }\n\n mute () {\n if (this._ready) this._player.mute()\n else this._queueCommand('mute')\n }\n\n unMute () {\n if (this._ready) this._player.unMute()\n else this._queueCommand('unMute')\n }\n\n isMuted () {\n return (this._ready && this._player.isMuted()) || false\n }\n\n setSize (width, height) {\n if (this._ready) this._player.setSize(width, height)\n else this._queueCommand('setSize', width, height)\n }\n\n setPlaybackRate (rate) {\n if (this._ready) this._player.setPlaybackRate(rate)\n else this._queueCommand('setPlaybackRate', rate)\n }\n\n setPlaybackQuality (suggestedQuality) {\n if (this._ready) this._player.setPlaybackQuality(suggestedQuality)\n else this._queueCommand('setPlaybackQuality', suggestedQuality)\n }\n\n getPlaybackRate () {\n return (this._ready && this._player.getPlaybackRate()) || 1\n }\n\n getAvailablePlaybackRates () {\n return (this._ready && this._player.getAvailablePlaybackRates()) || [1]\n }\n\n getDuration () {\n return (this._ready && this._player.getDuration()) || 0\n }\n\n getProgress () {\n return (this._ready && this._player.getVideoLoadedFraction()) || 0\n }\n\n getState () {\n return (this._ready && YOUTUBE_STATES[this._player.getPlayerState()]) || 'unstarted'\n }\n\n getCurrentTime () {\n return (this._ready && this._player.getCurrentTime()) || 0\n }\n\n destroy () {\n this._destroy()\n }\n\n _destroy (err) {\n if (this.destroyed) return\n this.destroyed = true\n\n if (this._player) {\n this._player.stopVideo && this._player.stopVideo()\n this._player.destroy()\n }\n\n this.videoId = null\n\n this._id = null\n this._opts = null\n this._api = null\n this._player = null\n this._ready = false\n this._queue = null\n\n this._stopInterval()\n\n this.removeListener('playing', this._startInterval)\n this.removeListener('paused', this._stopInterval)\n this.removeListener('buffering', this._stopInterval)\n this.removeListener('unstarted', this._stopInterval)\n this.removeListener('ended', this._stopInterval)\n\n if (err) this.emit('error', err)\n }\n\n _queueCommand (command, ...args) {\n if (this.destroyed) return\n this._queue.push([command, args])\n }\n\n _flushQueue () {\n while (this._queue.length) {\n const command = this._queue.shift()\n this[command[0]].apply(this, command[1])\n }\n }\n\n _loadIframeAPI (cb) {\n // If API is loaded, there is nothing else to do\n if (window.YT && typeof window.YT.Player === 'function') {\n return cb(null, window.YT)\n }\n\n // Otherwise, queue callback until API is loaded\n loadIframeAPICallbacks.push(cb)\n\n const scripts = Array.from(document.getElementsByTagName('script'))\n const isLoading = scripts.some(script => script.src === YOUTUBE_IFRAME_API_SRC)\n\n // If API <script> tag is not present in the page, inject it. Ensures that\n // if user includes a hardcoded <script> tag in HTML for performance, another\n // one will not be added\n if (!isLoading) {\n loadScript(YOUTUBE_IFRAME_API_SRC).catch(err => {\n while (loadIframeAPICallbacks.length) {\n const loadCb = loadIframeAPICallbacks.shift()\n loadCb(err)\n }\n })\n }\n\n // If ready function is not present, create it\n if (typeof window.onYouTubeIframeAPIReady !== 'function') {\n window.onYouTubeIframeAPIReady = () => {\n while (loadIframeAPICallbacks.length) {\n const loadCb = loadIframeAPICallbacks.shift()\n loadCb(null, window.YT)\n }\n }\n }\n }\n\n _createPlayer (videoId) {\n if (this.destroyed) return\n\n const opts = this._opts\n\n this._player = new this._api.Player(this._id, {\n width: opts.width,\n height: opts.height,\n videoId: videoId,\n playerVars: {\n // This parameter specifies whether the initial video will automatically\n // start to play when the player loads. Supported values are 0 or 1. The\n // default value is 0.\n autoplay: opts.autoplay ? 1 : 0,\n\n // Setting the parameter's value to 1 causes closed captions to be shown\n // by default, even if the user has turned captions off. The default\n // behavior is based on user preference.\n cc_load_policy: opts.captions != null\n ? opts.captions !== false ? 1 : 0\n : undefined, // default to not setting this option\n\n // Sets the player's interface language. The parameter value is an ISO\n // 639-1 two-letter language code or a fully specified locale. For\n // example, fr and fr-ca are both valid values. Other language input\n // codes, such as IETF language tags (BCP 47) might also be handled\n // properly.\n hl: (opts.captions != null && opts.captions !== false)\n ? opts.captions\n : undefined, // default to not setting this option\n\n // This parameter specifies the default language that the player will\n // use to display captions. Set the parameter's value to an ISO 639-1\n // two-letter language code.\n cc_lang_pref: (opts.captions != null && opts.captions !== false)\n ? opts.captions\n : undefined, // default to not setting this option\n\n // This parameter indicates whether the video player controls are\n // displayed. For IFrame embeds that load a Flash player, it also defines\n // when the controls display in the player as well as when the player\n // will load. Supported values are:\n // - controls=0 – Player controls do not display in the player. For\n // IFrame embeds, the Flash player loads immediately.\n // - controls=1 – (default) Player controls display in the player. For\n // IFrame embeds, the controls display immediately and\n // the Flash player also loads immediately.\n // - controls=2 – Player controls display in the player. For IFrame\n // embeds, the controls display and the Flash player\n // loads after the user initiates the video playback.\n controls: opts.controls ? 2 : 0,\n\n // Setting the parameter's value to 1 causes the player to not respond to\n // keyboard controls. The default value is 0, which means that keyboard\n // controls are enabled.\n disablekb: opts.keyboard ? 0 : 1,\n\n // Setting the parameter's value to 1 enables the player to be\n // controlled via IFrame or JavaScript Player API calls. The default\n // value is 0, which means that the player cannot be controlled using\n // those APIs.\n enablejsapi: 1,\n\n // Setting this parameter to 0 prevents the fullscreen button from\n // displaying in the player. The default value is 1, which causes the\n // fullscreen button to display.\n fs: opts.fullscreen ? 1 : 0,\n\n // Setting the parameter's value to 1 causes video annotations to be\n // shown by default, whereas setting to 3 causes video annotations to not\n // be shown by default. The default value is 1.\n iv_load_policy: opts.annotations ? 1 : 3,\n\n // This parameter lets you use a YouTube player that does not show a\n // YouTube logo. Set the parameter value to 1 to prevent the YouTube logo\n // from displaying in the control bar. Note that a small YouTube text\n // label will still display in the upper-right corner of a paused video\n // when the user's mouse pointer hovers over the player.\n modestbranding: opts.modestBranding ? 1 : 0,\n\n // This parameter provides an extra security measure for the IFrame API\n // and is only supported for IFrame embeds. If you are using the IFrame\n // API, which means you are setting the enablejsapi parameter value to 1,\n // you should always specify your domain as the origin parameter value.\n origin: window.location.origin,\n\n // This parameter controls whether videos play inline or fullscreen in an\n // HTML5 player on iOS. Valid values are:\n // - 0: This value causes fullscreen playback. This is currently the\n // default value, though the default is subject to change.\n // - 1: This value causes inline playback for UIWebViews created with\n // the allowsInlineMediaPlayback property set to TRUE.\n playsinline: opts.playsInline ? 1 : 0,\n\n // This parameter indicates whether the player should show related\n // videos from the same channel (0) or from any channel (1) when\n // playback of the video ends. The default value is 1.\n rel: opts.related ? 1 : 0,\n\n // (Not part of documented API) Allow html elements with higher z-index\n // to be shown on top of the YouTube player.\n wmode: 'opaque'\n },\n events: {\n onReady: () => this._onReady(videoId),\n onStateChange: (data) => this._onStateChange(data),\n onPlaybackQualityChange: (data) => this._onPlaybackQualityChange(data),\n onPlaybackRateChange: (data) => this._onPlaybackRateChange(data),\n onError: (data) => this._onError(data)\n }\n })\n }\n\n /**\n * This event fires when the player has finished loading and is ready to begin\n * receiving API calls.\n */\n _onReady (videoId) {\n if (this.destroyed) return\n\n this._ready = true\n\n // Once the player is ready, always call `load(videoId, [autoplay])` to handle\n // these possible cases:\n //\n // 1. `load(videoId, true)` was called before the player was ready. Ensure that\n // the selected video starts to play.\n //\n // 2. `load(videoId, false)` was called before the player was ready. Now the\n // player is ready and there's nothing to do.\n //\n // 3. `load(videoId, [autoplay])` was called multiple times before the player\n // was ready. Therefore, the player was initialized with the wrong videoId,\n // so load the latest videoId and potentially autoplay it.\n this.load(this.videoId, this._autoplay)\n\n this._flushQueue()\n }\n\n /**\n * Called when the player's state changes. We emit friendly events so the user\n * doesn't need to use YouTube's YT.PlayerState.* event constants.\n */\n _onStateChange (data) {\n if (this.destroyed) return\n\n const state = YOUTUBE_STATES[data.data]\n\n if (state) {\n // Send a 'timeupdate' anytime the state changes. When the video halts for any\n // reason ('paused', 'buffering', or 'ended') no further 'timeupdate' events\n // should fire until the video unhalts.\n if (['paused', 'buffering', 'ended'].includes(state)) this._onTimeupdate()\n\n this.emit(state)\n\n // When the video changes ('unstarted' or 'cued') or starts ('playing') then a\n // 'timeupdate' should follow afterwards (never before!) to reset the time.\n if (['unstarted', 'playing', 'cued'].includes(state)) this._onTimeupdate()\n } else {\n throw new Error('Unrecognized state change: ' + data)\n }\n }\n\n /**\n * This event fires whenever the video playback quality changes. Possible\n * values are: 'small', 'medium', 'large', 'hd720', 'hd1080', 'highres'.\n */\n _onPlaybackQualityChange (data) {\n if (this.destroyed) return\n this.emit('playbackQualityChange', data.data)\n }\n\n /**\n * This event fires whenever the video playback rate changes.\n */\n _onPlaybackRateChange (data) {\n if (this.destroyed) return\n this.emit('playbackRateChange', data.data)\n }\n\n /**\n * This event fires if an error occurs in the player.\n */\n _onError (data) {\n if (this.destroyed) return\n\n const code = data.data\n\n // The HTML5_ERROR error occurs when the YouTube player needs to switch from\n // HTML5 to Flash to show an ad. Ignore it.\n if (code === YOUTUBE_ERROR.HTML5_ERROR) return\n\n // The remaining error types occur when the YouTube player cannot play the\n // given video. This is not a fatal error. Report it as unplayable so the user\n // has an opportunity to play another video.\n if (code === YOUTUBE_ERROR.UNPLAYABLE_1 ||\n code === YOUTUBE_ERROR.UNPLAYABLE_2 ||\n code === YOUTUBE_ERROR.NOT_FOUND ||\n code === YOUTUBE_ERROR.INVALID_PARAM) {\n return this.emit('unplayable', this.videoId)\n }\n\n // Unexpected error, does not match any known type\n this._destroy(new Error('YouTube Player Error. Unknown error code: ' + code))\n }\n\n /**\n * This event fires when the time indicated by the `getCurrentTime()` method\n * has been updated.\n */\n _onTimeupdate () {\n this.emit('timeupdate', this.getCurrentTime())\n }\n\n _startInterval () {\n this._interval = setInterval(() => this._onTimeupdate(), this._opts.timeupdateFrequency)\n }\n\n _stopInterval () {\n clearInterval(this._interval)\n this._interval = null\n }\n}\n\nmodule.exports = YouTubePlayer\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","/*! load-script2. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nmodule.exports = function loadScript2 (src, attrs, parentNode) {\n return new Promise((resolve, reject) => {\n const script = document.createElement('script')\n script.async = true\n script.src = src\n\n for (const [k, v] of Object.entries(attrs || {})) {\n script.setAttribute(k, v)\n }\n\n script.onload = () => {\n script.onerror = script.onload = null\n resolve(script)\n }\n\n script.onerror = () => {\n script.onerror = script.onload = null\n reject(new Error(`Failed to load ${src}`))\n }\n\n const node = parentNode || document.head || document.getElementsByTagName('head')[0]\n node.appendChild(script)\n })\n}\n"],"sourceRoot":""}