{
  "nativeAdsAdapter.adapter,getVersion": "return'7.0.1-chromecast-caf-ads-js'",
  "nativeAdsAdapter.adapter,getPlayerName": "return'Chromecast CAF Ads'",
  "nativeAdsAdapter.adapter,getPlayhead": "return this.player.getBreakClipCurrentTimeSec()",
  "nativeAdsAdapter.adapter,getDuration": "return this.player.getBreakClipDurationSec()",
  "nativeAdsAdapter.adapter,getPosition": "var ret=this.getNpawReference().Constants.AdPosition.Midroll;var adapter=this.plugin.getAdapter();if(adapter){if(!adapter.flags.isJoined||adapter.getPlayhead()<1){ret=this.getNpawReference().Constants.AdPosition.Preroll}else if(adapter.getPlayhead()+1>=adapter.getDuration()){ret=this.getNpawReference().Constants.AdPosition.Postroll}};return ret",
  "nativeAdsAdapter.adapter,getTitle": "return'unknown'",
  "nativeAdsAdapter.adapter,getResource": "return'unknown'",
  "nativeAdsAdapter.adapter,getCreativeId": "return this.clipId",
  "nativeAdsAdapter.adapter,getIsVisible": "return true",
  "nativeAdsAdapter.adapter,getIsFullscreen": "return true",
  "nativeAdsAdapter.adapter,getIsSkippable": "return this.isSkippable",
  "nativeAdsAdapter.adapter,getGivenAds": "return this.adsInBreak",
  "nativeAdsAdapter.adapter,getBreaksTime": "var breaks=this.player.getBreaks();var cuePoints=[];for(var breakN in breaks){var position=breaks[breakN].position;var adapter=this.plugin?this.plugin.getAdapter():null;if(position===-1&&adapter){position=adapter.getDuration()};if(cuePoints.indexOf(position)===-1){cuePoints.push(position)}};return cuePoints",
  "nativeAdsAdapter.adapter,getGivenBreaks": "var breaks=this.player.getBreaks();var cuePoints=[];for(var breakN in breaks){var position=breaks[breakN].position;var adapter=this.plugin?this.plugin.getAdapter():null;if(position===-1&&adapter){position=adapter.getDuration()};if(cuePoints.indexOf(position)===-1){cuePoints.push(position)}};return cuePoints.length",
  "nativeAdsAdapter.adapter,registerListeners": "var Events=cast.framework.events;this.monitorPlayhead(true,false,1200);this.references={};this.references[Events.EventType.BREAK_ENDED]=this.endListener.bind(this);this.references[Events.EventType.BREAK_CLIP_LOADING]=this.playListener.bind(this);this.references[Events.EventType.BREAK_CLIP_STARTED]=this.joinListener.bind(this);this.references[Events.EventType.BREAK_CLIP_ENDED]=this.stopListener.bind(this);this.references[Events.EventType.BREAK_STARTED]=this.breakStartListener.bind(this);this.references[Events.EventType.BREAK_ENDED]=this.breakEndListener.bind(this);this.references[Events.EventType.PAUSE]=this.pauseListener.bind(this);this.references[Events.EventType.PLAYING]=this.playingListener.bind(this);for(var key in this.references){this.player.addEventListener(key,this.references[key])}",
  "nativeAdsAdapter.adapter,unregisterListeners": "if(this.monitor)this.monitor.stop();if(this.player&&this.references){for(var key in this.references){this.player.removeEventListener(key,this.references[key])};this.references={}}",
  "nativeAdsAdapter.adapter,playListener,e": "var adapter=this.plugin.getAdapter();if(adapter){adapter.fireStart({},'playListener-ads');adapter.firePause({},'playListener-ads')};if(typeof e!=='undefined'){this.isSkippable=e.whenSkippable!==undefined;this.clipId=e.breakClipId}else{this.isSkippable=false;this.clipId=null}",
  "nativeAdsAdapter.adapter,joinListener,e": "if(!this._quartileTimer){this._quartileTimer=setInterval(this.sendQuartile.bind(this),1000);};var adapter=this.plugin?this.plugin.getAdapter():null;if(adapter)adapter.firePause({},'joinListener-ads');if(this.plugin&&this.plugin.isBreakStarted){this.fireStart({},'joinListener');this.fireJoin({},'joinListener')}",
  "nativeAdsAdapter.adapter,breakStartListener,e": "this.adsInBreak=e.total;this.fireBreakStart();if(!this._quartileTimer){this._quartileTimer=setInterval(this.sendQuartile.bind(this),1000);};this.fireStart({},'breakStartListener');this.fireJoin({},'breakStartListener');",
  "nativeAdsAdapter.adapter,breakEndListener,e": "this.adsInBreak=undefined",
  "nativeAdsAdapter.adapter,stopListener,e": "this.fireStop({},'stopListener');",
  "nativeAdsAdapter.adapter,endListener,e": "this.fireBreakStop();var adapter=this.plugin?this.plugin.getAdapter():null;if(adapter){adapter.fireResume({},'endListener-ads');}",
  "nativeAdsAdapter.adapter,sendQuartile,e": "var playhead=this.getPlayhead();var duration=this.getDuration();if(playhead>duration/4){this.fireQuartile(1);if(playhead>duration/2){this.fireQuartile(2);if(playhead>duration*0.75){this.fireQuartile(3);if(this._quartileTimer){clearInterval(this._quartileTimer);this._quartileTimer=undefined;}}}}",
  "nativeAdsAdapter.adapter,pauseListener,e": "if(!this.flags.isBuffering){this.firePause({},'pauseListener')}",
  "nativeAdsAdapter.adapter,playingListener,e": "this.fireResume({},'playingListener')",
  
  "adapter,getVersion": "return'7.0.1-chromecast-caf-js'",
  "adapter,getPlayhead": "return this.player.getCurrentTimeSec()",
  "adapter,getPlayrate": "var ret=this.player.getPlaybackRate();if(!ret&&!this.flags.isPaused){ret=1};return ret",
  "adapter,getDroppedFrames": "return this.castMediaElement?this.castMediaElement.webkitDroppedFrameCount:null",
  "adapter,getDuration": "return this.player.getDurationSec()",
  "adapter,getBitrate": "return this.bitrate||0",
  "adapter,getThroughput": "var tp=this.throughput||-1;if(!this.throughput){if(this.castMediaElement&&this.castMediaElement.webkitVideoDecodedByteCount&&this.castMediaElement.webkitAudioDecodedByteCount){var video=this.castMediaElement.webkitVideoDecodedByteCount;var audio=this.castMediaElement.webkitAudioDecodedByteCount;var prevCount=this.actualCount||0;if(video&&audio>video){this.actualCount=video}else{this.actualCount=audio+video};var pingTime=JSON.parse(this.plugin.getStoredData()).q.pt||5;tp=Math.round((this.actualCount-prevCount)/(pingTime/1000))}};return tp",
  "adapter,getRendition": "var width=this.castMediaElement?this.castMediaElement.videoWidth:null;var height=this.castMediaElement?this.castMediaElement.videoHeight:null;return this.getNpawUtils().buildRenditionString(width,height,this.getBitrate())",
  "adapter,getTitle": "return this.player.getMediaInformation().metadata.title",
  "adapter,getIsLive": "return this.getDuration()===-1",
  "adapter,getResource": "var ret;if(this.player.getMediaInformation()){ret=this.player.getMediaInformation().contentUrl||this.player.getMediaInformation().contentId;};return ret",
  "adapter,getPlayerVersion": "return cast&&cast.framework?cast.framework.VERSION:null",
  "adapter,getPlayerName": "return'Chromecast'",
  "adapter,registerListeners": "this.castMediaElement=undefined;for(var object in this.player){if(typeof this.player[object]==='object'){for(var object2 in this.player[object]){if(this.player[object][object2]&&this.player[object][object2].id==='castMediaElement'){this.castMediaElement=this.player[object][object2]}}}};var Events=cast.framework.events;var eCode=cast.framework.events.DetailedErrorCode;this.errorFilter=[eCode.MEDIAKEYS_UNKNOWN,eCode.MEDIAKEYS_UNSUPPORTED,eCode.MEDIAKEYS_WEBCRYPTO,eCode.SEGMENT_NETWORK,eCode.HLS_NETWORK_INVALID_SEGMENT,eCode.DASH_MANIFEST_NO_MIMETYPE,eCode.DASH_INVALID_SEGMENT_INFO,eCode.TEXT_UNKNOWN,eCode.SEGMENT_UNKNOWN,eCode.BREAK_SEEK_INTERCEPTOR_ERROR,eCode.APP,eCode.IMAGE_ERROR,eCode.LOAD_INTERRUPTED,eCode.MEDIA_ERROR_MESSAGE];this.getNpawUtils().logAllEvents(this.player,[null,Events.EventType.PLAY,Events.EventType.PAUSE,Events.EventType.PLAYING,Events.EventType.STALLED,Events.EventType.SEEKING,Events.EventType.SEEKED,Events.EventType.ERROR,Events.EventType.CLIP_ENDED,Events.EventType.BITRATE_CHANGED,Events.EventType.SEGMENT_DOWNLOADED,Events.EventType.BUFFERING,Events.EventType.EMSG,Events.EventType.ID3,Events.EventType.MEDIA_FINISHED,Events.EventType.MEDIA_STATUS,Events.EventType.CACHE_HIT,Events.EventType.BREAK_CLIP_STARTED,Events.EventType.BREAK_ENDED,Events.EventType.BREAK_CLIP_LOADING,Events.EventType.BREAK_CLIP_STARTED,Events.EventType.BREAK_CLIP_ENDED,Events.EventType.BREAK_STARTED]);this.monitorPlayhead(true,true);this.references={};this.references[Events.EventType.PLAY]=this.playListener.bind(this);this.references[Events.EventType.STALLED]=this.playListener.bind(this);this.references[Events.EventType.BUFFERING]=this.bufferingListener.bind(this);this.references[Events.EventType.PAUSE]=this.pauseListener.bind(this);this.references[Events.EventType.BREAK_CLIP_STARTED]=this.pauseListener.bind(this);this.references[Events.EventType.BREAK_ENDED]=this.resumeListener.bind(this);this.references[Events.EventType.PLAYING]=this.playingListener.bind(this);this.references[Events.EventType.SEEKING]=this.seekingListener.bind(this);this.references[Events.EventType.MEDIA_FINISHED]=this.endedListener.bind(this);this.references[Events.EventType.ERROR]=this.errorListener.bind(this);this.references[Events.EventType.BITRATE_CHANGED]=this.bitrateChangedListener.bind(this);this.references[Events.EventType.SEGMENT_DOWNLOADED]=this.segmentListener.bind(this);this.references[Events.EventType.BREAK_STARTED]=this.playAdListener.bind(this);this.references[Events.EventType.TIME_UPDATE]=this.timeUpdateListener.bind(this);this.hostReferences={onAutoPause:this.autoPauseListener.bind(this)};for(var key in this.references){this.player.addEventListener(key,this.references[key])};if(cast&&cast.player&&cast.player.api&&cast.player.api.Player&&cast.player.api.Player.getHost&&cast.player.api.Player.getHost()){for(var key2 in this.hostReferences){cast.player.api.Player.getHost().addEventListener(key2,this.hostReferences[key2])}};if(!this.getVideo().getAdsAdapter()){this.getAdapterClass('nativeAdsAdapter')._updatePlayer(this.player);this.plugin.setAdsAdapter(this.getAdapterClass('nativeAdsAdapter'),this.getVideo().getVideoKey())};",
  "adapter,unregisterListeners": "if(this.monitor)this.monitor.stop();if(this.player&&this.references){for(var key in this.references){this.player.removeEventListener(key,this.references[key])};this.references={};if(cast&&cast.player&&cast.player.api&&cast.player.api.Player&&cast.player.api.Player.getHost&&cast.player.api.Player.getHost()&&this.hostReferences){for(var key2 in this.hostReferences){this.player.getHost().removeEventListener(key2,this.hostReferences[key2])};this.hostReferences={}}}",
  "adapter,playListener,e": "if(!this.flags.isStarted){this.lastPlayhead=null;this.fireStart({},'playListener')}",
  "adapter,playAdListener,e": "this.playListener();this.firePause({},'playAdListener');",
  "adapter,bufferingListener,e": "if(this.flags.isPaused){if(!this.plugin||!this.getVideo().isBreakStarted){this.fireResume({},'bufferingListener');this.fireBufferBegin({},false,'bufferingListener')}}else{this.fireBufferBegin({},false,'bufferingListener')};if(!this.flags.isStarted){this.lastPlayhead=null;this.fireStart({},'bufferingListener')}",
  "adapter,pauseListener,e": "if(!this.flags.isBuffering){this.firePause({},'pauseListener')}",
  "adapter,resumeListener,e": "this.fireResume({},'resumeListener')",
  "adapter,playingListener,e": "if(!this.plugin||!this.getVideo().isBreakStarted){this.fireResume({},'playingListener');this.fireBufferEnd({},'playingListener');this.fireJoin({},'playingListener')}",
  "adapter,errorListener,e": "var error=e.error;var code=e.detailedErrorCode;if(code){if(this.errorFilter.indexOf(code)>=0){return};var eCode=cast.framework.events.DetailedErrorCode;var message=Object.keys(eCode).find(function(key){return eCode[key]===code})||code;if(error&&error.shakaErrorCode){message='Shaka: '+error.shakaErrorCode+' , '+message};if(error==='LOAD_CANCELLED'){this.fireFatalError(code,message);this._reset()}else{this.fireError(code,message)}}",
  "adapter,seekingListener,e": "this.fireSeekBegin({},false,'seekingListener')",
  "adapter,endedListener,e": "this.fireStop({},'endedListener');this._reset()",
  "adapter,bitrateChangedListener,e": "this.bitrate=e.totalBitrate",
  "adapter,segmentListener,e": "this.throughput=e.size/(e.downloadTime/1000)",
  "adapter,timeUpdateListener,e": "if(!this.flags.isJoined){if(this.lastPlayhead===null||this.lastPlayhead===undefined){this.lastPlayhead=this.getPlayhead()}else if(this.lastPlayhead<this.getPlayhead()&&this.plugin&&(!this.plugin.getAdsAdapter()||(this.plugin.getAdsAdapter()&&!this.plugin.getAdsAdapter().flags.isStarted))){this.fireJoin({},'timeUpdateListener')}}",
  "adapter,autoPauseListener,e": "if(e){this.fireResume({},'autoPauseListener');this.fireBufferBegin({},false,'autoPauseListener')}else{this.fireBufferEnd({},'autoPauseListener')}",
  "adapter,_reset,e": "this.lastPlayhead=null;this.actualCount=0;this.bitrate=null"
}
