(function(){ var hola_ldr_require;(function(){if(!navigator||!navigator.userAgent||/ MSIE [1-8]\./.test(navigator.userAgent)){return}var E={};hola_ldr_require=E;E.zdot=function(name){ return { json: "{\"gen\":{\"order\":4,\"agent\":{\"manifest2cache\":{\"__Function__\":\"function (url){ return url; }\"},\"origins\":[\"brightcove.vo.llnwd.net\",\"c.brightcove.com\",\"brightcove01.brightcove.com\"]},\"cdn\":{\"bwsaver\":{},\"send_reqs\":{\"only_if_can_get\":true,\"hola\":{},\"origin\":{}}},\"kw\":{\"ads_only\":false,\"disabled\":0,\"mirror_origins\":false,\"customer_active\":1,\"hotline\":1,\"enabled\":1,\"stats\":1,\"monitor_basic\":1},\"loader\":{\"match\":{\"js\":\"return false;\",\"country\":{}},\"rules\":[{\"cdn\":0,\"bwsaver\":0,\"stats\":1}]},\"monitor\":{},\"origin_control\":[{\"group\":\"brightcove.vo.llnwd.net\",\"sources\":[\"brightcove.vo.llnwd.net\"],\"rules\":[{\"policy\":\"dont_change\",\"select\":\"all\",\"set\":[{\"source\":\"brightcove.vo.llnwd.net\",\"apply\":\"dont_change\"}]}]},{\"group\":\"c.brightcove.com\",\"sources\":[\"c.brightcove.com\"],\"rules\":[{\"policy\":\"dont_change\",\"select\":\"all\",\"set\":[{\"source\":\"c.brightcove.com\",\"apply\":\"dont_change\"}]}]},{\"group\":\"brightcove01.brightcove.com\",\"sources\":[\"brightcove01.brightcove.com\"],\"rules\":[{\"policy\":\"dont_change\",\"select\":\"all\",\"set\":[{\"source\":\"brightcove01.brightcove.com\",\"apply\":\"dont_change\"}]}]}],\"portal\":{\"conf\":{},\"zones\":{},\"match\":{}},\"test_urls\":[],\"util\":{\"log\":{\"log_level\":\"notice\"}},\"player\":{\"allow_stats_late_attach\":true}},\"zones\":{\"independent\":{\"order\":3,\"agent\":{\"origins\":[\"uds.ak.o.brightcove.com\",\"secure.brightcove.com\",\"brightcove01.brightcove.com\",\"c.brightcove.com\",\"brightcove.vo.llnwd.net\"],\"manifest2cache\":{\"__Function__\":\"function (url){ return url; }\"}},\"cdn\":{\"bwsaver\":{\"lowcost_watermark_sec\":10,\"urgent_watermark_sec\":5},\"send_reqs\":{\"hola\":{},\"origin\":{},\"only_if_can_get\":true}},\"kw\":{\"ads_only\":false,\"disabled\":0,\"mirror_origins\":false,\"customer_active\":1,\"hotline\":1,\"enabled\":1,\"stats\":1,\"bwsaver\":1,\"active\":1,\"monitor_basic\":1,\"monitor_full\":1},\"loader\":{\"match\":{\"allow_frame_match\":true,\"js\":\"var match = {\\\"url\\\":\\\"^https?:\\\\\\\\/\\\\\\\\/(([^./]+\\\\\\\\.)+)?independent\\\\\\\\.co\\\\\\\\.uk\\\\\\\\/.*\\\"};\\nfunction url_or_frame(opt, match){\\n var re = new RegExp(match.url);\\n return re.test(opt.url) || re.test(opt.frame_url);\\n}\\nreturn url_or_frame(opt, match);\",\"country\":{},\"url\":[\"^https?:\\\\/\\\\/(([^./]+\\\\.)+)?independent\\\\.co\\\\.uk\\\\/.*\"]},\"rules\":[{\"browser\":\"chrome\",\"os\":\"windows\",\"cdn\":0.5,\"bwsaver\":0,\"stats\":0.5},{\"browser\":\"chromium_based\",\"os\":\"windows\",\"cdn\":0.5,\"bwsaver\":0,\"stats\":0.5},{\"browser\":\"firefox\",\"os\":\"windows\",\"cdn\":0.5,\"bwsaver\":0,\"stats\":0.5},{\"browser\":\"ie\",\"os\":\"windows\",\"cdn\":0.5,\"bwsaver\":0,\"stats\":0.5},{\"browser\":\"opera\",\"os\":\"windows\",\"cdn\":0.5,\"bwsaver\":0,\"stats\":0.5},{\"browser\":\"chrome\",\"os\":\"macos\",\"cdn\":0.5,\"bwsaver\":0,\"stats\":0.5},{\"browser\":\"chromium_based\",\"os\":\"macos\",\"cdn\":0.5,\"bwsaver\":0,\"stats\":0.5},{\"browser\":\"firefox\",\"os\":\"macos\",\"cdn\":0.5,\"bwsaver\":0,\"stats\":0.5},{\"browser\":\"opera\",\"os\":\"macos\",\"cdn\":0.5,\"bwsaver\":0,\"stats\":0.5},{\"browser\":\"safari\",\"os\":\"macos\",\"cdn\":0.5,\"bwsaver\":0,\"stats\":0.5},{\"browser\":\"chrome\",\"os\":\"linux\",\"cdn\":0.5,\"bwsaver\":0,\"stats\":0.5},{\"browser\":\"chromium_based\",\"os\":\"linux\",\"cdn\":0.5,\"bwsaver\":0,\"stats\":0.5},{\"browser\":\"firefox\",\"os\":\"linux\",\"cdn\":0.5,\"bwsaver\":0,\"stats\":0.5},{\"cdn\":0,\"bwsaver\":0,\"stats\":1}]},\"monitor\":{},\"origin_control\":[{\"group\":\"uds.ak.o.brightcove.com\",\"sources\":[\"uds.ak.o.brightcove.com\"],\"rules\":[{\"policy\":\"dont_change\",\"select\":\"all\",\"set\":[{\"source\":\"uds.ak.o.brightcove.com\",\"apply\":\"dont_change\"}]}]},{\"group\":\"secure.brightcove.com\",\"sources\":[\"secure.brightcove.com\"],\"rules\":[{\"policy\":\"dont_change\",\"select\":\"all\",\"set\":[{\"source\":\"secure.brightcove.com\",\"apply\":\"dont_change\"}]}]},{\"group\":\"brightcove01.brightcove.com\",\"sources\":[\"brightcove01.brightcove.com\"],\"rules\":[{\"policy\":\"dont_change\",\"select\":\"all\",\"set\":[{\"source\":\"brightcove01.brightcove.com\",\"apply\":\"dont_change\"}]}]},{\"group\":\"c.brightcove.com\",\"sources\":[\"c.brightcove.com\"],\"rules\":[{\"policy\":\"dont_change\",\"select\":\"all\",\"set\":[{\"source\":\"c.brightcove.com\",\"apply\":\"dont_change\"}]}]},{\"group\":\"brightcove.vo.llnwd.net\",\"sources\":[\"brightcove.vo.llnwd.net\"],\"rules\":[{\"policy\":\"dont_change\",\"select\":\"all\",\"set\":[{\"source\":\"brightcove.vo.llnwd.net\",\"apply\":\"dont_change\"}]}]}],\"player\":{\"brightcove\":{\"account_id\":\"624246174001\",\"policy_key\":\"BCpkADawqM1LWNlVUIra9f4CdCGasxbw_7b7g1OK4bdolCcrbECKEbHyfx2jz6GXPFswTdB76hQ64VA6Fp6HPqKyHwimImO1CxVFXFY13pZ387RC0NZMGBNooo0\"},\"allow_stats_late_attach\":true},\"portal\":{\"conf\":{},\"zones\":{},\"match\":{\"url_g\":[\"**.independent.co.uk/**\"]}},\"test_urls\":[],\"util\":{\"log\":{\"log_level\":\"notice\"}}},\"independent_ads\":{\"order\":1,\"agent\":{\"origins\":[\"s3.eu-central-1.amazonaws.com\",\"dyjnzf8evxrp2.cloudfront.net\",\"s-static.innovid.com\",\"playtime.tubemogul.com\",\"cdn-01.yumenetworks.com\",\"gcdn.2mdn.net\",\"player.mediabong.com\",\"hes.themrbinman.com\"],\"manifest2cache\":{\"__Function__\":\"function (url){ return url; }\"}},\"cdn\":{\"bwsaver\":{\"lowcost_watermark_sec\":10,\"urgent_watermark_sec\":5},\"send_reqs\":{\"hola\":{},\"origin\":{},\"only_if_can_get\":true}},\"kw\":{\"ads_only\":true,\"disabled\":0,\"mirror_origins\":false,\"customer_active\":1,\"hotline\":1,\"enabled\":1,\"stats\":1},\"loader\":{\"match\":{\"js\":\"var match = {\\\"url\\\":\\\"^https?:\\\\\\\\/\\\\\\\\/(([^./]+\\\\\\\\.)+)?independent\\\\\\\\.co\\\\\\\\.uk\\\\\\\\/.*\\\",\\\"video_url\\\":\\\"(^https?:\\\\\\\\/\\\\\\\\/(([^./]+\\\\\\\\.)+)?hes\\\\\\\\.themrbinman\\\\\\\\.com\\\\\\\\/.*\\\\\\\\.(mp4|webm))|(^https?:\\\\\\\\/\\\\\\\\/(([^./]+\\\\\\\\.)+)?player\\\\\\\\.mediabong\\\\\\\\.com\\\\\\\\/.*\\\\\\\\.(mp4|webm))|(^https?:\\\\\\\\/\\\\\\\\/(([^./]+\\\\\\\\.)+)?cdn-01\\\\\\\\.yumenetworks\\\\\\\\.com\\\\\\\\/.*\\\\\\\\.(mp4|webm))|(^https?:\\\\\\\\/\\\\\\\\/(([^./]+\\\\\\\\.)+)?dyjnzf8evxrp2\\\\\\\\.cloudfront\\\\\\\\.net\\\\\\\\/.*\\\\\\\\.(mp4|webm))|(^https?:\\\\\\\\/\\\\\\\\/(([^./]+\\\\\\\\.)+)?playtime\\\\\\\\.tubemogul\\\\\\\\.com\\\\\\\\/.*\\\\\\\\.(mp4|webm))|(^https?:\\\\\\\\/\\\\\\\\/(([^./]+\\\\\\\\.)+)?s-static\\\\\\\\.innovid\\\\\\\\.com\\\\\\\\/.*\\\\\\\\.(mp4|webm))|(^https?:\\\\\\\\/\\\\\\\\/(([^./]+\\\\\\\\.)+)?gcdn\\\\\\\\.2mdn\\\\\\\\.net\\\\\\\\/.*\\\\\\\\.(mp4|webm))|(^https?:\\\\\\\\/\\\\\\\\/(([^./]+\\\\\\\\.)+)?s3\\\\\\\\.eu-central-1\\\\\\\\.amazonaws\\\\\\\\.com\\\\\\\\/.*\\\\\\\\.(mp4|webm))\\\"};\\nfunction url(opt, match){\\n return new RegExp(match.url).test(opt.url);\\n}\\nfunction video_url(opt, match){\\n return new RegExp(match.video_url).test(opt.video_url);\\n}\\nreturn url(opt, match) && video_url(opt, match);\",\"country\":{},\"url\":[\"^https?:\\\\/\\\\/(([^./]+\\\\.)+)?independent\\\\.co\\\\.uk\\\\/.*\"],\"video_url\":[\"^https?:\\\\/\\\\/(([^./]+\\\\.)+)?hes\\\\.themrbinman\\\\.com\\\\/.*\\\\.(mp4|webm)\",\"^https?:\\\\/\\\\/(([^./]+\\\\.)+)?player\\\\.mediabong\\\\.com\\\\/.*\\\\.(mp4|webm)\",\"^https?:\\\\/\\\\/(([^./]+\\\\.)+)?cdn-01\\\\.yumenetworks\\\\.com\\\\/.*\\\\.(mp4|webm)\",\"^https?:\\\\/\\\\/(([^./]+\\\\.)+)?dyjnzf8evxrp2\\\\.cloudfront\\\\.net\\\\/.*\\\\.(mp4|webm)\",\"^https?:\\\\/\\\\/(([^./]+\\\\.)+)?playtime\\\\.tubemogul\\\\.com\\\\/.*\\\\.(mp4|webm)\",\"^https?:\\\\/\\\\/(([^./]+\\\\.)+)?s-static\\\\.innovid\\\\.com\\\\/.*\\\\.(mp4|webm)\",\"^https?:\\\\/\\\\/(([^./]+\\\\.)+)?gcdn\\\\.2mdn\\\\.net\\\\/.*\\\\.(mp4|webm)\",\"^https?:\\\\/\\\\/(([^./]+\\\\.)+)?s3\\\\.eu-central-1\\\\.amazonaws\\\\.com\\\\/.*\\\\.(mp4|webm)\"]},\"rules\":[{\"os\":\"windows\",\"cdn\":0,\"bwsaver\":0,\"stats\":1},{\"browser\":\"chrome\",\"os\":\"android\",\"cdn\":0,\"bwsaver\":0,\"stats\":1},{\"os\":\"macos\",\"cdn\":0,\"bwsaver\":0,\"stats\":1},{\"os\":\"linux\",\"cdn\":0,\"bwsaver\":0,\"stats\":1}]},\"monitor\":{},\"origin_control\":[{\"group\":\"s3.eu-central-1.amazonaws.com\",\"sources\":[\"s3.eu-central-1.amazonaws.com\"],\"rules\":[{\"policy\":\"dont_change\",\"select\":\"all\",\"set\":[{\"source\":\"s3.eu-central-1.amazonaws.com\",\"apply\":\"dont_change\"}]}]},{\"group\":\"dyjnzf8evxrp2.cloudfront.net\",\"sources\":[\"dyjnzf8evxrp2.cloudfront.net\"],\"rules\":[{\"policy\":\"dont_change\",\"select\":\"all\",\"set\":[{\"source\":\"dyjnzf8evxrp2.cloudfront.net\",\"apply\":\"dont_change\"}]}]},{\"group\":\"s-static.innovid.com\",\"sources\":[\"s-static.innovid.com\"],\"rules\":[{\"policy\":\"dont_change\",\"select\":\"all\",\"set\":[{\"source\":\"s-static.innovid.com\",\"apply\":\"dont_change\"}]}]},{\"group\":\"playtime.tubemogul.com\",\"sources\":[\"playtime.tubemogul.com\"],\"rules\":[{\"policy\":\"dont_change\",\"select\":\"all\",\"set\":[{\"source\":\"playtime.tubemogul.com\",\"apply\":\"dont_change\"}]}]},{\"group\":\"cdn-01.yumenetworks.com\",\"sources\":[\"cdn-01.yumenetworks.com\"],\"rules\":[{\"policy\":\"dont_change\",\"select\":\"all\",\"set\":[{\"source\":\"cdn-01.yumenetworks.com\",\"apply\":\"dont_change\"}]}]},{\"group\":\"gcdn.2mdn.net\",\"sources\":[\"gcdn.2mdn.net\"],\"rules\":[{\"policy\":\"dont_change\",\"select\":\"all\",\"set\":[{\"source\":\"gcdn.2mdn.net\",\"apply\":\"dont_change\"}]}]},{\"group\":\"player.mediabong.com\",\"sources\":[\"player.mediabong.com\"],\"rules\":[{\"policy\":\"dont_change\",\"select\":\"all\",\"set\":[{\"source\":\"player.mediabong.com\",\"apply\":\"dont_change\"}]}]},{\"group\":\"hes.themrbinman.com\",\"sources\":[\"hes.themrbinman.com\"],\"rules\":[{\"policy\":\"dont_change\",\"select\":\"all\",\"set\":[{\"source\":\"hes.themrbinman.com\",\"apply\":\"dont_change\"}]}]}],\"player\":{\"brightcove\":{\"account_id\":\"624246174001\",\"policy_key\":\"BCpkADawqM1LWNlVUIra9f4CdCGasxbw_7b7g1OK4bdolCcrbECKEbHyfx2jz6GXPFswTdB76hQ64VA6Fp6HPqKyHwimImO1CxVFXFY13pZ387RC0NZMGBNooo0\"},\"allow_stats_late_attach\":true},\"portal\":{\"conf\":{},\"zones\":{},\"match\":{\"url_g\":[\"**.independent.co.uk/**\"],\"video_url_g\":[\"**.hes.themrbinman.com/**.(mp4|webm)\",\"**.player.mediabong.com/**.(mp4|webm)\",\"**.cdn-01.yumenetworks.com/**.(mp4|webm)\",\"**.dyjnzf8evxrp2.cloudfront.net/**.(mp4|webm)\",\"**.playtime.tubemogul.com/**.(mp4|webm)\",\"**.s-static.innovid.com/**.(mp4|webm)\",\"**.gcdn.2mdn.net/**.(mp4|webm)\",\"**.s3.eu-central-1.amazonaws.com/**.(mp4|webm)\"]}},\"test_urls\":[],\"util\":{\"log\":{\"log_level\":\"notice\"}}},\"hap\":{\"order\":2,\"agent\":{\"origins\":[\"uds.ak.o.brightcove.com\",\"secure.brightcove.com\",\"brightcove01.brightcove.com\",\"c.brightcove.com\",\"brightcove.vo.llnwd.net\"],\"manifest2cache\":{\"__Function__\":\"function (url){ return url; }\"}},\"cdn\":{\"bwsaver\":{\"lowcost_watermark_sec\":10,\"urgent_watermark_sec\":5},\"method\":{\"hola_adaptive\":true,\"hola_adaptive_stats_no_skip\":true},\"send_reqs\":{\"hola\":{},\"origin\":{},\"only_if_can_get\":true}},\"kw\":{\"ads_only\":false,\"disabled\":0,\"mirror_origins\":false,\"customer_active\":1,\"hotline\":1,\"enabled\":1,\"stats\":1,\"bwsaver\":1,\"active\":1,\"monitor_basic\":1,\"monitor_full\":1},\"loader\":{\"match\":{\"allow_frame_match\":true,\"js\":\"return false;\",\"rand\":0,\"browser\":[\"chrome\"],\"country\":{},\"url\":[\"^https?:\\\\/\\\\/(([^./]+\\\\.)+)?independent\\\\.co\\\\.uk\\\\/.*\"]},\"rules\":[{\"browser\":\"chrome\",\"os\":\"windows\",\"cdn\":0.5,\"bwsaver\":0,\"stats\":0.5}]},\"monitor\":{},\"origin_control\":[{\"group\":\"uds.ak.o.brightcove.com\",\"sources\":[\"uds.ak.o.brightcove.com\"],\"rules\":[{\"policy\":\"dont_change\",\"select\":\"all\",\"set\":[{\"source\":\"uds.ak.o.brightcove.com\",\"apply\":\"dont_change\"}]}]},{\"group\":\"secure.brightcove.com\",\"sources\":[\"secure.brightcove.com\"],\"rules\":[{\"policy\":\"dont_change\",\"select\":\"all\",\"set\":[{\"source\":\"secure.brightcove.com\",\"apply\":\"dont_change\"}]}]},{\"group\":\"brightcove01.brightcove.com\",\"sources\":[\"brightcove01.brightcove.com\"],\"rules\":[{\"policy\":\"dont_change\",\"select\":\"all\",\"set\":[{\"source\":\"brightcove01.brightcove.com\",\"apply\":\"dont_change\"}]}]},{\"group\":\"c.brightcove.com\",\"sources\":[\"c.brightcove.com\"],\"rules\":[{\"policy\":\"dont_change\",\"select\":\"all\",\"set\":[{\"source\":\"c.brightcove.com\",\"apply\":\"dont_change\"}]}]},{\"group\":\"brightcove.vo.llnwd.net\",\"sources\":[\"brightcove.vo.llnwd.net\"],\"rules\":[{\"policy\":\"dont_change\",\"select\":\"all\",\"set\":[{\"source\":\"brightcove.vo.llnwd.net\",\"apply\":\"dont_change\"}]}]}],\"player\":{\"brightcove\":{\"account_id\":\"624246174001\",\"policy_key\":\"BCpkADawqM1LWNlVUIra9f4CdCGasxbw_7b7g1OK4bdolCcrbECKEbHyfx2jz6GXPFswTdB76hQ64VA6Fp6HPqKyHwimImO1CxVFXFY13pZ387RC0NZMGBNooo0\"},\"vjs\":{\"register_hls_provider\":true,\"reload_max_pos\":0},\"allow_stats_late_attach\":true},\"portal\":{\"conf\":{},\"match\":{\"url_g\":[\"**.independent.co.uk/**\"]},\"zones\":{}},\"test_urls\":[],\"util\":{\"log\":{\"dailymotion\":true,\"log_level\":\"notice\",\"report\":{\"end\":{\"add_log\":1,\"unittest\":1},\"seek\":{\"add_log\":0,\"unittest\":0},\"start\":{\"add_log\":0,\"unittest\":0},\"wait\":{\"add_log\":0,\"unittest\":0}}}}}},\"disabled\":false,\"loader\":{\"manual_init\":false,\"stub_modules\":[\"android\",\"ios\",\"dash\",\"flowplayer\",\"flv\",\"jwplayer\",\"mp4box\",\"shaka\",\"youtube\",\"webm\"],\"real_random\":false},\"test\":{\"tag\":{\"id\":106,\"date\":{\"__ISODate__\":\"2017-01-16T10:10:12.002Z\"}}},\"recalc_bw_date\":{\"__ISODate__\":\"2016-08-01T09:05:51.000Z\"},\"calc_usage\":{\"bw\":0,\"date\":{\"__ISODate__\":\"2016-08-31T07:03:47.000Z\"},\"day\":{\"__ISODate__\":\"2016-08-30T00:00:00.000Z\"},\"dur\":0.245,\"metrics\":30},\"privacy\":false,\"zone_init_count\":{\"first\":156},\"send_impl_reminder\":true,\"send_conf_change\":true,\"customer\":\"independent_co_uk\"}", customer: "independent_co_uk", agents: [{"hostname":"zagent37.h-cdn.com","host":"198.255.10.234","country":"US","name":"zagent37","pool":"single"},{"hostname":"zagent1498.h-cdn.com","host":"95.211.213.98","country":"NL","name":"zagent1498","pool":"single"},{"hostname":"zagent157.h-cdn.com","host":"108.59.10.156","country":"US","name":"zagent157","pool":"single"},{"hostname":"zagent155.h-cdn.com","host":"137.74.92.67","country":"FR","name":"zagent155","pool":"single"},{"hostname":"zagent375.h-cdn.com","host":"88.212.243.44","country":"RU","name":"zagent375","pool":"single"}], version: "1.29.234", qs_ver: 'ver=1.29.234', disabled: !!+false, ccgi_url: 'client.h-cdn.com', videojs: '/svc/cdn/pub/video-js.swf?md5=18467-517c596c', videojs_osmf: '/svc/cdn/pub/videojs-osmf.swf?md5=186245-ec749577', videojs_flashls: '/svc/cdn/pub/videojs-flashls.swf?md5=74609-97e11010', videojs5_osmf: '/svc/cdn/pub/videojs5-osmf.swf?md5=189643-2d3bd98a', videojs5: '/svc/cdn/pub/videojs-5/video-js.swf?md5=92486-46aeeea9', videojs5_10: '/svc/cdn/pub/videojs_swf_sv.swf?md5=92547-f789b0cf', videojs5_10_css: '/svc/cdn/pub/css/vjs5_10.css?md5=47687-bb1aae6d', hola_skin: '/svc/cdn/pub/css/videojs-hola-skin.css?md5=24828-5d4979f2', thumbnails: '/svc/cdn/pub/css/videojs.thumbnails.css?md5=874-39aa2ea2', tpl: "/svc/cdn/pub/loader.js?minify=true", stats_css: '/css/stats.css?md5=22241-3ab55cfb', cdngraph_js: '/svc/cdn/pub/cdngraph.js?md5=66187-67b93073', debug_js: '/svc/cdn/pub/debug.js?md5=60123-aaba07c9', hls_js: '/svc/cdn/pub/hls.js?md5=475044-346e1c88', flow_hls_engine: '/svc/cdn/pub/flowplayer_hls_engine.js?md5=32573-cadc6d2b', flow_dash_engine: '/svc/cdn/pub/flowplayer_dash_engine.js?md5=20155-6413735a', vjs_hls_provider: '/svc/cdn/pub/vjs_hls_provider.js?md5=8067-61780409', vstat: '/svc/cdn/pub/vstat.js?md5=29637-b5628e0d', }[name]; return{}[name]};var console=window.console;function ie9_console(){if(console)return;console={log:function(){},error:function(){}}}ie9_console();function escape_qs(param,opt){opt=opt||{};var qs=opt.qs||"";var sep=qs||opt.amp?"&":"";if(!param)return qs;var uri_comp=encodeURIComponent;var uri_comp_val=uri_comp;for(var i in param){var val=param[i];if(val===undefined)continue;var key=uri_comp(i);qs+=sep;if(val===null)qs+=key;else if(Array.isArray(val)){if(!val.length)continue;qs+=val.map(function(val){return key+"="+uri_comp_val(val)}).join("&")}else qs+=key+"="+uri_comp_val(val);sep="&"}return qs}function send_beacon(url,data){if(navigator&&navigator.sendBeacon){if(navigator.sendBeacon(url,to_form_data(data)))return}var is_xdr=window.XDomainRequest!==undefined;var xhr=is_xdr?new XDomainRequest:new XMLHttpRequest;xhr.open("POST",url);if(window.FormData&&!is_xdr)data=to_form_data(data);else{data=escape_qs(data);if(!is_xdr){xhr.setRequestHeader("Accept","*/*");xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8")}}xhr.send(data)}function to_form_data(o){var data=new FormData;for(var k in o)data.append(k,o[k]);return data}function perr_raw(opt){var data={},qs={},zone,ver,hola_mode;if(window.hola_cdn){zone=window.hola_cdn.zone;ver=window.hola_cdn.ver;hola_mode=window.hola_cdn.mode}qs.browser=window.chrome?"chrome":"other";qs.id=opt.id;qs.ver=ver;data.build="platform: "+navigator.platform+"\n"+"user_agent: "+navigator.userAgent;data.is_json=1;data.info=opt.info||{};data.info.customer=customer;data.info.zone=zone;data.info.hola_mode=hola_mode;data.info.location_url=location.href;data.info.referrer=document.referrer;data.info=JSON.stringify(data.info);data.bt=opt.bt;var protocol=window&&window.location&&window.location.protocol;protocol=!protocol||!protocol.startsWith("http")?"http:":protocol;var url=protocol+"//perr.h-cdn.com/be_client_cgi/perr?"+escape_qs(qs);send_beacon(url,data)}function array_reduce(callback){if(this===null){throw new TypeError("Array.prototype.reduce called on null or"+" undefined")}if(typeof callback!=="function")throw new TypeError(callback+" is not a function");var t=Object(this),len=t.length>>>0,k=0,value;if(arguments.length==2)value=arguments[1];else{while(k=len)throw new TypeError("Reduce of empty array with no initial value");value=t[k++]}for(;k>0}function ToUint32(v){return v>>>0}var LN2=Math.LN2,abs=Math.abs,floor=Math.floor,log=Math.log,max=Math.max,min=Math.min,pow=Math.pow,round=Math.round;(function(){var orig=Object.defineProperty;var dom_only=!function(){try{return Object.defineProperty({},"x",{})}catch(_){return false}}();if(!orig||dom_only){Object.defineProperty=function(o,prop,desc){if(orig)try{return orig(o,prop,desc)}catch(_){}if(o!==Object(o))throw TypeError("Object.defineProperty called on non-object");if(Object.prototype.__defineGetter__&&"get"in desc)Object.prototype.__defineGetter__.call(o,prop,desc.get);if(Object.prototype.__defineSetter__&&"set"in desc)Object.prototype.__defineSetter__.call(o,prop,desc.set);if("value"in desc)o[prop]=desc.value;return o}}})();function makeArrayAccessors(obj){if(obj.length>MAX_ARRAY_LENGTH)throw RangeError("Array too large for polyfill");function makeArrayAccessor(index){Object.defineProperty(obj,index,{get:function(){return obj._getter(index)},set:function(v){obj._setter(index,v)},enumerable:true,configurable:false})}var i;for(i=0;i>s}function as_unsigned(value,bits){var s=32-bits;return value<>>s}function packI8(n){return[n&255]}function unpackI8(bytes){return as_signed(bytes[0],8)}function packU8(n){return[n&255]}function unpackU8(bytes){return as_unsigned(bytes[0],8)}function packU8Clamped(n){n=round(Number(n));return[n<0?0:n>255?255:n&255]}function packI16(n){return[n&255,n>>8&255]}function unpackI16(bytes){return as_signed(bytes[1]<<8|bytes[0],16)}function packU16(n){return[n&255,n>>8&255]}function unpackU16(bytes){return as_unsigned(bytes[1]<<8|bytes[0],16)}function packI32(n){return[n&255,n>>8&255,n>>16&255,n>>24&255]}function unpackI32(bytes){return as_signed(bytes[3]<<24|bytes[2]<<16|bytes[1]<<8|bytes[0],32)}function packU32(n){return[n&255,n>>8&255,n>>16&255,n>>24&255]}function unpackU32(bytes){return as_unsigned(bytes[3]<<24|bytes[2]<<16|bytes[1]<<8|bytes[0],32)}function packIEEE754(v,ebits,fbits){var bias=(1<.5)return w+1;return w%2?w+1:w}var s,e,f;if(v!==v){e=(1<=pow(2,1-bias)){e=min(floor(log(v)/LN2),1023);var significand=v/pow(2,e);if(significand<1){e-=1;significand*=2}if(significand>=2){e+=1;significand/=2}var d=pow(2,fbits);f=roundToEven(significand*d)-d;e+=bias;if(f/d>=1){e+=1;f=0}if(e>2*bias){e=(1<>1}}bits.reverse();str=bits.join("");bias=(1<0){return s*pow(2,e-bias)*(1+f/pow(2,fbits))}else if(f!==0){return s*pow(2,-(bias-1))*(f/pow(2,fbits))}else{return s<0?-0:0}}function unpackF64(b){return unpackIEEE754(b,11,52)}function packF64(v){return packIEEE754(v,11,52)}function unpackF32(b){return unpackIEEE754(b,8,23)}function packF32(v){return packIEEE754(v,8,23)}(function(){function ArrayBuffer(length){length=ToInt32(length);if(length<0)throw RangeError("ArrayBuffer size is not a small enough positive integer.");Object.defineProperty(this,"byteLength",{value:length});Object.defineProperty(this,"_bytes",{value:Array(length)});for(var i=0;i=1&&Type(arguments[0])==="object"&&arguments[0]instanceof $TypedArray$){return function(typedArray){if(this.constructor!==typedArray.constructor)throw TypeError();var byteLength=typedArray.length*this.BYTES_PER_ELEMENT;Object.defineProperty(this,"buffer",{value:new ArrayBuffer(byteLength)});Object.defineProperty(this,"byteLength",{value:byteLength});Object.defineProperty(this,"byteOffset",{value:0});Object.defineProperty(this,"length",{value:typedArray.length});for(var i=0;i=1&&Type(arguments[0])==="object"&&!(arguments[0]instanceof $TypedArray$)&&!(arguments[0]instanceof ArrayBuffer||Class(arguments[0])==="ArrayBuffer")){return function(array){var byteLength=array.length*this.BYTES_PER_ELEMENT;Object.defineProperty(this,"buffer",{value:new ArrayBuffer(byteLength)});Object.defineProperty(this,"byteLength",{value:byteLength});Object.defineProperty(this,"byteOffset",{value:0});Object.defineProperty(this,"length",{value:array.length});for(var i=0;i=1&&Type(arguments[0])==="object"&&(arguments[0]instanceof ArrayBuffer||Class(arguments[0])==="ArrayBuffer")){return function(buffer,byteOffset,length){var byteLength;byteOffset=ToUint32(byteOffset);if(byteOffset>buffer.byteLength)throw RangeError("byteOffset out of range");if(byteOffset%this.BYTES_PER_ELEMENT)throw RangeError("buffer length minus the byteOffset is not a multiple of the element size.");if(length===undefined){byteLength=buffer.byteLength-byteOffset;if(byteLength%this.BYTES_PER_ELEMENT)throw RangeError("length of buffer minus byteOffset not a multiple of the element size");length=byteLength/this.BYTES_PER_ELEMENT}else{length=ToUint32(length);byteLength=length*this.BYTES_PER_ELEMENT}if(byteOffset+byteLength>buffer.byteLength)throw RangeError("byteOffset and length reference an area beyond the end of the buffer");Object.defineProperty(this,"buffer",{value:buffer});Object.defineProperty(this,"byteLength",{value:byteLength});Object.defineProperty(this,"byteOffset",{value:byteOffset});Object.defineProperty(this,"length",{value:length})}.apply(this,arguments)}throw TypeError()}Object.defineProperty($TypedArray$,"from",{value:function(iterable){return new this(iterable)}});Object.defineProperty($TypedArray$,"of",{value:function(){return new this(arguments)}});var $TypedArrayPrototype$={};$TypedArray$.prototype=$TypedArrayPrototype$;Object.defineProperty($TypedArray$.prototype,"_getter",{value:function(index){if(arguments.length<1)throw SyntaxError("Not enough arguments");index=ToUint32(index);if(index>=this.length)return undefined;var bytes=[],i,o;for(i=0,o=this.byteOffset+index*this.BYTES_PER_ELEMENT;i=this.length)return;var bytes=this._pack(value),i,o;for(i=0,o=this.byteOffset+index*this.BYTES_PER_ELEMENT;i0){o._setter(to,o._getter(from));from=from+direction;to=to+direction;count=count-1}return o}});Object.defineProperty($TypedArray$.prototype,"every",{value:function(callbackfn){if(this===undefined||this===null)throw TypeError();var t=Object(this);var len=ToUint32(t.length);if(!IsCallable(callbackfn))throw TypeError();var thisArg=arguments[1];for(var i=0;i1?arguments[1]:undefined;var k=0;while(k1?arguments[1]:undefined;var k=0;while(k0){n=Number(arguments[1]);if(n!==n){n=0}else if(n!==0&&n!==1/0&&n!==-(1/0)){n=(n>0||-1)*floor(abs(n))}}if(n>=len)return-1;var k=n>=0?n:max(len-abs(n),0);for(;k1){n=Number(arguments[1]);if(n!==n){n=0}else if(n!==0&&n!==1/0&&n!==-(1/0)){n=(n>0||-1)*floor(abs(n))}}var k=n>=0?min(n,len-1):len-abs(n);for(;k>=0;k--){if(t._getter(k)===searchElement)return k}return-1}});Object.defineProperty($TypedArray$.prototype,"map",{value:function(callbackfn){if(this===undefined||this===null)throw TypeError();var t=Object(this);var len=ToUint32(t.length);if(!IsCallable(callbackfn))throw TypeError();var res=[];res.length=len;var thisp=arguments[1];for(var i=0;i=2){accumulator=arguments[1]}else{accumulator=t._getter(k++)}while(k=2){accumulator=arguments[1]}else{accumulator=t._getter(k--)}while(k>=0){accumulator=callbackfn.call(undefined,accumulator,t._getter(k),k,t);k--}return accumulator}});Object.defineProperty($TypedArray$.prototype,"reverse",{value:function(){if(this===undefined||this===null)throw TypeError();var t=Object(this);var len=ToUint32(t.length);var half=floor(len/2);for(var i=0,j=len-1;ithis.length){throw RangeError("Offset plus length of array is out of range")}byteOffset=this.byteOffset+offset*this.BYTES_PER_ELEMENT;byteLength=array.length*this.BYTES_PER_ELEMENT;if(array.buffer===this.buffer){tmp=[];for(i=0,s=array.byteOffset;ithis.length){throw RangeError("Offset plus length of array is out of range")}for(i=0;imax?max:v}start=ToInt32(start);end=ToInt32(end);if(arguments.length<1){start=0}if(arguments.length<2){end=this.length}if(start<0){start=this.length+start}if(end<0){end=this.length+end}start=clamp(start,0,this.length);end=clamp(end,0,this.length);var len=end-start;if(len<0){len=0}return new this.constructor(this.buffer,this.byteOffset+start*this.BYTES_PER_ELEMENT,len)}});function makeTypedArray(elementSize,pack,unpack){var TypedArray=function(){Object.defineProperty(this,"constructor",{value:TypedArray});$TypedArray$.apply(this,arguments);if(0)makeArrayAccessors(this)};if("__proto__"in TypedArray){TypedArray.__proto__=$TypedArray$}else{TypedArray.from=$TypedArray$.from;TypedArray.of=$TypedArray$.of}TypedArray.BYTES_PER_ELEMENT=elementSize;var TypedArrayPrototype=function(){};TypedArrayPrototype.prototype=$TypedArrayPrototype$;TypedArray.prototype=new TypedArrayPrototype;Object.defineProperty(TypedArray.prototype,"BYTES_PER_ELEMENT",{value:elementSize});Object.defineProperty(TypedArray.prototype,"_pack",{value:pack});Object.defineProperty(TypedArray.prototype,"_unpack",{value:unpack});return TypedArray}var Int8Array=makeTypedArray(1,packI8,unpackI8);var Uint8Array=makeTypedArray(1,packU8,unpackU8);var Uint8ClampedArray=makeTypedArray(1,packU8Clamped,unpackU8);var Int16Array=makeTypedArray(2,packI16,unpackI16);var Uint16Array=makeTypedArray(2,packU16,unpackU16);var Int32Array=makeTypedArray(4,packI32,unpackI32);var Uint32Array=makeTypedArray(4,packU32,unpackU32);var Float32Array=makeTypedArray(4,packF32,unpackF32);var Float64Array=makeTypedArray(8,packF64,unpackF64);global.Int8Array=global.Int8Array||Int8Array;global.Uint8Array=global.Uint8Array||Uint8Array;global.Uint8ClampedArray=global.Uint8ClampedArray||Uint8ClampedArray;global.Int16Array=global.Int16Array||Int16Array;global.Uint16Array=global.Uint16Array||Uint16Array;global.Int32Array=global.Int32Array||Int32Array;global.Uint32Array=global.Uint32Array||Uint32Array;global.Float32Array=global.Float32Array||Float32Array;global.Float64Array=global.Float64Array||Float64Array})();(function(){function r(array,index){return IsCallable(array.get)?array.get(index):array[index]}var IS_BIG_ENDIAN=function(){var u16array=new Uint16Array([4660]),u8array=new Uint8Array(u16array.buffer);return r(u8array,0)===18}();function DataView(buffer,byteOffset,byteLength){if(!(buffer instanceof ArrayBuffer||Class(buffer)==="ArrayBuffer"))throw TypeError();byteOffset=ToUint32(byteOffset);if(byteOffset>buffer.byteLength)throw RangeError("byteOffset out of range");if(byteLength===undefined)byteLength=buffer.byteLength-byteOffset;else byteLength=ToUint32(byteLength);if(byteOffset+byteLength>buffer.byteLength)throw RangeError("byteOffset and length reference an area beyond the end of the buffer");Object.defineProperty(this,"buffer",{value:buffer});Object.defineProperty(this,"byteLength",{value:byteLength});Object.defineProperty(this,"byteOffset",{value:byteOffset})}function makeGetter(arrayType){return function GetViewValue(byteOffset,littleEndian){byteOffset=ToUint32(byteOffset);if(byteOffset+arrayType.BYTES_PER_ELEMENT>this.byteLength)throw RangeError("Array index out of range");byteOffset+=this.byteOffset;var uint8Array=new Uint8Array(this.buffer,byteOffset,arrayType.BYTES_PER_ELEMENT),bytes=[];for(var i=0;ithis.byteLength)throw RangeError("Array index out of range");var typeArray=new arrayType([value]),byteArray=new Uint8Array(typeArray.buffer),bytes=[],i,byteView;for(i=0;i=0};add_prop(String.prototype,"includes",E.t.string_includes);E.t.string_repeat=function(n){var s="";for(var i=0;i=0};add_prop(Array.prototype,"includes",E.t.array_includes);E.t.array_find=function(fn,this_arg){var a=this,value;for(var i=0;i=log_level){console.debug("["+Log.getDurationString(new Date-start,1e3)+"]","["+module+"]",msg)}},info:function(module,msg){if(LOG_LEVEL_INFO>=log_level){console.info("["+Log.getDurationString(new Date-start,1e3)+"]","["+module+"]",msg)}},warn:function(module,msg){if(LOG_LEVEL_WARNING>=log_level){console.warn("["+Log.getDurationString(new Date-start,1e3)+"]","["+module+"]",msg)}},error:function(module,msg){if(LOG_LEVEL_ERROR>=log_level){console.error("["+Log.getDurationString(new Date-start,1e3)+"]","["+module+"]",msg)}}};return logObject}();Log.getDurationString=function(duration,_timescale){function pad(number,length){var str=""+number;var a=str.split(".");while(a[0].length0){var str="";for(var i=0;i0)str+=",";str+="["+Log.getDurationString(ranges.start(i))+","+Log.getDurationString(ranges.end(i))+"]"}return str}else{return"(empty)"}};var MP4BoxStream=function(arrayBuffer){if(arrayBuffer instanceof ArrayBuffer){this.buffer=arrayBuffer;this.uint8=new Uint8Array(arrayBuffer)}else{throw"Needs an array buffer"}this.position=0};MP4BoxStream.prototype.getPosition=function(){return this.position};MP4BoxStream.prototype.getEndPosition=function(){return this.buffer.byteLength};MP4BoxStream.prototype.getLength=function(){return this.buffer.byteLength};MP4BoxStream.prototype.seek=function(pos){var npos=Math.max(0,Math.min(this.uint8.length,pos));this.position=isNaN(npos)||!isFinite(npos)?0:npos};MP4BoxStream.prototype.isEos=function(){return this.getPosition()>=this.getEndPosition()};MP4BoxStream.prototype.readUint8=function(){var u8;if(this.position+1<=this.uint8.length){u8=this.uint8[this.position];this.position++;return u8}else{throw"Not enough bytes in buffer"}};MP4BoxStream.prototype.readUint16=function(){var u8_1,u8_2,u16;if(this.position+2<=this.uint8.length){u8_1=this.uint8[this.position];this.position++;u8_2=this.uint8[this.position];this.position++;u16=u8_1<<8|u8_2;return u16}else{throw"Not enough bytes in buffer"}};MP4BoxStream.prototype.readUint24=function(){var u8,u24;if(this.position+3<=this.uint8.length){u24=this.uint8[this.position]<<16;this.position++;u24|=this.uint8[this.position]<<8;this.position++;u24|=this.uint8[this.position];this.position++;return u24}else{throw"Not enough bytes in buffer"}};MP4BoxStream.prototype.readUint32=function(){var u8,u32;if(this.position+4<=this.uint8.length){u32=this.uint8[this.position]<<24;this.position++;u32|=this.uint8[this.position]<<16;this.position++;u32|=this.uint8[this.position]<<8;this.position++;u32|=this.uint8[this.position];this.position++;return u32}else{throw"Not enough bytes in buffer"}};MP4BoxStream.prototype.readUint64=function(){var u64;if(this.position+8<=this.uint8.length){u64=this.readUint32()<<32;u64|=this.readUint32();return u64}else{throw"Not enough bytes in buffer"}};MP4BoxStream.prototype.readString=function(length){if(this.position+length<=this.uint8.length){var arr=[];for(var i=0;ithis._byteLength){this._byteLength=req}return}if(blen<1){blen=1}while(req>blen){blen*=2}var buf=new ArrayBuffer(blen);var src=new Uint8Array(this._buffer);var dst=new Uint8Array(buf,0,src.length);dst.set(src);this.buffer=buf;this._byteLength=req};DataStream.prototype._trimAlloc=function(){if(this._byteLength==this._buffer.byteLength){return}var buf=new ArrayBuffer(this._byteLength);var dst=new Uint8Array(buf);var src=new Uint8Array(this._buffer,0,dst.length);dst.set(src);this.buffer=buf};DataStream.BIG_ENDIAN=false;DataStream.LITTLE_ENDIAN=true;DataStream.prototype._byteLength=0;Object.defineProperty(DataStream.prototype,"byteLength",{get:function(){return this._byteLength-this._byteOffset}});var newDataView=function(buffer,byteOffset){return byteOffset?new DataView(buffer,byteOffset):new DataView(buffer)};Object.defineProperty(DataStream.prototype,"buffer",{get:function(){this._trimAlloc();return this._buffer},set:function(v){this._buffer=v;this._dataView=newDataView(this._buffer,this._byteOffset);this._byteLength=this._buffer.byteLength}});Object.defineProperty(DataStream.prototype,"byteOffset",{get:function(){return this._byteOffset},set:function(v){this._byteOffset=v;this._dataView=newDataView(this._buffer,this._byteOffset);this._byteLength=this._buffer.byteLength}});Object.defineProperty(DataStream.prototype,"dataView",{get:function(){return this._dataView},set:function(v){this._byteOffset=v.byteOffset;this._buffer=v.buffer;this._dataView=newDataView(this._buffer,this._byteOffset);this._byteLength=this._byteOffset+v.byteLength}});DataStream.prototype.seek=function(pos){var npos=Math.max(0,Math.min(this.byteLength,pos));this.position=isNaN(npos)||!isFinite(npos)?0:npos};DataStream.prototype.isEof=function(){return this.position>=this._byteLength};DataStream.prototype.mapUint8Array=function(length){this._realloc(length*1);var arr=new Uint8Array(this._buffer,this.byteOffset+this.position,length);this.position+=length*1;return arr};DataStream.prototype.readInt32Array=function(length,e){length=length==null?this.byteLength-this.position/4:length;var arr=new Int32Array(length);DataStream.memcpy(arr.buffer,0,this.buffer,this.byteOffset+this.position,length*arr.BYTES_PER_ELEMENT);DataStream.arrayToNative(arr,e==null?this.endianness:e);this.position+=arr.byteLength;return arr};DataStream.prototype.readInt16Array=function(length,e){length=length==null?this.byteLength-this.position/2:length;var arr=new Int16Array(length);DataStream.memcpy(arr.buffer,0,this.buffer,this.byteOffset+this.position,length*arr.BYTES_PER_ELEMENT);DataStream.arrayToNative(arr,e==null?this.endianness:e);this.position+=arr.byteLength;return arr};DataStream.prototype.readInt8Array=function(length){length=length==null?this.byteLength-this.position:length;var arr=new Int8Array(length);DataStream.memcpy(arr.buffer,0,this.buffer,this.byteOffset+this.position,length*arr.BYTES_PER_ELEMENT);this.position+=arr.byteLength;return arr};DataStream.prototype.readUint32Array=function(length,e){length=length==null?this.byteLength-this.position/4:length;var arr=new Uint32Array(length);DataStream.memcpy(arr.buffer,0,this.buffer,this.byteOffset+this.position,length*arr.BYTES_PER_ELEMENT);DataStream.arrayToNative(arr,e==null?this.endianness:e);this.position+=arr.byteLength;return arr};DataStream.prototype.readUint16Array=function(length,e){length=length==null?this.byteLength-this.position/2:length;var arr=new Uint16Array(length);DataStream.memcpy(arr.buffer,0,this.buffer,this.byteOffset+this.position,length*arr.BYTES_PER_ELEMENT);DataStream.arrayToNative(arr,e==null?this.endianness:e);this.position+=arr.byteLength;return arr};DataStream.prototype.readUint8Array=function(length){length=length==null?this.byteLength-this.position:length;var arr=new Uint8Array(length);DataStream.memcpy(arr.buffer,0,this.buffer,this.byteOffset+this.position,length*arr.BYTES_PER_ELEMENT);this.position+=arr.byteLength;return arr};DataStream.prototype.readFloat64Array=function(length,e){length=length==null?this.byteLength-this.position/8:length;var arr=new Float64Array(length);DataStream.memcpy(arr.buffer,0,this.buffer,this.byteOffset+this.position,length*arr.BYTES_PER_ELEMENT);DataStream.arrayToNative(arr,e==null?this.endianness:e);this.position+=arr.byteLength;return arr};DataStream.prototype.readFloat32Array=function(length,e){length=length==null?this.byteLength-this.position/4:length;var arr=new Float32Array(length);DataStream.memcpy(arr.buffer,0,this.buffer,this.byteOffset+this.position,length*arr.BYTES_PER_ELEMENT);DataStream.arrayToNative(arr,e==null?this.endianness:e);this.position+=arr.byteLength;return arr};DataStream.prototype.readInt32=function(e){var v=this._dataView.getInt32(this.position,e==null?this.endianness:e);this.position+=4;return v};DataStream.prototype.readInt16=function(e){var v=this._dataView.getInt16(this.position,e==null?this.endianness:e);this.position+=2;return v};DataStream.prototype.readInt8=function(){var v=this._dataView.getInt8(this.position);this.position+=1;return v};DataStream.prototype.readUint32=function(e){var v=this._dataView.getUint32(this.position,e==null?this.endianness:e);this.position+=4;return v};DataStream.prototype.readUint16=function(e){var v=this._dataView.getUint16(this.position,e==null?this.endianness:e);this.position+=2;return v};DataStream.prototype.readUint8=function(){var v=this._dataView.getUint8(this.position);this.position+=1;return v};DataStream.prototype.readFloat32=function(e){var v=this._dataView.getFloat32(this.position,e==null?this.endianness:e);this.position+=4;return v};DataStream.prototype.readFloat64=function(e){var v=this._dataView.getFloat64(this.position,e==null?this.endianness:e);this.position+=8;return v};DataStream.endianness=new Int8Array(new Int16Array([1]).buffer)[0]>0;DataStream.memcpy=function(dst,dstOffset,src,srcOffset,byteLength){var dstU8=new Uint8Array(dst,dstOffset,byteLength);var srcU8=new Uint8Array(src,srcOffset,byteLength);dstU8.set(srcU8)};DataStream.arrayToNative=function(array,arrayIsLittleEndian){if(arrayIsLittleEndian==this.endianness){return array}else{return this.flipArrayEndianness(array)}};DataStream.nativeToEndian=function(array,littleEndian){if(this.endianness==littleEndian){return array}else{return this.flipArrayEndianness(array)}};DataStream.flipArrayEndianness=function(array){var u8=new Uint8Array(array.buffer,array.byteOffset,array.byteLength);for(var i=0;ik;j--,k++){var tmp=u8[k];u8[k]=u8[j];u8[j]=tmp}}return array};DataStream.prototype.failurePosition=0;String.fromCharCodeUint8=function(uint8arr){var arr=[];for(var i=0;i>16);this.writeUint8((v&65280)>>8);this.writeUint8(v&255)};DataStream.prototype.adjustUint32=function(position,value){var pos=this.position;this.seek(position);this.writeUint32(value);this.seek(pos)};DataStream.prototype.mapInt32Array=function(length,e){this._realloc(length*4);var arr=new Int32Array(this._buffer,this.byteOffset+this.position,length);DataStream.arrayToNative(arr,e==null?this.endianness:e);this.position+=length*4;return arr};DataStream.prototype.mapInt16Array=function(length,e){this._realloc(length*2);var arr=new Int16Array(this._buffer,this.byteOffset+this.position,length);DataStream.arrayToNative(arr,e==null?this.endianness:e);this.position+=length*2;return arr};DataStream.prototype.mapInt8Array=function(length){this._realloc(length*1);var arr=new Int8Array(this._buffer,this.byteOffset+this.position,length);this.position+=length*1;return arr};DataStream.prototype.mapUint32Array=function(length,e){this._realloc(length*4);var arr=new Uint32Array(this._buffer,this.byteOffset+this.position,length);DataStream.arrayToNative(arr,e==null?this.endianness:e);this.position+=length*4;return arr};DataStream.prototype.mapUint16Array=function(length,e){this._realloc(length*2);var arr=new Uint16Array(this._buffer,this.byteOffset+this.position,length);DataStream.arrayToNative(arr,e==null?this.endianness:e);this.position+=length*2;return arr};DataStream.prototype.mapFloat64Array=function(length,e){this._realloc(length*8);var arr=new Float64Array(this._buffer,this.byteOffset+this.position,length);DataStream.arrayToNative(arr,e==null?this.endianness:e);this.position+=length*8;return arr};DataStream.prototype.mapFloat32Array=function(length,e){this._realloc(length*4);var arr=new Float32Array(this._buffer,this.byteOffset+this.position,length);DataStream.arrayToNative(arr,e==null?this.endianness:e);this.position+=length*4;return arr};var MultiBufferStream=function(){this.buffers=[];this.bufferIndex=-1};MultiBufferStream.prototype=new DataStream(new ArrayBuffer(0),0,DataStream.BIG_ENDIAN);MultiBufferStream.prototype.initialized=function(){var firstBuffer;if(this.bufferIndex>-1){return true}else if(this.buffers.length>0){firstBuffer=this.buffers[0];if(firstBuffer.fileStart===0){this.buffer=firstBuffer;this.bufferIndex=0;Log.debug("MultiBufferStream","Stream ready for parsing");return true}else{Log.warn("MultiBufferStream","The first buffer should have a fileStart of 0");this.logBufferLevel();return false}}else{Log.warn("MultiBufferStream","No buffer to start parsing from");this.logBufferLevel();return false}};ArrayBuffer.concat=function(buffer1,buffer2){Log.debug("ArrayBuffer","Trying to create a new buffer of size: "+(buffer1.byteLength+buffer2.byteLength));var tmp=new Uint8Array(buffer1.byteLength+buffer2.byteLength);tmp.set(new Uint8Array(buffer1),0);tmp.set(new Uint8Array(buffer2),buffer1.byteLength);return tmp.buffer};MultiBufferStream.prototype.reduceBuffer=function(buffer,offset,newLength){var smallB;smallB=new Uint8Array(newLength);smallB.set(new Uint8Array(buffer,offset,newLength));smallB.buffer.fileStart=buffer.fileStart+offset;smallB.buffer.usedBytes=0;return smallB.buffer};MultiBufferStream.prototype.insertBuffer=function(ab){var to_add=true;for(var i=0;ib.byteLength){this.buffers.splice(i,1);i--;continue}else{Log.warn("MultiBufferStream","Buffer (fileStart: "+ab.fileStart+" - Length: "+ab.byteLength+") already appended, ignoring")}}else{if(ab.fileStart+ab.byteLength<=b.fileStart){}else{ab=this.reduceBuffer(ab,0,b.fileStart-ab.fileStart)}Log.debug("MultiBufferStream","Appending new buffer (fileStart: "+ab.fileStart+" - Length: "+ab.byteLength+")");this.buffers.splice(i,0,ab);if(i===0){this.buffer=ab}}to_add=false;break}else if(ab.fileStart0){ab=this.reduceBuffer(ab,offset,newLength)}else{to_add=false;break}}}if(to_add){Log.debug("MultiBufferStream","Appending new buffer (fileStart: "+ab.fileStart+" - Length: "+ab.byteLength+")");this.buffers.push(ab);if(i===0){this.buffer=ab}}};MultiBufferStream.prototype.logBufferLevel=function(info){var i;var buffer;var used,total;var ranges=[];var range;var bufferedString="";used=0;total=0;for(i=0;i0){bufferedString+=range.end-1+"]"}var log=info?Log.info:Log.debug;if(this.buffers.length===0){log("MultiBufferStream","No more buffer in memory")}else{log("MultiBufferStream",""+this.buffers.length+" stored buffer(s) ("+used+"/"+total+" bytes): "+bufferedString)}};MultiBufferStream.prototype.cleanBuffers=function(){var i;var buffer;for(i=0;i"+this.buffer.byteLength+")");return true}else{return false}}else{return false}};MultiBufferStream.prototype.findPosition=function(fromStart,filePosition,markAsUsed){var i;var abuffer=null;var index=-1;if(fromStart===true){i=0}else{i=this.bufferIndex}while(i=filePosition){Log.debug("MultiBufferStream","Found position in existing buffer #"+index);return index}else{return-1}}else{return-1}};MultiBufferStream.prototype.findEndContiguousBuf=function(inputindex){var i;var currentBuf;var nextBuf;var index=inputindex!==undefined?inputindex:this.bufferIndex;currentBuf=this.buffers[index];if(this.buffers.length>index+1){for(i=index+1;i>3]>>7-p%8&1};this.read=function(count,peek){var ret=0;for(var i=0,p=pos>>3,r=7-pos%8,c=data[p];i>r&1;if(!r){r=8;c=data[++p]}}if(!peek)pos+=count;return ret};this.bits=function(){return len-pos}};var parseAudioSpecificConfig=function(data){var SBR=-1,PS=-1;var br=new BitReader(data);var type=br.read(5),type_ext;if(type==31)type+=1+br.read(6);if(br.read(4)==15)br.read(24);br.read(4);if(type==5||type==29){PS=type==29?1:-1;SBR=1;type_ext=5;if(br.read(4)==15)br.read(24);type=br.read(5);if(type==31)type+=1+br.read(6);if(type==22)br.read(4)}if(type_ext!=5&&type!=36){while(br.bits()>=16){if(br.read(11,1)==695){br.read(11);type_ext=br.read(5);if(type_ext==31)type_ext+=1+br.read(6);if(type_ext==5){SBR=br.read(1);if(SBR){if(br.read(4)==15)br.read(24)}}if(br.bits()>=12&&br.read(11)==1352)PS=br.read(1)}else br.read(1)}}return type_ext==5?PS==1?29:SBR==1?5:type:type};var MPEG4DescriptorParser=function(){var ES_DescrTag=3;var DecoderConfigDescrTag=4;var DecSpecificInfoTag=5;var SLConfigDescrTag=6;var descTagToName=[];descTagToName[ES_DescrTag]="ES_Descriptor";descTagToName[DecoderConfigDescrTag]="DecoderConfigDescriptor";descTagToName[DecSpecificInfoTag]="DecoderSpecificInfo";descTagToName[SLConfigDescrTag]="SLConfigDescriptor"; var that=this;var classes={};this.parseOneDescriptor=function(stream){var hdrSize=0;var size=0;var tag;var desc;var byteRead;tag=stream.readUint8();hdrSize++;byteRead=stream.readUint8();hdrSize++;while(byteRead&128){size=(byteRead&127)<<7;byteRead=stream.readUint8();hdrSize++}size+=byteRead&127;Log.debug("MPEG4DescriptorParser","Found "+(descTagToName[tag]|"Descriptor "+tag)+", size "+size+" at position "+stream.getPosition());if(descTagToName[tag]){desc=new classes[descTagToName[tag]](size)}else{desc=new classes.Descriptor(size)}desc.parse(stream);return desc};classes.Descriptor=function(_tag,_size){this.tag=_tag;this.size=_size;this.descs=[]};classes.Descriptor.prototype.parse=function(stream){this.data=stream.readUint8Array(this.size)};classes.Descriptor.prototype.findDescriptor=function(tag){for(var i=0;i>=1}baseCodec+=BoxParser.decimalToHex(reversed,0);baseCodec+=".";if(this.hvcC.general_tier_flag===0){baseCodec+="L"}else{baseCodec+="H"}baseCodec+=this.hvcC.general_level_idc;var hasByte=false;var constraint_string="";for(i=5;i>=0;i--){if(this.hvcC.general_constraint_indicator[i]||hasByte){constraint_string="."+BoxParser.decimalToHex(this.hvcC.general_constraint_indicator[i],0)+constraint_string;hasByte=true}}baseCodec+=constraint_string}return baseCodec};BoxParser.mp4aSampleEntry.prototype.getCodec=function(){var baseCodec=BoxParser.SampleEntry.prototype.getCodec.call(this);var esds=this.esds||this.wave&&this.wave.esds;if(esds&&esds.esd){var oti=esds.esd.getOTI();var dsi=esds.esd.getAudioConfig();return baseCodec+"."+BoxParser.decimalToHex(oti)+(dsi?"."+dsi:"")}else{return baseCodec}};BoxParser.stxtSampleEntry.prototype.getCodec=function(){var baseCodec=BoxParser.SampleEntry.prototype.getCodec.call(this);if(this.mime_format){return baseCodec+"."+this.mime_format}else{return baseCodec}};BoxParser.parseOneBox=function(stream,headerOnly){var box;var start=stream.getPosition();var hdr_size=0;var uuid;if(stream.getEndPosition()-start<8){Log.debug("BoxParser","Not enough data in stream to parse the type and size of the box");return{code:BoxParser.ERR_NOT_ENOUGH_DATA}}var size=stream.readUint32();var type=stream.readString(4);Log.debug("BoxParser","Found box of type "+type+" and size "+size+" at position "+start);hdr_size=8;if(type=="uuid"){uuid=stream.readUint8Array(16);hdr_size+=16}if(size==1){if(stream.getEndPosition()-stream.getPosition()<8){stream.seek(start);Log.warn("BoxParser",'Not enough data in stream to parse the extended size of the "'+type+'" box');return{code:BoxParser.ERR_NOT_ENOUGH_DATA}}size=stream.readUint64();hdr_size+=8}else if(size===0){if(type!=="mdat"){throw"Unlimited box size not supported"}}if(start+size>stream.getEndPosition()){stream.seek(start);Log.warn("BoxParser",'Not enough data in stream to parse the entire "'+type+'" box');return{code:BoxParser.ERR_NOT_ENOUGH_DATA,type:type,size:size,hdr_size:hdr_size,start:start}}if(headerOnly){return{code:BoxParser.OK,type:type,size:size,hdr_size:hdr_size,start:start}}else{if(BoxParser[type+"Box"]){if(BoxParser.parseForWrite&&BoxParser[type+"Box"].prototype.write===BoxParser.Box.prototype.write&&type!=="mdat"&&type!=="skip"&&type!="free"&&type!="esds"){Log.warn("BoxParser",type+" box writing not yet implemented, forcing default parsing");box=new BoxParser.Box(type,size)}else{box=new BoxParser[type+"Box"](size)}}else{if(type!=="uuid"){Log.warn("BoxParser","Unknown box type: "+type)}box=new BoxParser.Box(type,size);if(uuid){box.uuid=uuid}}}box.hdr_size=hdr_size;box.start=start;box.parse(stream);return{code:BoxParser.OK,box:box,size:size}};BoxParser.Box.prototype.parse=function(stream){if(this.type!="mdat"){this.data=stream.readUint8Array(this.size-this.hdr_size)}else{if(this.size===0){stream.seek(stream.getEndPosition())}else{stream.seek(this.start+this.size)}}};BoxParser.FullBox.prototype.parseFullHeader=function(stream){this.version=stream.readUint8();this.flags=stream.readUint24();this.hdr_size+=4};BoxParser.ContainerBox.prototype.parse=function(stream){var ret;var box;while(stream.getPosition()>10&31;chars[1]=this.language>>5&31;chars[2]=this.language&31;this.languageString=String.fromCharCode(chars[0]+96,chars[1]+96,chars[2]+96)};BoxParser.TrackGroupTypeBox.prototype.parse=function(stream){this.parseFullHeader(stream);this.track_group_id=stream.readUint32()};BoxParser.TrackReferenceTypeBox=function(type,size,hdr_size,start){BoxParser.Box.call(this,type,size);this.hdr_size=hdr_size;this.start=start};BoxParser.TrackReferenceTypeBox.prototype=new BoxParser.Box;BoxParser.TrackReferenceTypeBox.prototype.parse=function(stream){this.track_ids=stream.readUint32Array((this.size-this.hdr_size)/4)};BoxParser.avcCBox.prototype.parse=function(stream){var i;var nb_nalus;var length;var toparse;this.configurationVersion=stream.readUint8();this.AVCProfileIndication=stream.readUint8();this.profile_compatibility=stream.readUint8();this.AVCLevelIndication=stream.readUint8();this.lengthSizeMinusOne=stream.readUint8()&3;nb_nalus=stream.readUint8()&31;toparse=this.size-this.hdr_size-6;this.SPS=new Array(nb_nalus);for(i=0;i0){this.ext=stream.readUint8Array(toparse)}};BoxParser.btrtBox.prototype.parse=function(stream){this.bufferSizeDB=stream.readUint32();this.maxBitrate=stream.readUint32();this.avgBitrate=stream.readUint32()};BoxParser.co64Box.prototype.parse=function(stream){var entry_count;var i;this.parseFullHeader(stream);entry_count=stream.readUint32();this.chunk_offsets=[];if(this.version===0){for(i=0;ithis.start+this.size){Log.warn("BoxParser","Parsed more than the size of the box (null-terminated string problem?)");stream.seek(this.start+this.size)}};BoxParser.cslgBox.prototype.parse=function(stream){var entry_count;this.parseFullHeader(stream);if(this.version===0){this.compositionToDTSShift=stream.readInt32();this.leastDecodeToDisplayDelta=stream.readInt32();this.greatestDecodeToDisplayDelta=stream.readInt32();this.compositionStartTime=stream.readInt32();this.compositionEndTime=stream.readInt32()}else{this.data=stream.readUint8Array(this.size-this.hdr_size-4)}};BoxParser.cttsBox.prototype.parse=function(stream){var entry_count;var i;this.parseFullHeader(stream);entry_count=stream.readUint32();this.sample_counts=[];this.sample_offsets=[];if(this.version===0){for(i=0;i=4){this.compatible_brands[i]=stream.readString(4);toparse-=4;i++}};BoxParser.hdlrBox.prototype.parse=function(stream){this.parseFullHeader(stream);if(this.version===0){stream.readUint32();this.handler=stream.readString(4);stream.readUint32Array(3);this.name=stream.readString(this.size-this.hdr_size-20)}else{this.data=stream.readUint8Array(this.size-this.hdr_size)}};BoxParser.hvcCBox.prototype.parse=function(stream){var i,j;var nb_nalus;var length;var tmp_byte;this.configurationVersion=stream.readUint8();tmp_byte=stream.readUint8();this.general_profile_space=tmp_byte>>6;this.general_tier_flag=(tmp_byte&32)>>5;this.general_profile_idc=tmp_byte&31;this.general_profile_compatibility=stream.readUint32();this.general_constraint_indicator=stream.readUint8Array(6);this.general_level_idc=stream.readUint8();this.min_spatial_segmentation_idc=stream.readUint16()&4095;this.parallelismType=stream.readUint8()&3;this.chromaFormat=stream.readUint8()&3;this.bitDepthLumaMinus8=stream.readUint8()&7;this.bitDepthChromaMinus8=stream.readUint8()&7;this.avgFrameRate=stream.readUint16();tmp_byte=stream.readUint8();this.constantFrameRate=tmp_byte>>6;this.numTemporalLayers=(tmp_byte&13)>>3;this.temporalIdNested=(tmp_byte&4)>>2;this.lengthSizeMinusOne=tmp_byte&3;this.nalu_arrays=[];var numOfArrays=stream.readUint8();for(i=0;i>7;nalu_array.nalu_type=tmp_byte&63;var numNalus=stream.readUint16();for(j=0;j>4&15;this.length_size=byte&15;byte=stream.readUint8();this.base_offset_size=byte>>4&15;if(this.version===1){this.index_size=byte&15}else{this.index_size=0}this.items=[];var item_count=stream.readUint16();for(var i=0;i0){switch(this.index_size){case 0:extent.extent_index=0;break;case 4:extent.extent_index=stream.readUint32();break;case 8:extent.extent_index=stream.readUint64();break;default:throw"Error reading extent index"}}switch(this.offset_size){case 0:extent.extent_offset=0;break;case 4:extent.extent_offset=stream.readUint32();break;case 8:extent.extent_offset=stream.readUint64();break;default:throw"Error reading extent index"}switch(this.length_size){case 0:extent.extent_length=0;break;case 4:extent.extent_length=stream.readUint32();break;case 8:extent.extent_length=stream.readUint64();break;default:throw"Error reading extent index"}}}};BoxParser.infeBox.prototype.parse=function(stream){this.parseFullHeader(stream);if(this.version===0||this.version===1){this.item_ID=stream.readUint16();this.item_protection_index=stream.readUint16();this.item_name=stream.readCString();this.content_type=stream.readCString();this.content_encoding=stream.readCString()}if(this.version===1){this.extension_type=stream.readString(4);Log.warn("BoxParser","Cannot parse extension type");stream.seek(this.start+this.size);return}if(this.version>=2){if(this.version===2){this.item_ID=stream.readUint16()}else if(this.version===3){this.item_ID=stream.readUint32()}this.item_protection_index=stream.readUint16();this.item_type=stream.readString(4);this.name=stream.readCString();if(this.item_type==="mime"){this.content_type=stream.readCString();this.content_encoding=stream.readCString()}else if(this.item_type==="uri "){this.item_uri_type=stream.readCString()}}if(stream.getPosition()>this.start+this.size){Log.warn("BoxParser","Parsed more than the size of the box (null-terminated string problem?)");stream.seek(this.start+this.size)}};BoxParser.irefBox=function(size){BoxParser.FullBox.call(this,"iref",size);this.references=[]};BoxParser.irefBox.prototype=new BoxParser.FullBox;BoxParser.irefBox.prototype.parse=function(stream){var ret;var entryCount;var box;this.parseFullHeader(stream);while(stream.getPosition()>7;level.assignment_type=tmp_byte&127;switch(level.assignment_type){case 0:level.grouping_type=stream.readUint32();break;case 1:level.grouping_type=stream.readUint32();level.grouping_type_parameter=stream.readUint32();break;case 2:break;case 3:break;case 4:level.sub_track_id=stream.readUint32();break;default:Log.warn("BoxParser","Unknown leva assignement type")}}};BoxParser.maxrBox.prototype.parse=function(stream){this.period=stream.readUint32();this.bytes=stream.readUint32()};BoxParser.mdhdBox.prototype.parse=function(stream){this.parseFullHeader(stream);if(this.version==1){this.creation_time=stream.readUint64();this.modification_time=stream.readUint64();this.timescale=stream.readUint32();this.duration=stream.readUint64()}else{this.creation_time=stream.readUint32();this.modification_time=stream.readUint32();this.timescale=stream.readUint32();this.duration=stream.readUint32()}this.language=stream.readUint16();var chars=[];chars[0]=this.language>>10&31;chars[1]=this.language>>5&31;chars[2]=this.language&31;this.languageString=String.fromCharCode(chars[0]+96,chars[1]+96,chars[2]+96);stream.readUint16()};BoxParser.mehdBox.prototype.parse=function(stream){this.parseFullHeader(stream);if(this.version==1){this.fragment_duration=stream.readUint64()}else{this.fragment_duration=stream.readUint32()}};BoxParser.metaBox.prototype.parse=function(stream){this.parseFullHeader(stream);this.boxes=[];BoxParser.ContainerBox.prototype.parse.call(this,stream)};BoxParser.mettSampleEntry.prototype.parse=function(stream){this.parseHeader(stream);this.content_encoding=stream.readCString();this.mime_format=stream.readCString();this.parseFooter(stream)};BoxParser.metxSampleEntry.prototype.parse=function(stream){this.parseHeader(stream);this.content_encoding=stream.readCString();this.namespace=stream.readCString();this.schema_location=stream.readCString();this.parseFooter(stream)};BoxParser.mfhdBox.prototype.parse=function(stream){this.parseFullHeader(stream);this.sequence_number=stream.readUint32()};BoxParser.mfroBox.prototype.parse=function(stream){this.parseFullHeader(stream);this.size=stream.readUint32()};BoxParser.mvhdBox.prototype.parse=function(stream){this.flags=0;this.parseFullHeader(stream);if(this.version==1){this.creation_time=stream.readUint64();this.modification_time=stream.readUint64();this.timescale=stream.readUint32();this.duration=stream.readUint64()}else{this.creation_time=stream.readUint32();this.modification_time=stream.readUint32();this.timescale=stream.readUint32();this.duration=stream.readUint32()}this.rate=stream.readUint32();this.volume=stream.readUint16()>>8;stream.readUint16();stream.readUint32Array(2);this.matrix=stream.readUint32Array(9);stream.readUint32Array(6);this.next_track_id=stream.readUint32()};BoxParser.npckBox.prototype.parse=function(stream){this.packetssent=stream.readUint32()};BoxParser.numpBox.prototype.parse=function(stream){this.packetssent=stream.readUint64()};BoxParser.padbBox.prototype.parse=function(stream){this.parseFullHeader(stream);var sample_count=stream.readUint32();this.padbits=[];for(var i=0;i0){var count=stream.readUint32();this.kid=[];for(var i=0;i=8){ret=BoxParser.parseOneBox(stream,false);box=ret.box;this.boxes.push(box);this[box.type]=box}if(size==4){var term=stream.readUint32()}};BoxParser.VisualSampleEntry.prototype.parse=function(stream){this.parseHeader(stream);stream.readUint16();stream.readUint16();stream.readUint32Array(3);this.width=stream.readUint16();this.height=stream.readUint16();this.horizresolution=stream.readUint32();this.vertresolution=stream.readUint32(); stream.readUint32();this.frame_count=stream.readUint16();this.compressorname=stream.readString(32);this.depth=stream.readUint16();stream.readUint16();this.parseFooter(stream)};BoxParser.AudioSampleEntry.prototype.parse=function(stream){this.parseHeader(stream);this.version=stream.readUint16();stream.readUint16();stream.readUint32();this.channel_count=stream.readUint16();this.samplesize=stream.readUint16();stream.readUint16();stream.readUint16();this.samplerate=stream.readUint32()/(1<<16);if(stream.file.ftyp.major_brand=="qt "&&this.version){if(this.version==1){this.qt_version1=stream.readUint32Array(4);stream.seek(stream.getPosition()-4*4);this.qt_samplesPerFrame=stream.readUint32();stream.readUint32();this.qt_bytesPerFrame=stream.readUint32();stream.readUint32()}else if(this.version==2){stream.readUint32();this.qt2_samplerate=stream.readUint64();this.qt2_channel_count=stream.readUint32();stream.readUint32();this.qt2_samplesize=stream.readUint32();stream.readUint32();this.qt2_bytesPerFrame=stream.readUint32();this.qt2_samplesPerFrame=stream.readUint32()}}this.parseFooter(stream);if(this.type=="mp4a"&&(!this.esds&&this.wave&&this.wave.esds)){var esds=this.wave.esds;delete this.wave;delete this.chan;this.boxes=[esds];this.esds=esds;this.version=0}};BoxParser.SubtitleSampleEntry.prototype.parse=function(stream){this.parseHeader(stream);this.parseFooter(stream)};BoxParser.MetadataSampleEntry.prototype.parse=function(stream){this.parseHeader(stream);this.parseFooter(stream)};BoxParser.SystemSampleEntry.prototype.parse=function(stream){this.parseHeader(stream);this.parseFooter(stream)};BoxParser.metxSampleEntry.prototype.parse=function(stream){this.parseHeader(stream);this.content_encoding=stream.readCString();this.namespace=stream.readCString();this.schema_location=stream.readCString();this.parseFooter(stream)};BoxParser.mettSampleEntry.prototype.parse=function(stream){this.parseHeader(stream);this.content_encoding=stream.readCString();this.mime_format=stream.readCString();this.parseFooter(stream)};BoxParser.sbttSampleEntry.prototype.parse=function(stream){this.parseHeader(stream);this.content_encoding=stream.readCString();this.mime_format=stream.readCString();this.parseFooter(stream)};BoxParser.stxtSampleEntry.prototype.parse=function(stream){this.parseHeader(stream);this.content_encoding=stream.readCString();this.mime_format=stream.readCString();this.parseFooter(stream)};BoxParser.stppSampleEntry.prototype.parse=function(stream){this.parseHeader(stream);this.namespace=stream.readCString();this.schema_location=stream.readCString();this.auxiliary_mime_types=stream.readCString();this.parseFooter(stream)};BoxParser.tx3gSampleEntry.prototype.parse=function(stream){this.parseHeader(stream);this.displayFlags=stream.readUint32();this.horizontal_justification=stream.readInt8();this.vertical_justification=stream.readInt8();this.bg_color_rgba=stream.readUint8Array(4);this.box_record=stream.readInt16Array(4);this.style_record=stream.readUint8Array(12);this.parseFooter(stream)};BoxParser.alstSampleGroupEntry.prototype.parse=function(stream,length){var i;var roll_count=stream.readUint16();this.first_output_sample=stream.readUint16();this.sample_offset=[];for(i=0;i>7;this.avgRateFlag=tmp_byte>>6&1;if(this.durationFlag){this.duration=stream.readUint32()}if(this.avgRateFlag){this.accurateStatisticsFlag=stream.readUint8();this.avgBitRate=stream.readUint16();this.avgFrameRate=stream.readUint16()}this.dependency=[];var numReferences=stream.readUint8();for(var i=0;i>7;this.num_leading_samples=tmp_byte&127};BoxParser.rashSampleGroupEntry.prototype.parse=function(stream,length){this.operation_point_count=stream.readUint16();if(length!==2+(this.operation_point_count===1?2:this.operation_point_count*6)+9){Log.warn("BoxParser","Mismatch in "+this.grouping_type+" sample group length");this.data=stream.readUint8Array(length-2)}else{if(this.operation_point_count===1){this.target_rate_share=stream.readUint16()}else{this.target_rate_share=[];this.available_bitrate=[];for(var i=0;i>7};BoxParser.tsasSampleGroupEntry.prototype.parse=function(stream,length){Log.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed");this.data=stream.readUint8Array(length)};BoxParser.tsclSampleGroupEntry.prototype.parse=function(stream,length){Log.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed");this.data=stream.readUint8Array(length)};BoxParser.viprSampleGroupEntry.prototype.parse=function(stream,length){Log.warn("BoxParser","Sample Group type: "+this.grouping_type+" not fully parsed");this.data=stream.readUint8Array(length)};BoxParser.sbgpBox.prototype.parse=function(stream){this.parseFullHeader(stream);this.grouping_type=stream.readString(4);if(this.version===1){this.grouping_type_parameter=stream.readUint32()}this.entries=[];var entry_count=stream.readUint32();for(var i=0;i>6;this.sample_depends_on[i]=tmp_byte>>4&3;this.sample_is_depended_on[i]=tmp_byte>>2&3;this.sample_has_redundancy[i]=tmp_byte&3}};BoxParser.sgpdBox.prototype.parse=function(stream){this.parseFullHeader(stream);this.grouping_type=stream.readString(4);Log.debug("BoxParser","Found Sample Groups of type "+this.grouping_type);if(this.version===1){this.default_length=stream.readUint32()}if(this.version>=2){this.default_sample_description_index=stream.readUint32()}this.entries=[];var entry_count=stream.readUint32();for(var i=0;i>31&1;ref.referenced_size=tmp_32&2147483647;ref.subsegment_duration=stream.readUint32();tmp_32=stream.readUint32();ref.starts_with_SAP=tmp_32>>31&1;ref.SAP_type=tmp_32>>28&7;ref.SAP_delta_time=tmp_32&268435455}};BoxParser.SingleItemTypeReferenceBox=function(type,size,hdr_size,start){BoxParser.Box.call(this,type,size);this.hdr_size=hdr_size;this.start=start};BoxParser.SingleItemTypeReferenceBox.prototype=new BoxParser.Box;BoxParser.SingleItemTypeReferenceBox.prototype.parse=function(stream){this.from_item_ID=stream.readUint16();var count=stream.readUint16();this.references=[];for(var i=0;i0){for(j=0;jreadBytes&&this.flags&BoxParser.TFHD_FLAG_BASE_DATA_OFFSET){this.base_data_offset=stream.readUint64();readBytes+=8}else{this.base_data_offset=0}if(this.size-this.hdr_size>readBytes&&this.flags&BoxParser.TFHD_FLAG_SAMPLE_DESC){this.default_sample_description_index=stream.readUint32();readBytes+=4}else{this.default_sample_description_index=0}if(this.size-this.hdr_size>readBytes&&this.flags&BoxParser.TFHD_FLAG_SAMPLE_DUR){this.default_sample_duration=stream.readUint32();readBytes+=4}else{this.default_sample_duration=0}if(this.size-this.hdr_size>readBytes&&this.flags&BoxParser.TFHD_FLAG_SAMPLE_SIZE){this.default_sample_size=stream.readUint32();readBytes+=4}else{this.default_sample_size=0}if(this.size-this.hdr_size>readBytes&&this.flags&BoxParser.TFHD_FLAG_SAMPLE_FLAGS){this.default_sample_flags=stream.readUint32();readBytes+=4}else{this.default_sample_flags=0}};BoxParser.tfraBox.prototype.parse=function(stream){this.parseFullHeader(stream);this.track_ID=stream.readUint32();stream.readUint24();var tmp_byte=stream.readUint8();this.length_size_of_traf_num=tmp_byte>>4&3;this.length_size_of_trun_num=tmp_byte>>2&3;this.length_size_of_sample_num=tmp_byte&3;this.entries=[];var number_of_entries=stream.readUint32();for(var i=0;i>8;stream.readUint16();this.matrix=stream.readInt32Array(9);this.width=stream.readUint32();this.height=stream.readUint32()};BoxParser.tmaxBox.prototype.parse=function(stream){this.time=stream.readUint32()};BoxParser.tminBox.prototype.parse=function(stream){this.time=stream.readUint32()};BoxParser.totlBox.prototype.parse=function(stream){this.bytessent=stream.readUint32()};BoxParser.tpayBox.prototype.parse=function(stream){this.bytessent=stream.readUint32()};BoxParser.tpylBox.prototype.parse=function(stream){this.bytessent=stream.readUint64()};BoxParser.trefBox.prototype.parse=function(stream){var ret;var box;while(stream.getPosition()readBytes&&this.flags&BoxParser.TRUN_FLAGS_DATA_OFFSET){this.data_offset=stream.readInt32();readBytes+=4}else{this.data_offset=0}if(this.size-this.hdr_size>readBytes&&this.flags&BoxParser.TRUN_FLAGS_FIRST_FLAG){this.first_sample_flags=stream.readUint32();readBytes+=4}else{this.first_sample_flags=0}this.sample_duration=[];this.sample_size=[];this.sample_flags=[];this.sample_composition_time_offset=[];if(this.size-this.hdr_size>readBytes){for(var i=0;i0){this.location=stream.readCString()}};BoxParser.vttCBox.prototype.parse=function(stream){this.text=stream.readString(this.size-this.hdr_size)};BoxParser.Box.prototype.writeHeader=function(stream,msg){this.size+=8;if(this.size>MAX_SIZE){this.size+=8}Log.debug("BoxWriter","Writing box "+this.type+" of size: "+this.size+" at position "+stream.getPosition()+(msg||""));if(this.size>MAX_SIZE){stream.writeUint32(1)}else{this.sizePosition=stream.getPosition();stream.writeUint32(this.size)}stream.writeString(this.type,null,4);if(this.size>MAX_SIZE){stream.writeUint64(this.size)}};BoxParser.FullBox.prototype.writeHeader=function(stream){this.size+=4;BoxParser.Box.prototype.writeHeader.call(this,stream," v="+this.version+" f="+this.flags);stream.writeUint8(this.version);stream.writeUint24(this.flags)};BoxParser.Box.prototype.write=function(stream){if(this.type==="mdat"){if(this.data){this.size=this.data.length;this.writeHeader(stream);stream.writeUint8Array(this.data)}}else{this.size=this.data.length;this.writeHeader(stream);stream.writeUint8Array(this.data)}};BoxParser.ContainerBox.prototype.write=function(stream){this.size=0;this.writeHeader(stream);for(var i=0;i=2){stream.writeUint32(this.default_sample_description_index)}stream.writeUint32(this.entries.length);for(i=0;i=width?n:new Array(width-n.length+1).join(z)+n}function secToTimestamp(insec){var h=Math.floor(insec/3600);var m=Math.floor((insec-h*3600)/60);var s=Math.floor(insec-h*3600-m*60);var ms=Math.floor((insec-h*3600-m*60-s)*1e3);return""+pad(h,2)+":"+pad(m,2)+":"+pad(s,2)+"."+pad(ms,3)}var cues=this.parseSample(data);var string="";for(var i=0;i "+secToTimestamp(endTime)+"\r\n";string+=cueIn4.payl.text}return string};var XMLSubtitlein4Parser=function(){};XMLSubtitlein4Parser.prototype.parseSample=function(sample){var res={};var i;res.resources=[];var stream=new MP4BoxStream(sample.data.buffer);if(!sample.subsamples||sample.subsamples.length===0){res.documentString=stream.readString(sample.data.length)}else{res.documentString=stream.readString(sample.subsamples[0].size);if(sample.subsamples.length>1){for(i=1;ilast_sample_in_stts_run){stts_run_index++;if(last_sample_in_stts_run<0){last_sample_in_stts_run=0}last_sample_in_stts_run+=stts.sample_counts[stts_run_index]}if(j>0){trak.samples[j-1].duration=stts.sample_deltas[stts_run_index];sample.dts=trak.samples[j-1].dts+trak.samples[j-1].duration}else{sample.dts=0}if(ctts){if(j>=last_sample_in_ctts_run){ctts_run_index++;if(last_sample_in_ctts_run<0){last_sample_in_ctts_run=0}last_sample_in_ctts_run+=ctts.sample_counts[ctts_run_index]}sample.cts=trak.samples[j].dts+ctts.sample_offsets[ctts_run_index]}else{sample.cts=sample.dts}if(stss){if(j==stss.sample_numbers[last_stss_index]-1){sample.is_rap=true;last_stss_index++}else{sample.is_rap=false}}else{sample.is_rap=true}if(subs){if(subs.samples[subs_entry_index].sample_delta+last_subs_sample_index==j){sample.subsamples=subs.samples[subs_entry_index].subsamples;last_subs_sample_index+=subs.samples[subs_entry_index].sample_delta}}}if(j>0)trak.samples[j-1].duration=Math.max(trak.mdia.mdhd.duration-trak.samples[j-1].dts,0)}};ISOFile.prototype.updateSampleLists=function(){var i,j,k;var default_sample_description_index,default_sample_duration,default_sample_size,default_sample_flags;var last_run_position;var box,moof,traf,trak,trex;var sample;var sample_flags;if(this.moov===undefined){return}while(this.lastMoofIndex0){sample.dts=trak.samples[trak.samples.length-2].dts+trak.samples[trak.samples.length-2].duration}else{if(traf.tfdt){sample.dts=traf.tfdt.baseMediaDecodeTime}else{sample.dts=0}trak.first_traf_merged=true}sample.cts=sample.dts;if(trun.flags&BoxParser.TRUN_FLAGS_CTS_OFFSET){sample.cts=sample.dts+trun.sample_composition_time_offset[k]}sample_flags=default_sample_flags;if(trun.flags&BoxParser.TRUN_FLAGS_FLAGS){sample_flags=trun.sample_flags[k]}else if(k===0&&trun.flags&BoxParser.TRUN_FLAGS_FIRST_FLAG){sample_flags=trun.first_sample_flags}sample.is_rap=sample_flags>>16&1?false:true;var bdop=traf.tfhd.flags&BoxParser.TFHD_FLAG_BASE_DATA_OFFSET?true:false;var dbim=traf.tfhd.flags&BoxParser.TFHD_FLAG_DEFAULT_BASE_IS_MOOF?true:false;var dop=trun.flags&BoxParser.TRUN_FLAGS_DATA_OFFSET?true:false;var bdo=0;if(!bdop){if(!dbim){if(j===0){bdo=moof.start}else{bdo=last_run_position}}else{bdo=moof.start}}else{bdo=traf.tfhd.base_data_offset}if(j===0&&k===0){if(dop){sample.offset=bdo+trun.data_offset}else{sample.offset=bdo}}else{sample.offset=last_run_position}last_run_position=sample.offset+sample.size}}if(traf.subs){var sample_index=traf.first_sample_index;for(j=0;j-1){buffer=this.stream.buffers[index];var lengthAfterStart=buffer.byteLength-(sample.offset+sample.alreadyRead-buffer.fileStart);if(sample.size-sample.alreadyRead<=lengthAfterStart){Log.debug("ISOFile","Getting sample #"+sampleNum+" data (alreadyRead: "+sample.alreadyRead+" offset: "+(sample.offset+sample.alreadyRead-buffer.fileStart)+" read size: "+(sample.size-sample.alreadyRead)+" full size: "+sample.size+")");DataStream.memcpy(sample.data.buffer,sample.alreadyRead,buffer,sample.offset+sample.alreadyRead-buffer.fileStart,sample.size-sample.alreadyRead);buffer.usedBytes+=sample.size-sample.alreadyRead;this.stream.logBufferLevel();sample.alreadyRead=sample.size;return sample}else{Log.debug("ISOFile","Getting sample #"+sampleNum+" partial data (alreadyRead: "+sample.alreadyRead+" offset: "+(sample.offset+sample.alreadyRead-buffer.fileStart)+" read size: "+lengthAfterStart+" full size: "+sample.size+")");DataStream.memcpy(sample.data.buffer,sample.alreadyRead,buffer,sample.offset+sample.alreadyRead-buffer.fileStart,lengthAfterStart);sample.alreadyRead+=lengthAfterStart;buffer.usedBytes+=lengthAfterStart;this.stream.logBufferLevel();return null}}else{return null}};ISOFile.prototype.releaseSample=function(trak,sampleNum){var sample=trak.samples[sampleNum];if(sample.data){this.samplesDataSize-=sample.size;sample.data=null;sample.alreadyRead=0;return sample.size}else{return 0}};ISOFile.prototype.getAllocatedSampleDataSize=function(){return this.samplesDataSize};ISOFile.prototype.getCodecs=function(){var i;var codecs="";for(i=0;i0){codecs+=","}codecs+=trak.mdia.minf.stbl.stsd.entries[0].getCodec()}return codecs};ISOFile.prototype.getTrexById=function(id){var i;if(!this.moov||!this.moov.mvex)return null;for(i=0;i0){item.protection=meta.ipro.protections[meta.iinf.item_infos[i].protection_index-1]}if(meta.iinf.item_infos[i].item_type){item.type=meta.iinf.item_infos[i].item_type}else{item.type="mime"}item.content_type=meta.iinf.item_infos[i].content_type;item.content_encoding=meta.iinf.item_infos[i].content_encoding}if(meta.iloc){for(i=0;i-1){buffer=this.stream.buffers[index];var lengthAfterStart=buffer.byteLength-(extent.offset+extent.alreadyRead-buffer.fileStart);if(extent.length-extent.alreadyRead<=lengthAfterStart){Log.debug("ISOFile","Getting item #"+item_id+" extent #"+i+" data (alreadyRead: "+extent.alreadyRead+" offset: "+(extent.offset+extent.alreadyRead-buffer.fileStart)+" read size: "+(extent.length-extent.alreadyRead)+" full extent size: "+extent.length+" full item size: "+item.size+")");DataStream.memcpy(item.data.buffer,item.alreadyRead,buffer,extent.offset+extent.alreadyRead-buffer.fileStart,extent.length-extent.alreadyRead);buffer.usedBytes+=extent.length-extent.alreadyRead;this.stream.logBufferLevel();extent.alreadyRead=extent.length;item.alreadyRead+=extent.length}else{Log.debug("ISOFile","Getting item #"+item_id+" extent #"+i+" partial data (alreadyRead: "+extent.alreadyRead+" offset: "+(extent.offset+extent.alreadyRead-buffer.fileStart)+" read size: "+lengthAfterStart+" full extent size: "+extent.length+" full item size: "+item.size+")");DataStream.memcpy(item.data.buffer,item.alreadyRead,buffer,extent.offset+extent.alreadyRead-buffer.fileStart,lengthAfterStart);extent.alreadyRead+=lengthAfterStart;item.alreadyRead+=lengthAfterStart;buffer.usedBytes+=lengthAfterStart;this.stream.logBufferLevel();return null}}else{return null}}}if(item.alreadyRead===item.size){return item}else{return null}};ISOFile.prototype.releaseItem=function(item_id){var item=this.items[item_id];if(item.data){this.itemsDataSize-=item.size;item.data=null;item.alreadyRead=0;for(var i=0;i-1){this.moov.boxes.splice(index,1)}this.moov.mvex=null}this.moov.mvex=new BoxParser.mvexBox;this.moov.boxes.push(this.moov.mvex);this.moov.mvex.mehd=new BoxParser.mehdBox;this.moov.mvex.boxes.push(this.moov.mvex.mehd);this.moov.mvex.mehd.fragment_duration=this.initial_duration;for(i=0;i0?this.moov.traks[i].samples[0].duration:0;trex.default_sample_size=0;trex.default_sample_flags=1<<16}this.moov.write(outstream)};var MP4Box=function(_keepMdatData,_parseForWrite){this.inputStream=new MultiBufferStream;this.keepMdatData=_keepMdatData!==undefined?_keepMdatData:true;this.parseForWrite=_parseForWrite!==undefined?_parseForWrite:true;this.inputIsoFile=new ISOFile(this.inputStream);this.inputIsoFile.discardMdatData=this.keepMdatData?false:true;this.onMoovStart=null;this.moovStartSent=false;this.onReady=null;this.readySent=false;this.onSegment=null;this.onSamples=null;this.onError=null;this.sampleListBuilt=false;this.fragmentedTracks=[];this.extractedTracks=[];this.isFragmentationInitialized=false;this.sampleProcessingStarted=false;this.nextMoofNumber=0;this.itemListBuilt=false};MP4Box.prototype.setSegmentOptions=function(id,user,options){var trak=this.inputIsoFile.getTrackById(id);if(trak){var fragTrack={};this.fragmentedTracks.push(fragTrack);fragTrack.id=id;fragTrack.user=user;fragTrack.trak=trak;trak.nextSample=0;fragTrack.segmentStream=null;fragTrack.nb_samples=1e3;fragTrack.rapAlignement=true;if(options){if(options.nbSamples)fragTrack.nb_samples=options.nbSamples;if(options.rapAlignement)fragTrack.rapAlignement=options.rapAlignement;if(options.ownMvhdSeq)fragTrack.ownMvhdSeq=options.ownMvhdSeq;if(options.removeCtts)fragTrack.removeCtts=options.removeCtts}}};MP4Box.prototype.unsetSegmentOptions=function(id){var index=-1;for(var i=0;i-1){this.fragmentedTracks.splice(index,1)}};MP4Box.prototype.setExtractionOptions=function(id,user,options){var trak=this.inputIsoFile.getTrackById(id);if(trak){var extractTrack={};this.extractedTracks.push(extractTrack);extractTrack.id=id;extractTrack.user=user;extractTrack.trak=trak;trak.nextSample=0;extractTrack.nb_samples=1e3;extractTrack.samples=[];if(options){if(options.nbSamples)extractTrack.nb_samples=options.nbSamples}}};MP4Box.prototype.unsetExtractionOptions=function(id){var index=-1;for(var i=0;i-1){this.extractedTracks.splice(index,1)}};MP4Box.prototype.createSingleSampleMoof=function(sample){var moof=new BoxParser.moofBox;var mfhd=new BoxParser.mfhdBox;var nextMoofNumber;for(var i=0;i=trak.samples.length){Log.info("MP4Box","Sending fragmented data on track #"+fragTrak.id+" for samples ["+Math.max(0,trak.nextSample-fragTrak.nb_samples)+","+(trak.nextSample-1)+"]");Log.info("MP4Box","Sample data size in memory: "+this.inputIsoFile.getAllocatedSampleDataSize());if(this.onSegment){this.onSegment(fragTrak.id,fragTrak.user,fragTrak.segmentStream.buffer,trak.nextSample)}fragTrak.segmentStream=null;if(fragTrak!==this.fragmentedTracks[i]){break}}}}}if(this.onSamples!==null){for(i=0;i=trak.samples.length){Log.debug("MP4Box","Sending samples on track #"+extractTrak.id+" for sample "+trak.nextSample);if(this.onSamples){this.onSamples(extractTrak.id,extractTrak.user,extractTrak.samples)}extractTrak.samples=[];if(extractTrak!==this.extractedTracks[i]){break}}}}}};MP4Box.prototype.checkBuffer=function(ab){if(ab===null||ab===undefined){throw"Buffer must be defined and non empty"}if(ab.fileStart===undefined){throw"Buffer must have a fileStart property"}if(ab.byteLength===0){Log.warn("MP4Box","Ignoring empty buffer (fileStart: "+ab.fileStart+")");this.inputStream.logBufferLevel();return false}Log.info("MP4Box","Processing buffer (fileStart: "+ab.fileStart+")");ab.usedBytes=0;this.inputStream.insertBuffer(ab);this.inputStream.logBufferLevel();if(!this.inputStream.initialized()){Log.warn("MP4Box","Not ready to start parsing");return false}return true};MP4Box.prototype.appendBuffer=function(ab){var nextFileStart;if(this.checkBuffer){if(!this.checkBuffer(ab)){return}}this.inputIsoFile.parse(this.parseForWrite);if(this.inputIsoFile.moovStartFound&&!this.moovStartSent){this.moovStartSent=true;if(this.onMoovStart)this.onMoovStart()}if(this.inputIsoFile.moov){if(this.processSamples){if(!this.sampleListBuilt){this.inputIsoFile.buildSampleLists();this.sampleListBuilt=true}this.inputIsoFile.updateSampleLists()}if(this.onReady&&!this.readySent){this.readySent=true;this.onReady(this.getInfo())}if(this.processSamples){this.processSamples()}if(this.nextSeekPosition){nextFileStart=this.nextSeekPosition;this.nextSeekPosition=undefined}else{nextFileStart=this.inputIsoFile.nextParsePosition}if(this.inputStream.getEndFilePositionAfter){nextFileStart=this.inputStream.getEndFilePositionAfter(nextFileStart)}}else{if(this.inputIsoFile!==null){nextFileStart=this.inputIsoFile.nextParsePosition}else{nextFileStart=0}}if(this.inputIsoFile.meta){if(this.inputIsoFile.flattenItemInfo&&!this.itemListBuilt){this.inputIsoFile.flattenItemInfo();this.itemListBuilt=true}if(this.inputIsoFile.processItems){this.inputIsoFile.processItems(this.onItem)}}if(this.inputStream.cleanBuffers){Log.info("MP4Box","Done processing buffer (fileStart: "+ab.fileStart+") - next buffer to fetch should have a fileStart position of "+nextFileStart);this.inputStream.logBufferLevel();this.inputStream.cleanBuffers();this.inputStream.logBufferLevel(true);Log.info("MP4Box","Sample data size in memory: "+this.inputIsoFile.getAllocatedSampleDataSize())}return nextFileStart};MP4Box.prototype.getInfo=function(){var i,j;var movie={};var trak;var track;var sample_desc;var _1904=new Date(4,0,1,0,0,0,0).getTime();movie.duration=this.inputIsoFile.moov.mvhd.duration;movie.timescale=this.inputIsoFile.moov.mvhd.timescale;movie.isFragmented=this.inputIsoFile.moov.mvex!=null;if(movie.isFragmented&&this.inputIsoFile.moov.mvex.mehd){movie.fragment_duration=this.inputIsoFile.moov.mvex.mehd.fragment_duration}else{movie.fragment_duration=0}movie.isProgressive=this.inputIsoFile.isProgressive;movie.hasIOD=this.inputIsoFile.moov.iods!=null;movie.brands=[];movie.brands.push(this.inputIsoFile.ftyp.major_brand);movie.brands=movie.brands.concat(this.inputIsoFile.ftyp.compatible_brands);movie.created=new Date(_1904+this.inputIsoFile.moov.mvhd.creation_time*1e3);movie.modified=new Date(_1904+this.inputIsoFile.moov.mvhd.modification_time*1e3);movie.tracks=[];movie.audioTracks=[];movie.videoTracks=[];movie.subtitleTracks=[];movie.metadataTracks=[];movie.hintTracks=[];movie.otherTracks=[];for(i=0;itime*sample.timescale){seek_sample_num=j-1;break}if(useRap&&sample.is_rap){rap_seek_sample_num=j}}if(useRap){seek_sample_num=rap_seek_sample_num}time=trak.samples[seek_sample_num].cts;trak.nextSample=seek_sample_num;while(trak.samples[seek_sample_num].alreadyRead===trak.samples[seek_sample_num].size){seek_sample_num++}seek_offset=trak.samples[seek_sample_num].offset+trak.samples[seek_sample_num].alreadyRead;Log.info("MP4Box","Seeking to "+(useRap?"RAP":"")+" sample #"+trak.nextSample+" on track "+trak.tkhd.track_id+", time "+Log.getDurationString(time,timescale)+" and offset: "+seek_offset);return{offset:seek_offset,time:time/timescale}};MP4Box.prototype.freeBuffers=function(){this.nextBuffers=[];this.inputStream.nextBuffers=this.nextBuffers};MP4Box.prototype.seek=function(time,useRap){var moov=this.inputIsoFile.moov;var trak;var trak_seek_info;var i;var seek_info={offset:Infinity,time:Infinity};if(!this.inputIsoFile.moov){throw"Cannot seek: moov not received!"}else{this.freeBuffers();for(i=0;i-1};this.trigger=function(type){var callbacks,i,length,args;callbacks=listeners[type];if(!callbacks){return}callbacks=callbacks.slice(0);if(arguments.length===2){length=callbacks.length;for(i=0;i>24&255,tp>>16&255,tp>>8&255,tp&255)}function getUint64(view,ptr){return view.getUint32(ptr+4)+view.getUint32(ptr)*4294967296}function getInt64(view,ptr){var hib=view.getUint8(ptr);if(hib<128)return getUint64(view,ptr);return view.getUint32(ptr+4)+4294967296*(view.getUint32(ptr)-4294967296)}var sample_type={vide:"video",soun:"audio"};var full_box=["meta","mvhd","tkhd","mdhd","smhd","vmhd","dref","hdlr","stsd","esds","stts","stps","stss","ctts","stsc","stsz","stco","esds","elst","nmhd","cslg","sdtp","co64"];var raw_copy=["udta","smhd","vmhd","dref","iods","btrt","pasp","clap","uuid","colr","sbgp","sgpd","gmhd","tref","nmhd","svcC","hmhd","wide","fiel","tapt","load","meta","sefd","beam"];var containers={trak:{name:"track_info",multi:1},edts:{name:"edit_list"},exts:{name:"edit_list"},mdia:{name:"media_box"},minf:{name:"media_info"},dinf:{name:"data_info"},stbl:{name:"sample_table"}};var Box_parser=function(){};Box_parser.prototype={};Box_parser.prototype.header=function(opt){while(opt.ptr+opt.buffer.b_pos>=opt.branch.last){if(opt.branch._id=="movie_box")opt.root.h_parsed=true;opt.branch=opt.branch.parent}opt.type=null;opt.offset=8;if(opt.buffer.b_size-opt.ptr<8)return opt.offset=0;opt.size=opt.view.getUint32(opt.ptr);if(opt.size==1){opt.offset=16;if(opt.buffer.b_size-opt.ptr<16)return opt.offset=0;opt.size=(opt.view.getUint32(opt.ptr+8)<<32)+opt.view.getUint32(opt.ptr+12)}opt.type=int_to_str(opt.view.getUint32(opt.ptr+4));if(full_box.includes(opt.type)){opt.offset+=4;if(opt.buffer.b_size-opt.ptr>>24;opt.flags=extra&&16777215}opt.size-=opt.offset;opt.ptr+=opt.offset};Box_parser.prototype.parse=function(opt){if(!this[opt.type])throw new Error("Unknown box type: "+opt.type);this[opt.type](opt)};raw_copy.forEach(function(cont){Box_parser.prototype[cont]=function(opt){var data=opt.branch[cont]=new Uint8Array(opt.size);data.set(opt.buffer._buff.subarray(opt.ptr,opt.ptr+opt.size))}});Object.keys(containers).forEach(function(cont){Box_parser.prototype[cont]=function(opt){var elm=containers[cont];opt.branch[elm.name]=opt.branch[elm.name]||(elm.multi?[]:{});var new_branch=opt.branch[elm.name];if(elm.multi){new_branch.push({});new_branch=new_branch[new_branch.length-1]}new_branch.parent=opt.branch;new_branch.last=opt.buffer.b_pos+opt.ptr+opt.size;new_branch._id=elm.name;opt.branch=new_branch;opt.size=0}});Box_parser.prototype.moov=function(opt){var new_branch=opt.branch.movie_box=opt.branch.movie_box||{};new_branch.parent=opt.branch;new_branch.last=opt.buffer.b_pos+opt.ptr+opt.size;new_branch._id="movie_box";if(opt.buffer.b_pos<256)opt.branch.start_hdr_sz=opt.size;else opt.branch.end_hdr_sz=opt.size;opt.branch=new_branch;opt.size=0};function get_hd_times(opt){var view=opt.view,ptr=opt.ptr,is_tk=opt.type=="tkhd";if(!opt.ver){return[view.getUint32(ptr),view.getUint32(ptr+4),view.getUint32(ptr+8),view.getUint32(ptr+(is_tk?16:12))]}return[getUint64(view,ptr),getUint64(view,ptr+8),view.getUint32(ptr+16),getUint64(view,ptr+(is_tk?24:20))]}function get_table(view,ptr,cnt,tbl){for(var i=0;i>10|96,lang>>5&31|96,lang&31|96)};Box_parser.prototype.elst=function(opt){var view=opt.view,ptr=opt.ptr+4;var count=view.getUint32(opt.ptr);opt.branch.list=[];for(var i=0;i>6&2)+(flags>>4&2);break;case 4:elm.obj_t=view.getUint8(ptr);elm.str_t=view.getUint8(ptr+1)&63;ptr+=13;break;case 5:var asc=view.getUint16(ptr);elm.aot=asc>>11&31;if(elm.aot==31){elm.aot=32+(asc>>5&63);asc<<=6}elm.freq=asc>>7&15;if(elm.freq==15){asc=view.getUint32(ptr+1);if(aot<31)elm.freq=asc>>7&16777215;else{elm.freq=asc>>2&16777215;asc=view.getUint16(ptr+4)>>3}}elm.channel=asc>>3&15;ptr+=sz;break;default:ptr+=sz}}};Box_parser.prototype.stsd=function(opt){var view=opt.view,count=view.getUint32(opt.ptr);var handler=opt.branch.parent.parent.handler,i,j;opt.branch.list={};opt.ptr+=4;for(i=0;i>2&3,dep:bt>>4&3,lead:bt>>6&3}}};Box_parser.prototype.stsz=function(opt){var size=opt.view.getUint32(opt.ptr);opt.branch.s_sz=[];opt.branch.s_count=opt.view.getUint32(opt.ptr+4);if(!size)get_table(opt.view,opt.ptr+8,opt.branch.s_count,opt.branch.s_sz);else{for(var i=0;i>>1,dr.esds.freq<<7|dr.esds.channel<<3])}else{event_elm.codec="avc1."+byte_to_hex(dr.avcc.avc_p_i)+byte_to_hex(dr.avcc.prof_compat)+byte_to_hex(dr.avcc.avc_l_i);var info=[1,dr.avcc.avc_p_i,dr.avcc.avc_prof_compat,dr.avcc.avc_l_i,255,dr.avcc.sps.length+224];dr.avcc.sps.forEach(function(e){info=info.concat([e.nal.length>>8,e.nal.length&255]);Array.prototype.push.apply(info,e.nal)});info.push(dr.avcc.pps.length);dr.avcc.pps.forEach(function(e){info=info.concat([e.nal.length>>8,e.nal.length&255]);Array.prototype.push.apply(info,e.nal)});event_elm.s_i=new Uint8Array(info)}if(event_elm.edit_list){event_elm.edit_list.forEach(function(e){if(elm.type!="soun")e.media_time=Math.floor(e.media_time*9e4/elm.ts);e.segment_duration=Math.floor(e.segment_duration*9e4/opt.root.movie_box.mv_hdr.time_scale)})}if(event_elm.cslg){for(var k in event_elm.cslg)event_elm.cslg[k]=Math.floor(event_elm.cslg[k]*9e4/elm.ts)}event.tracks.push(event_elm)});opt.stream.trigger("data",event)};Chunk_parser.prototype.parse=function(opt){if(!this.s_info)this.process(opt);var b_start=opt.buffer.b_pos;var b_end=opt.buffer.b_size+b_start;var pc=-1,max_dcd=0,i;var v_fin=false;while(pc){pc=0;for(i=0;i=b_start&&pos+sz<=b_end){this.s_p[i].s++;pc++;var sample={trackId:sinfo.id};sample.type=sample_type[sinfo.type];sample.dts=time[sn];sample.pts=sample.dts+(sinfo.s_ctts[sn]||0);sample.duration=sn==time.length-1?time[sn]-time[sn-1]:time[sn+1]-time[sn];sample.size=sz;this.s_p[i].max_t=sample.dts/sinfo.ts;sample.data=opt.buffer._buff.subarray(pos-b_start,pos+sz-b_start);sample.dr=sinfo.s_list[sinfo.s_dri[sn]];sample.ts=sinfo.ts;sample.synced=!sinfo.s_sync.length||sinfo.s_sync.includes(sn+1);sample.sn=sn;sample.dep=sinfo.s_dep[sn];if(sinfo.type=="vide"&&(this.break_on_count?!(sn%this.frag_size):sn&&sample.synced)){opt.stream.flush()}opt.stream.trigger("data",sample);max_dcd=pos+sz-b_start}else if(pos+sz>b_end&&i==this.v_idx)v_fin=true}}if(max_dcd)opt.buffer.advance(max_dcd);var new_pos=Infinity;for(i=0;i=b_start&&new_pos0;var i_soun=elm.type=="soun";var scale=elm.ts/9e4;l=0;r=i_ss?elm.s_sync.length-1:elm.s_time.length-1;tt=Math.floor(target*scale);while(l>1;sn=i_ss?elm.s_sync[m]-1:m;if((m_time=elm.s_time[sn]+(elm.s_ctts[sn]|0))>tt)r=m;else{l=m;if(m_time==tt)break}}var res_sn=i_ss?elm.s_sync[l]-1:l;tt=m_time=elm.s_time[res_sn]+(elm.s_ctts[res_sn]|0);if(!i_ss&&elm.s_ctts.length){for(sn=l-1;sn>l-10;sn--){if(elm.s_time[sn]+(elm.s_ctts[sn]|0)>tt)res_sn=sn}for(sn=res_sn;sn((elm.s_cslg&&elm.s_cslg.min_ctts)|0)&&m_timethis._buff.length){_newbuff=new Uint8Array(2*this._buff.length);_newbuff.set(this._buff);this._buff=_newbuff}if(this.pos=this.b_pos){_newbuff=new Uint8Array(Math.max(this.pos+c_len,this.b_pos+this.b_size)-Math.min(this.pos,this.b_pos));if(this.pos<=this.b_pos){_newbuff.set(chunk);if(this.pos+c_lenthis.buffer.b_size)break;this.b_parser.parse(opt);opt.ptr+=opt.size}if(this.metadata.h_parsed)this.buffer.pos=this.c_parser.parse(opt);else{this.buffer.advance(opt.ptr-opt.offset);this.buffer.pos=opt.type=="mdat"?opt.ptr+opt.size:this.buffer.b_pos+this.buffer.b_size}return this.buffer.pos};MP4ParserStream.prototype.seek=function(time,use_ssync){this.trigger("data",{type:"seek"});var seek_info=this.c_parser.seek(time,use_ssync);this.buffer.pos=seek_info.offset;return seek_info};var AudioFilterStream=function(){if(!(this instanceof AudioFilterStream))return new AudioFilterStream;AudioFilterStream.prototype.init.call(this)};AudioFilterStream.prototype=new window.muxjs.Stream;AudioFilterStream.prototype.constructor=AudioFilterStream;AudioFilterStream.prototype.push=function(packet){if(packet.type!="audio")return;var scale=9e4/packet.ts;packet.pts=Math.floor(packet.pts*scale);packet.dts=Math.floor(packet.dts*scale);this.trigger("data",{type:"audio",samplerate:packet.dr.s_rate,samplesize:packet.dr.s_size,audioobjecttype:packet.dr.esds.aot,samplingfrequencyindex:packet.dr.esds.freq,channelcount:packet.dr.esds.channel,ts:packet.ts,dts:packet.dts,pts:packet.pts,data:new Uint8Array(packet.data)})};var VideoFilterStream=function(){if(!(this instanceof VideoFilterStream))return new VideoFilterStream;VideoFilterStream.prototype.init.call(this);this.synced=false;this.au=new Uint8Array([9,240])};VideoFilterStream.prototype=new window.muxjs.Stream;VideoFilterStream.prototype.constructor=VideoFilterStream;VideoFilterStream.prototype.flush=function(){this.dr=null;this.synced=false;this.trigger("done")};VideoFilterStream.prototype.push=function(packet){if(packet.type!="video")return;var pos=0,i;var view=new DataView(packet.data.buffer,packet.data.byteOffset,packet.data.byteLength);var scale=9e4/packet.ts;packet.pts=Math.floor(packet.pts*scale);packet.dts=Math.floor(packet.dts*scale);this.trigger("data",{trackId:packet.trackId,pts:packet.pts,dts:packet.dts,data:this.au,nalUnitType:"access_unit_delimiter_rbsp"});if(this.dr!=packet.dr||!this.synced){this.dr=packet.dr;if(this.dr.avcc.n_sps){for(i=0;i>>24&255,num>>>16&255,num>>>8&255,num&255]}function uint16_to_arr(num){return[num>>>8&255,num&255]}box=function(type){var payload=[],size=0,i,result,view;for(i=1;i>>0;return box(types.cslg,new Uint8Array([0,0,0,0,obj.ctts_shift>>>24&255,obj.ctts_shift>>>16&255,obj.ctts_shift>>>8&255,obj.ctts_shift&255,obj.min_ctts>>>24&255,obj.min_ctts>>>16&255,obj.min_ctts>>>8&255,obj.min_ctts&255,obj.max_ctts>>>24&255,obj.max_ctts>>>16&255,obj.max_ctts>>>8&255,obj.max_ctts&255,obj.min_cts>>>24&255,obj.min_cts>>>16&255,obj.min_cts>>>8&255,obj.min_cts&255,obj.max_cts>>>24&255,obj.max_cts>>>16&255,obj.max_cts>>>8&255,obj.max_cts&255]))};dinf=function(){return box(types.dinf,box(types.dref,DREF))};edts=function(track){return box(types.edts,elst(track))};elst=function(track){var count=track.edit_list.length,i;var bytes=[0,0,0,0].concat(uint32_to_arr(count));for(i=0;i>>1,track.samplingfrequencyindex<<7|track.channelcount<<3,6,1,2]))};ftyp=function(opt){opt=opt||{};var params=opt.compatible||[MAJOR_BRAND,AVC1_BRAND];params=params.slice(0);params.unshift(types.ftyp,opt.major||MAJOR_BRAND,MINOR_VERSION);return box.apply(null,params)};hdlr=function(type){return box(types.hdlr,HDLR_TYPES[type])};mdat=function(data){return box(types.mdat,data)};mdhd=function(track){var result=new Uint8Array([0,0,0,0,0,0,0,2,0,0,0,3,0,1,95,144,track.duration>>>24&255,track.duration>>>16&255,track.duration>>>8&255,track.duration&255,85,196,0,0]);if(track.samplerate){result[12]=track.samplerate>>>24&255;result[13]=track.samplerate>>>16&255;result[14]=track.samplerate>>>8&255;result[15]=track.samplerate&255}return box(types.mdhd,result)};mdia=function(track){return box(types.mdia,mdhd(track),hdlr(track.type),minf(track))};mfhd=function(sequenceNumber){return box(types.mfhd,new Uint8Array([0,0,0,0,(sequenceNumber&4278190080)>>24,(sequenceNumber&16711680)>>16,(sequenceNumber&65280)>>8,sequenceNumber&255]))};minf=function(track){return box(types.minf,track.type==="video"?box(types.vmhd,VMHD):box(types.smhd,SMHD),dinf(),stbl(track))};moof=function(sequenceNumber,tracks,opt){var trackFragments=[],i=tracks.length;opt=opt||{};while(i--){trackFragments[i]=traf(tracks[i],opt)}return box.apply(null,[types.moof,mfhd(sequenceNumber)].concat(trackFragments))};moov=function(tracks,opt){var i=tracks.length,boxes=[],duration=0;opt=opt||{};while(i--){boxes[i]=trak(tracks[i]);if(opt.set_duration)duration=Math.max(duration,Math.floor(tracks[i].duration*9e4/tracks[i].samplerate))}duration=opt.duration||duration||4294967295;return box.apply(null,[types.moov,mvhd(duration)].concat(boxes).concat(mvex(tracks)))};mvex=function(tracks){ var i=tracks.length,boxes=[];while(i--){boxes[i]=trex(tracks[i]);if(tracks[i].cslg&&tracks[i].cslg.max_cts)boxes.push(trep(tracks[i]))}return box.apply(null,[types.mvex].concat(boxes))};mvhd=function(duration){var bytes=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,2,0,1,95,144,(duration&4278190080)>>24,(duration&16711680)>>16,(duration&65280)>>8,duration&255,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]);return box(types.mvhd,bytes)};sdtp=function(track){var samples=track.samples||[],bytes=new Uint8Array(4+samples.length),flags,i;for(i=0;i>>8);sequenceParameterSets.push(sps[i].byteLength&255);sequenceParameterSets=sequenceParameterSets.concat(Array.prototype.slice.call(sps[i]))}for(i=0;i>>8);pictureParameterSets.push(pps[i].byteLength&255);pictureParameterSets=pictureParameterSets.concat(Array.prototype.slice.call(pps[i]))}return box(types.avc1,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,(track.width&65280)>>8,track.width&255,(track.height&65280)>>8,track.height&255,0,72,0,0,0,72,0,0,0,0,0,0,0,1,19,118,105,100,101,111,106,115,45,99,111,110,116,114,105,98,45,104,108,115,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),box(types.avcC,new Uint8Array([1,track.profileIdc,track.profileCompatibility,track.levelIdc,255].concat([sps.length|224]).concat(sequenceParameterSets).concat([pps.length]).concat(pictureParameterSets))),box(types.btrt,new Uint8Array([0,28,156,128,0,45,198,192,0,45,198,192])))};audioSample=function(track){return box(types.mp4a,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,(track.channelcount&65280)>>8,track.channelcount&255,(track.samplesize&65280)>>8,track.samplesize&255,0,0,0,0,(track.samplerate&65280)>>8,track.samplerate&255,0,0]),esds(track))}})();styp=function(){return box(types.styp,MAJOR_BRAND,MINOR_VERSION,MAJOR_BRAND)};tkhd=function(track){var duration=track.duration;if(track.samplerate){duration=Math.floor(duration*9e4/track.samplerate)}var result=new Uint8Array([0,0,0,7,0,0,0,0,0,0,0,0,(track.id&4278190080)>>24,(track.id&16711680)>>16,(track.id&65280)>>8,track.id&255,0,0,0,0,(track.duration&4278190080)>>24,(track.duration&16711680)>>16,(track.duration&65280)>>8,track.duration&255,0,0,0,0,0,0,0,0,0,0,0,0,+(track.type=="audio"),0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,(track.width&65280)>>8,track.width&255,0,0,(track.height&65280)>>8,track.height&255,0,0]);return box(types.tkhd,result)};traf=function(track,opt){var trackFragmentHeader,trackFragmentDecodeTime,trackFragmentRun,sampleDependencyTable,dataOffset;opt=opt||{};trackFragmentHeader=box(types.tfhd,new Uint8Array([0,opt.no_multi_init?2:0,0,58,(track.id&4278190080)>>24,(track.id&16711680)>>16,(track.id&65280)>>8,track.id&255,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0]));trackFragmentDecodeTime=box(types.tfdt,new Uint8Array([0,0,0,0,track.baseMediaDecodeTime>>>24&255,track.baseMediaDecodeTime>>>16&255,track.baseMediaDecodeTime>>>8&255,track.baseMediaDecodeTime&255]));dataOffset=32+16+8+16+8+8;if(track.type==="audio"){trackFragmentRun=trun(track,dataOffset);return box(types.traf,trackFragmentHeader,trackFragmentDecodeTime,trackFragmentRun)}sampleDependencyTable=sdtp(track);trackFragmentRun=trun(track,sampleDependencyTable.length+dataOffset);return box(types.traf,trackFragmentHeader,trackFragmentDecodeTime,trackFragmentRun,sampleDependencyTable)};trak=function(track){track.duration=track.duration||4294967295;var param=[types.trak,tkhd(track),mdia(track)];if(track.edit_list&&track.edit_list.length)param.splice(2,0,edts(track));return box.apply(null,param)};trep=function(track){return box(types.trep,new Uint8Array([0,0,0,0,(track.id&4278190080)>>24,(track.id&16711680)>>16,(track.id&65280)>>8,track.id&255]),cslg(track.cslg))};trex=function(track){var result=new Uint8Array([0,0,0,0,(track.id&4278190080)>>24,(track.id&16711680)>>16,(track.id&65280)>>8,track.id&255,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]);if(track.type!=="video"){result[result.length-1]=0}return box(types.trex,result)};trun=function(track,offset){function get_flags(sample){return("duration"in sample&&1)|("size"in sample&&2)|("flags"in sample&&4)|("compositionTimeOffset"in sample&&8)}function trun_header(samples,offset,flags,ver){return[ver,0,flags,1,(samples.length&4278190080)>>>24,(samples.length&16711680)>>>16,(samples.length&65280)>>>8,samples.length&255,(offset&4278190080)>>>24,(offset&16711680)>>>16,(offset&65280)>>>8,offset&255]}var samples=track.samples||[];var flags=get_flags(samples[0]||{});offset+=20+4*samples.length*((flags>>3&1)+(flags>>2&1)+(flags>>1&1)+(flags&1));var bytes=trun_header(samples,offset,flags);var was_neg=false;for(var i=0;i>24&255,sample.duration>>16&255,sample.duration>>8&255,sample.duration&255)}if(flags&2){bytes.push(sample.size>>24&255,sample.size>>16&255,sample.size>>8&255,sample.size&255)}if(flags&4){bytes.push(sample.flags.isLeading<<2|sample.flags.dependsOn,sample.flags.isDependedOn<<6|sample.flags.hasRedundancy<<4|sample.flags.paddingValue<<1|sample.flags.isNonSyncSample,sample.flags.degradationPriority>>8&255,sample.flags.degradationPriority&255)}if(flags&8){was_neg=was_neg||sample.compositionTimeOffset<0;bytes.push(sample.compositionTimeOffset>>24&255,sample.compositionTimeOffset>>16&255,sample.compositionTimeOffset>>8&255,sample.compositionTimeOffset&255)}}bytes[0]=+!!was_neg;return box(types.trun,new Uint8Array(bytes))};muxjs.mp4={ftyp:ftyp,mdat:mdat,moof:moof,moov:moov,initSegment:function(tracks,opt){var fileType=ftyp(opt),movie=moov(tracks,opt),result;result=new Uint8Array(fileType.byteLength+movie.byteLength);result.set(fileType);result.set(movie,fileType.byteLength);return result}}})(this,this.muxjs);(function(window,muxjs,undefined){var TransportPacketStream,TransportParseStream,ElementaryStream,VideoSegmentStream,AudioSegmentStream,Transmuxer,AacStream,H264Stream,NalByteStream,CoalesceStream;var collectDtsInfo,clearDtsInfo,calculateTrackBaseMediaDecodeTime;var MP2T_PACKET_LENGTH,H264_STREAM_TYPE,ADTS_STREAM_TYPE,METADATA_STREAM_TYPE,ADTS_SAMPLING_FREQUENCIES,SYNC_BYTE;var mp4;MP2T_PACKET_LENGTH=188;SYNC_BYTE=71;H264_STREAM_TYPE=27;ADTS_STREAM_TYPE=15;METADATA_STREAM_TYPE=21;ADTS_SAMPLING_FREQUENCIES=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350];mp4=muxjs.mp4;TransportPacketStream=function(){var buffer=new Uint8Array(MP2T_PACKET_LENGTH),bytesInBuffer=0;TransportPacketStream.prototype.init.call(this);this.push=function(bytes){var i=0,startIndex=0,endIndex=MP2T_PACKET_LENGTH,everything;if(bytesInBuffer){everything=new Uint8Array(bytes.byteLength+bytesInBuffer);everything.set(buffer);everything.set(bytes,bytesInBuffer);bytesInBuffer=0}else{everything=bytes}while(endIndex>>2;pes.pts*=2;pes.pts+=payload[13]&2;pes.dts=pes.pts;if(ptsDtsFlags&64){pes.dts=(payload[14]&14)<<28|(payload[15]&255)<<21|(payload[16]&254)<<13|(payload[17]&255)<<6|(payload[18]&254)>>>2;pes.dts*=2;pes.dts+=payload[18]&2}}pes.data=payload.subarray(9+payload[8])};this.push=function(packet){var result={},offset=4;result.payloadUnitStartIndicator=!!(packet[1]&64);result.pid=packet[1]&31;result.pid<<=8;result.pid|=packet[2];if((packet[3]&48)>>>4>1){offset+=packet[offset]+1}if(result.pid===0){result.type="pat";parsePsi(packet.subarray(offset),result);this.trigger("data",result)}else if(result.pid===this.pmtPid){result.type="pmt";parsePsi(packet.subarray(offset),result);this.trigger("data",result)}else if(this.programMapTable===undefined){this.packetsWaitingForPmt.push([packet,offset,result])}else{this.processPes_(packet,offset,result)}};this.processPes_=function(packet,offset,result){result.streamType=this.programMapTable[result.pid];result.type="pes";parsePes(packet.subarray(offset),result);this.trigger("data",result)}};TransportParseStream.prototype=new muxjs.Stream;TransportParseStream.STREAM_TYPES={h264:27,adts:15};ElementaryStream=function(){var video={data:[],size:0},audio={data:[],size:0},timedMetadata={data:[],size:0},flushStream=function(stream,type){var event={type:type,data:new Uint8Array(stream.size)},i=0,fragment;if(!stream.data.length){return}event.trackId=stream.data[0].pid;event.pts=stream.data[0].pts;event.dts=stream.data[0].dts;while(stream.data.length){fragment=stream.data.shift();event.data.set(fragment.data,i);i+=fragment.data.byteLength}stream.size=0;self.trigger("data",event)},self;ElementaryStream.prototype.init.call(this);self=this;this.push=function(data){({pat:function(){},pes:function(){var stream,streamType;switch(data.streamType){case H264_STREAM_TYPE:stream=video;streamType="video";break;case ADTS_STREAM_TYPE:stream=audio;streamType="audio";break;case METADATA_STREAM_TYPE:stream=timedMetadata;streamType="timed-metadata";break;default:return}if(data.payloadUnitStartIndicator){flushStream(stream,streamType)}stream.data.push(data);stream.size+=data.data.byteLength},pmt:function(){var event={type:"metadata",tracks:[]},programMapTable=data.programMapTable,k,track;for(k in programMapTable){if(programMapTable.hasOwnProperty(k)){track={timelineStartInfo:{}};track.id=+k;if(programMapTable[k]===H264_STREAM_TYPE){track.codec="avc";track.type="video"}else if(programMapTable[k]===ADTS_STREAM_TYPE){track.codec="adts";track.type="audio"}event.tracks.push(track)}}self.trigger("data",event)}})[data.type]()};this.flush=function(){flushStream(video,"video");flushStream(audio,"audio");flushStream(timedMetadata,"timed-metadata");this.trigger("done")}};ElementaryStream.prototype=new muxjs.Stream;AacStream=function(){var i=0,self,buffer;AacStream.prototype.init.call(this);self=this;this.push=function(packet){var frameLength,protectionSkipBytes,frameEnd,oldBuffer,numFrames;if(packet.type!=="audio"){return}if(buffer){oldBuffer=buffer;buffer=new Uint8Array(oldBuffer.byteLength+packet.data.byteLength);buffer.set(oldBuffer);buffer.set(packet.data,oldBuffer.byteLength)}else{buffer=packet.data}while(i+5>5;frameEnd=i+frameLength;if(buffer.byteLength>>6&3)+1,channelcount:(buffer[i+2]&1)<<3|(buffer[i+3]&192)>>>6,samplerate:ADTS_SAMPLING_FREQUENCIES[(buffer[i+2]&60)>>>2],samplingfrequencyindex:(buffer[i+2]&60)>>>2,samplesize:16,data:buffer.subarray(i+7+protectionSkipBytes,frameEnd)});if(buffer.byteLength===frameEnd){buffer=undefined;return}buffer=buffer.subarray(frameEnd);i=0}}};AacStream.prototype=new muxjs.Stream;AudioSegmentStream=function(track){var aacFrames=[],aacFramesLength=0,sequenceNumber=0,earliestAllowedDts=0;AudioSegmentStream.prototype.init.call(this);this.push=function(data){collectDtsInfo(track,data);if(track&&track.channelcount===undefined){track.audioobjecttype=data.audioobjecttype;track.channelcount=data.channelcount;track.samplerate=data.samplerate;track.samplingfrequencyindex=data.samplingfrequencyindex;track.samplesize=data.samplesize}aacFrames.push(data);aacFramesLength+=data.data.byteLength};this.setEarliestDts=function(earliestDts){earliestAllowedDts=earliestDts};this.flush=function(){var boxes,currentFrame,data,sample,i,mdat,moof;if(aacFramesLength===0){this.trigger("done");return}if(track.minSegmentDts=earliestAllowedDts){track.minSegmentDts=Math.min(track.minSegmentDts,currentFrame.dts);return true}aacFramesLength-=currentFrame.data.byteLength;return false})}data=new Uint8Array(aacFramesLength);track.samples=[];i=0;while(aacFrames.length){currentFrame=aacFrames[0];sample={size:currentFrame.data.byteLength,duration:1024};track.samples.push(sample);data.set(currentFrame.data,i);i+=currentFrame.data.byteLength;aacFrames.shift()}aacFramesLength=0;mdat=mp4.mdat(data);calculateTrackBaseMediaDecodeTime(track);moof=mp4.moof(sequenceNumber,[track]);boxes=new Uint8Array(moof.byteLength+mdat.byteLength);sequenceNumber++;boxes.set(moof);boxes.set(mdat,moof.byteLength);clearDtsInfo(track);this.trigger("data",{track:track,boxes:boxes});this.trigger("done")}};AudioSegmentStream.prototype=new muxjs.Stream;NalByteStream=function(){var syncPoint=0,i,buffer;NalByteStream.prototype.init.call(this);this.push=function(data){var swapBuffer;if(!buffer){buffer=data.data}else{swapBuffer=new Uint8Array(buffer.byteLength+data.data.byteLength);swapBuffer.set(buffer);swapBuffer.set(data.data,buffer.byteLength);buffer=swapBuffer}for(;syncPoint3){this.trigger("data",buffer.subarray(syncPoint+3))}buffer=null;syncPoint=0;this.trigger("done")}};NalByteStream.prototype=new muxjs.Stream;H264Stream=function(){var nalByteStream=new NalByteStream,self,trackId,currentPts,currentDts,discardEmulationPreventionBytes,readSequenceParameterSet,skipScalingList;H264Stream.prototype.init.call(this);self=this;this.push=function(packet){if(packet.type!=="video"){return}trackId=packet.trackId;currentPts=packet.pts;currentDts=packet.dts;nalByteStream.push(packet)};nalByteStream.on("data",function(data){var event={trackId:trackId,pts:currentPts,dts:currentDts,data:data};switch(data[0]&31){case 5:event.nalUnitType="slice_layer_without_partitioning_rbsp_idr";break;case 6:event.nalUnitType="sei_rbsp";break;case 7:event.nalUnitType="seq_parameter_set_rbsp";event.escapedRBSP=discardEmulationPreventionBytes(data.subarray(1));event.config=readSequenceParameterSet(event.escapedRBSP);break;case 8:event.nalUnitType="pic_parameter_set_rbsp";break;case 9:event.nalUnitType="access_unit_delimiter_rbsp";break;default:break}self.trigger("data",event)});nalByteStream.on("done",function(){self.trigger("done")});this.flush=function(){nalByteStream.flush()};skipScalingList=function(count,expGolombDecoder){var lastScale=8,nextScale=8,j,deltaScale;for(j=0;j255)return false}return true};E.is_ip_mask=function(host){var m=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(host);if(!m)return false;if(E.ip2num(host)==0)return false;var final=false;var check_num_mask=function(num){var arr=(num>>>0).toString(2).split(""),final=false;for(var i=0;i255)return false;if(final&&+m[i]>0)return false;if(!final&&+m[i]<255){if(!check_num_mask(+m[i]))return false;final=true}}return!!final};E.ip2num=function(ip){var num=0;ip.split(".").forEach(function(octet){num<<=8;num+=+octet});return num>>>0};E.num2ip=function(num){return(num>>>24)+"."+(num>>16&255)+"."+(num>>8&255)+"."+(num&255)};E.is_ip_subnet=function(host){var m=/(.+?)\/(\d+)$/.exec(host);return m&&E.is_ip(m[1])&&+m[2]<=32};E.is_ip_netmask=function(host){var ips=host.split("/");if(ips.length!=2||!E.is_ip(ips[0])||!E.is_ip_mask(ips[1]))return false;return true};E.is_ip_range=function(host){var ips=host.split("-");if(ips.length!=2||!E.is_ip(ips[0])||!E.is_ip(ips[1]))return false;return E.ip2num(ips[0])65535)};E.is_valid_url=function(url){return/^(https?:\/\/)?([a-z0-9-]+\.)+[a-z0-9-]+(\/.*)?$/i.test(url)};E.is_valid_domain=function(domain){return/^[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,63}$/.test(domain)};E.is_hola_domain=function(domain){return domain.search(/^(.*\.)?(hola\.org|holacdn\.com|h-cdn\.com)$/)!=-1};E.is_valid_email=function(email){var n=email.toLowerCase().match(/^[a-z0-9_\.\-\+]+@(.*)$/);return!!(n&&E.is_valid_domain(n[1]))};E.is_ip_in_range=function(ips_range,ip){if(!E.is_ip_range(ips_range)||!E.is_ip(ip))return false;var ips=ips_range.split("-");var min_ip=E.ip2num(ips[0]),max_ip=E.ip2num(ips[1]);var num_ip=E.ip2num(ip);return num_ip>=min_ip&&num_ip<=max_ip};E.host_lookup=function(lookup,host){var pos;while(1){if(host in lookup)return lookup[host];if((pos=host.indexOf("."))<0)return;host=host.slice(pos+1)}};E.uri_obj_href=function(uri){return(uri.protocol||"")+(uri.slashes?"//":"")+(uri.host?(uri.auth?uri.auth+"@":"")+uri.host:"")+uri.path+(uri.hash||"")};var protocol_re=/^((?:about|http|https|file|ftp|ws|wss):)?(\/\/)?/i;var host_section_re=/^(.*?)(?:[\/?#]|$)/;var host_re=/^(?:(([^:@]*):?([^:@]*))?@)?([^:]*)(?::(\d*))?/;var path_section_re=/^([^?#]*)(\?[^#]*)?(#.*)?$/;var path_re_loose=/^(\/(?:.(?![^\/]*\.[^\/.]+$))*\/?)?([^\/]*?(?:\.([^.]+))?)$/;var path_re_strict=/^(\/(?:.(?![^\/]*(?:\.[^\/.]+)?$))*\/?)?([^\/]*?(?:\.([^.]+))?)$/;E.parse=function(url,strict){function re(expr,str){var m;try{m=expr.exec(str)}catch(e){m=null}if(!m)return m;for(var i=0;i=0?x.substr(0,idx):x;var vstr=idx>=0?x.substr(idx+1):"";var k=unescape_val(kstr);var v=unescape_val(vstr);if(obj[k]===undefined)obj[k]=v;else if(Array.isArray(obj[k]))obj[k].push(v);else obj[k]=[obj[k],v]}return obj};function token_regex(s,end){return end?"^"+s+"$":s}E.http_glob_host=function(host,end){var n=host.match(/^(|.*[^*])(\*+)$/);if(n){host=E.http_glob_host(n[1])+(n[2].length==1?"[^./]+":"[^/]"+(n[1]?"*":"+"));return token_regex(host,end)}host=host.replace(/\*\*\./,"**").replace(/\*\./,"*").replace(/\./g,"\\.").replace(/\*\*/g,"(([^./]+\\.)+)?").replace(/\*/g,"[^./]+\\.");return token_regex(host,end)};E.http_glob_path=function(path,end){if(path[0]=="*")return E.http_glob_path("/"+path,end);var n=path.match(/^(|.*[^*])(\*+)([^*^\/]*)$/);if(n){path=E.http_glob_path(n[1])+(n[2].length==1?"[^/]+":".*")+E.http_glob_path(n[3]);return token_regex(path,end)}path=path.replace(/\*\*\//,"**").replace(/\*\//,"*").replace(/\//g,"\\/").replace(/\./g,"\\.").replace(/\*\*/g,"(([^/]+\\/)+)?").replace(/\*/g,"[^/]+\\/");return token_regex(path,end)};E.http_glob_url=function(url,end){var n=url.match(/^((.*):\/\/)?([^\/]+)(\/.*)?$/);if(!n)return null;var prot=n[1]?n[2]:"*";var host=n[3];var path=n[4]||"**";if(prot=="*")prot="https?";host=E.http_glob_host(host);path=E.http_glob_path(path);return token_regex(prot+":\\/\\/"+host+path,end)};E.root_url_cmp=function(a,b){var a_s=a.match(/^[*.]*([^*]+)$/);var b_s=b.match(/^[*.]*([^*]+)$/);if(!a_s&&!b_s)return false;var re,s;if(a_s&&b_s&&a_s[1].length>b_s[1].length||a_s&&!b_s){s=a_s[1];re=b}else{s=b_s[1];re=a}s=E.add_proto(s)+"/";if(!(re=E.http_glob_url(re,1)))return false;try{re=new RegExp(re)}catch(e){return false}return re.test(s)};E.qs_strip=function(url){return/^[^?#]*/.exec(url)[0]};function qs_str(qs){var q=[];for(var k in qs){(Array.isArray(qs[k])?qs[k]:[qs[k]]).forEach(function(v){q.push(encodeURIComponent(k)+"="+encodeURIComponent(v))})}return q.join("&")}E.qs_add=function(url,qs){var u=E.parse(url),q=assign(u.query?E.qs_parse(u.query):{},qs);u.path=u.pathname+"?"+qs_str(q);return E.uri_obj_href(u)};E.qs_parse_url=function(url){return E.qs_parse(url.replace(/(^.*\?)|(^[^\?]*$)/,""))};return E})})(); (function(){var __hola_stub_define;var is_node=typeof module=="object"&&module.exports&&module.children;if(!is_node)define=define||self.define;else define=require("./require_node.js").define(module,"../");define("/util/events.js",[],function(){function EventEmitter(){this._events={}}EventEmitter.prototype.listeners=function listeners(event){return Array.apply(this,this._events[event]||[])};EventEmitter.prototype.emit=function emit(event,a1,a2,a3,a4,a5){if(!this._events||!this._events[event])return false;var listeners=this._events[event],length=listeners.length,len=arguments.length,fn=listeners[0],args,i;if(1===length){switch(len){case 1:fn.call(fn.__EE3_context||this);break;case 2:fn.call(fn.__EE3_context||this,a1);break;case 3:fn.call(fn.__EE3_context||this,a1,a2);break;case 4:fn.call(fn.__EE3_context||this,a1,a2,a3);break;case 5:fn.call(fn.__EE3_context||this,a1,a2,a3,a4);break;case 6:fn.call(fn.__EE3_context||this,a1,a2,a3,a4,a5);break;default:for(i=1,args=new Array(len-1);i0;i--){var arg=arguments[i];if(Array.isArray(arg))a.unshift.apply(a,arg);else a.unshift(arg)}return a.length};E.slice=function(args,from,to){return Array.prototype.slice.call(args,from,to)};E.compact=function(a){return E.compact_self(a.slice())};E.compact_self=function(a){var i,j,n=a.length;for(i=0;i1&&(n=n%a.length))E.unshift(a,a.splice(n));return a};E.move=function(a,from,to,n){return Array.prototype.splice.apply(a,[to,n].concat(a.slice(from,from+n)))};E.to_array=function(v){return Array.isArray(v)?v:v==null?[]:[v]};var proto={};proto.sed=function(regex,replace){return E.sed(this,regex,replace)};proto.grep=function(regex,replace){return E.grep(this,regex,replace)};proto.to_nl=function(sep){return E.to_nl(this,sep)};proto.push_a=function(){return E.push.apply(null,[this].concat(Array.from(arguments)))};proto.unshift_a=function(){return E.unshift.apply(null,[this].concat(Array.from(arguments)))};var installed;E.prototype_install=function(){if(installed)return;installed=true;for(var i in proto){Object.defineProperty(Array.prototype,i,{value:proto[i],configurable:true,enumerable:false,writable:true})}};E.prototype_uninstall=function(){if(!installed)return;installed=false;for(var i in proto)delete Array.prototype[i]};return E})})(); (function(){var __hola_stub_define,node_util;var is_node=typeof module=="object"&&module.exports&&module.children;var is_ff_addon=typeof module=="object"&&module.uri&&!module.uri.indexOf("resource://");if(is_ff_addon)define=require("./require_node.js").define(module,"../");else if(!is_node)define=define||self.define;else{node_util=require("util");define=require("./require_node.js").define(module,"../")}define("/util/util.js",["/util/array.js"],function(array){var E={};E._is_mocha=undefined;E.is_mocha=function(){if(E._is_mocha!==undefined)return E._is_mocha;if(typeof process!="undefined")return E._is_mocha=process.env.IS_MOCHA||false;return E._is_mocha=false};E.is_lxc=function(){return is_node&&+process.env.LXC};E.f_mset=function(flags,mask,bits){return flags&~mask|bits};E.f_lset=function(flags,bits,logic){return E.f_mset(flags,bits,logic?bits:0)};E.f_meq=function(flags,mask,bits){return(flags&mask)==bits};E.f_eq=function(flags,bits){return(flags&bits)==bits};E.f_cmp=function(f1,f2,mask){return(f1&mask)==(f2&mask)};E.xor=function(a,b){return!a!=!b};E.div_ceil=function(a,b){return Math.floor((a+b-1)/b)};E.ceil_mul=function(a,b){return E.div_ceil(a,b)*b};E.floor_mul=function(a,b){return Math.floor(a/b)*b};E.range=function(x,a,b){return x>=a&&x<=b};E.range.ii=function(x,a,b){return x>=a&&x<=b};E.range.ie=function(x,a,b){return x>=a&&xa&&x<=b};E.range.ee=function(x,a,b){return x>a&&x="0"&&c<="9"};E.isalpha=function(c){return c>="a"&&c<="z"||c>="A"&&c<="Z"};E.isalnum=function(c){return E.isdigit(c)||E.isalpha(c)};E.obj_pluck=function(obj,prop){var val=obj[prop];delete obj[prop];return val};E.proto_keys=function(proto){var keys=[];for(var i in proto)keys.push(i);return keys};E.values=function(obj){var values=[];for(var i in obj)values.push(obj[i]);return values};E.path=function(path){if(Array.isArray(path))return path;path=""+path;if(!path)return[];return path.split(".")};E.get=function(o,path,def){path=E.path(path);for(var i=0;ilongcb_ms){zerr("long cb "+ms+"ms: "+et.get_name()+", "+et.run_state.f.toString().slice(0,128))}if(perf_enable){var name=et.get_name();var perf=E.perf_stat[name]||(E.perf_stat[name]={ms:0,n:0});perf.ms+=ms;perf.n++}}function cb_set(){if(longcb_ms||perf_enable){cb_pre=_cb_pre;cb_post=_cb_post}else cb_pre=cb_post=undefined}E.longcb=function(ms){longcb_ms=ms;cb_set()};E.perf=function(enable){perf_enable=enable;cb_set()};E.longcb(+env.LONGCB);E.perf(+env.ETASK_PERF);function stack_get(){var prev=Error.stackTraceLimit,err;Error.stackTraceLimit=4;err=new Error;Error.stackTraceLimit=prev;return err}function Etask(opt,states){if(!(this instanceof Etask))return new Etask(opt,states);if(Array.isArray(opt)||typeof opt=="function"){states=opt;opt=undefined}opt=typeof opt=="string"&&{name:opt}||opt||{};if(typeof states=="function"){if(states.constructor.name=="GeneratorFunction")return E._generator(null,states,opt);states=[states]}this.cur_state=this.states=this._finally=this.error=this.at_return=this.next_state=this.use_retval=this.running=this.at_continue=this.cancel=this.wait_timer=this.retval=this.run_state=this._stack=this.down=this.up=this.child=this.name=this._name=this.parent=this.cancelable=this.tm_create=this._alarm=this.tm_completed=this.parent_type=this.info=this.then_waiting=this.free=this.parent_guess=this.child_guess=this.wait_retval=undefined;this.name=opt.name;this._name=this.name===undefined?"noname":this.name;this.cancelable=opt.cancel;this.then_waiting=[];this.child=[];this.child_guess=[];this.cur_state=-1;this.states=[];this._stack=Etask.use_bt?stack_get():undefined;this.tm_create=Date.now();this.info={};var idx=this.states.idx={};for(var i=0;i2)return type;if(n[1].length)type.label=n[1];var f=n[0].split("_");for(var j=0;j=child.length?-1:i};E.prototype._set_wait_child=function(wait_retval){var i,_this=this,child=wait_retval.child;var cond=wait_retval.cond,wait_on;assert(!cond||child=="any",'condition supported only for "any" '+"option, you can add support if needed");if(child=="any"){if(this._get_child_running()<0)return true;wait_on=function(){_this.once("child",function(child){if(!cond||cond.call(child,child.retval))return _this._got_retval(wait_retval,{child:child});if(_this._get_child_running()<0)return _this._got_retval(wait_retval);wait_on()})};wait_on()}else if(child=="all"){if((i=this._get_child_running())<0)return true;wait_on=function(child){_this.once("child",function(child){var i;if((i=_this._get_child_running())<0)return _this._got_retval(wait_retval);wait_on(_this.child[i])})};wait_on(this.child[i])}else{assert(child,"no child provided");assert(this===child.parent,"child does not belong to parent");if(child.tm_completed)return true;child.once("finally",function(){return _this._got_retval(wait_retval,{child:child})})}this.emit_safe("wait_on_child")};E.prototype._got_retval=function(wait_retval,res){if(this.wait_retval!==wait_retval||wait_retval.completed)return;wait_retval.completed=true;this._next_run(E._res2rv(res))};E.prototype.continue_fn=function(){return this.continue.bind(this)};E.continue_depth=0;E.prototype.continue=function(promise,sync){this.wait_retval=undefined;this._set_retval(promise);if(this.tm_completed)return promise;if(this.down)this.down._ecancel();this._del_wait_timer();var rv={ret:promise,err:undefined};if(this.running){this.at_continue=rv;return promise}if(this._handle_rv(rv))return rv.ret;var _this=this;if(E.is_final(promise)&&(!E.continue_depth&&!E.in_run.length||sync)){E.continue_depth++;this._next_run(rv);E.continue_depth--}else E.nextTick(function(){_this._next_run(rv)});return promise};E.prototype._ecancel=function(){if(this.tm_completed)return this;this.emit_safe("cancel");if(this.cancel!==undefined)return this._call_safe(this.states[this.cancel].f);if(this.cancelable)return this.return()};E.prototype._ecancel_child=function(){if(!this.child.length)return;var child=Array.from(this.child);for(var i=0;i"+this.next_state:"")};E.prototype.get_depth=function(){var i=0,et=this;for(;et;et=et.up,i++);return i};function trim_space(s){if(s[s.length-1]!=" ")return s;return s.slice(0,-1)}function ms_to_str(ms){var s=""+ms;return s.length<=3?s+"ms":s.slice(0,-3)+"."+s.slice(-3)+"s"}E.prototype.get_time_passed=function(){return ms_to_str(Date.now()-this.tm_create)};E.prototype.get_time_completed=function(){return ms_to_str(Date.now()-this.tm_completed)};E.prototype.get_info=function(){var info=this.info,s="",_i;if(!info)return"";for(var i in info){_i=info[i];if(!_i)continue;if(s!=="")s+=" ";if(typeof _i=="function")s+=_i();else s+=_i}return trim_space(s)};function Etask_err(err){this.error=err||new Error}E.Etask_err=Etask_err;E.err=function(err){return new Etask_err(err)};E.is_err=function(v){return v instanceof Etask&&v.error!==undefined||v instanceof Etask_err};E.err_res=function(err,res){return err?E.err(err):res};E._res2rv=function(res){return E.is_err(res)?{ret:undefined,err:res.error}:{ret:res,err:undefined}};E.is_final=function(v){return!v||typeof v.then!="function"||v instanceof Etask_err||v instanceof Etask&&!!v.tm_completed};E.prototype.then=function(on_res,on_err){var _this=this;function on_done(){if(!_this.error)return!on_res?_this.retval:on_res(_this.retval);return!on_err?E.err(_this.error):on_err(_this.error)}if(this.tm_completed)return etask("then_completed",[function(){return on_done()}]);var then_wait=etask("then_wait",[function(){return this.wait()}]);this.then_waiting.push(function(){try{then_wait.continue(on_done())}catch(e){then_wait.throw(e)}});return then_wait};E.prototype.otherwise=E.prototype.catch=function(on_err){return this.then(null,on_err)};E.prototype.ensure=function(on_ensure){return this.then(function(res){on_ensure();return res},function(err){on_ensure();throw err})};Etask_err.prototype.then=function(on_res,on_err){var _this=this;return etask("then_err",[function(){return!on_err?E.err(_this.error):on_err(_this.error)}])};Etask_err.prototype.otherwise=Etask_err.prototype.catch=function(on_err){return this.then(null,on_err)};Etask_err.prototype.ensure=function(on_ensure){this.then(null,function(){on_ensure()});return this};E.resolve=function(res){return etask([function(){return res}])};E.reject=function(err){return etask([function(){throw err}])};E.prototype.wait_ext=function(promise){if(!promise||typeof promise.then!="function")return promise;var wait=this.wait();promise.then(wait.continue_fn(),wait.throw_fn());return wait};E.prototype.longname=function(flags){flags=flags||{TIME:1};var s="",_s;if(this.running)s+="RUNNING ";s+=this.get_name(flags)+(!this.tm_completed?"."+this.state_str():"")+" ";if(this.tm_completed)s+="COMPLETED"+(flags.TIME?" "+this.get_time_completed():"")+" ";if(flags.TIME)s+=this.get_time_passed()+" ";if(_s=this.get_info())s+=_s+" ";return trim_space(s)};E.prototype.stack=function(flags){var et=this,s="";flags=assign({STACK:1,RECURSIVE:1,GUESS:1},flags);while(et){var _s=et.longname(flags)+"\n";if(et.up)et=et.up;else if(et.parent){_s=(et.parent_type=="call"?"CALL":"SPAWN")+" "+_s;et=et.parent}else if(et.parent_guess&&flags.GUESS){_s="SPAWN? "+_s;et=et.parent_guess}else et=undefined;if(flags.TOPDOWN)s=_s+s;else s+=_s}return s};E.prototype._ps=function(pre_first,pre_next,flags){var i,s="",task_trail,et=this,child_guess;if(++flags.limit_n>=flags.LIMIT)return flags.limit_n==flags.LIMIT?"\nLIMIT "+flags.LIMIT+"\n":"";for(;et.up;et=et.up);for(var first=1;et;et=et.down,first=0){s+=first?pre_first:pre_next;first=0;if(flags.MARK&&(i=flags.MARK.sp.indexOf(et))>=0)s+=(flags.MARK.name[i]||"***")+" ";s+=et.longname(flags)+"\n";if(flags.RECURSIVE){var stack_trail=et.down?".":" ";var child=et.child;if(flags.GUESS)child=child.concat(et.child_guess);for(i=0;i ":"\\_ ";s+=child[i]._ps(pre_next+task_trail+child_guess,pre_next+task_trail+" ",flags)}}}return s};function ps_flags(flags){var m,_m;if(m=flags.MARK){if(!Array.isArray(m))_m={sp:[m],name:[]};else if(!Array.isArray(flags.MARK[0]))_m={sp:m,name:[]};else{_m={sp:[],name:[]};for(var i=0;i=a.length)return this.return(a);this.info.at="at "+i+"/"+a.length;var _a=a[i];if(_a instanceof Etask)_a.spawn_parent();return _a},function(res){if(this.error){if(!opt.allow_fail)return this.throw(this.error);res=E.err(this.error)}a[i]=res;i++;return this.goto("loop")}])}else if(a_or_o instanceof Object){var keys=Object.keys(a_or_o),o={};i=0;return etask({name:"all_o",cancel:true},[function(){for(j=0;j=keys.length)return this.return(o);var _i=keys[i],_a=a_or_o[_i];this.info.at="at "+_i+" "+i+"/"+keys.length;if(_a instanceof Etask)_a.spawn_parent();return _a},function(res){if(this.error){if(!opt.allow_fail)return this.throw(this.error);res=E.err(this.error)}o[keys[i]]=res;i++;return this.goto("loop")}])}else assert(0,"invalid type")};E.all_limit=function(limit,arr_iter,cb){var at=0;var iter=!Array.isArray(arr_iter)?arr_iter:function(){if(at=limit)return this.wait_child("any")},function done(){return this.wait_child("all")}])};E._apply=function(opt,func,_this,args){var func_name;if(typeof _this=="string"){assert(_this[0]==".","invalid method "+_this);var method=_this.slice(1),_class=func;func=_class[method];_this=_class;assert(_this instanceof Object,"invalid method ."+method);func_name=method}else if(Array.isArray(_this)&&!args){args=_this;_this=null}opt.name=opt.name||func_name||func.name;return etask(opt,[function(){var et=this,ret_sync,returned=0;args=Array.from(args);args.push(function cb(err,res){if(typeof opt.ret_sync=="string"&&!returned){var a=arguments;returned++;return void E.nextTick(function(){cb.apply(null,a)})}var nfn=opt.nfn===undefined||opt.nfn?1:0;if(opt.ret_o){var o={},i;if(Array.isArray(opt.ret_o)){for(i=0;i1?"Days":"Day")+" ";return s+pad(hours,2)+":"+pad(mins,2)+":"+pad(sec,2)};E.dur_to_str=function(duration,opt){opt=opt||{};var parts=[];duration=+duration;function chop(period,name){if(duration=last)return last=now;adjust+=last-now;return last}}};E.init();E.str_to_dur=function(str,opt){opt=opt||{};var month="mo|mon|months?";if(opt.short_month)month+="|m";var m=str.replace(/ /g,"").match(new RegExp("^(([0-9]+)y(ears?)?)?"+"(([0-9]+)("+month+"))?(([0-9]+)w(eeks?)?)?(([0-9]+)d(ays?)?)?"+"(([0-9]+)h(ours?)?)?(([0-9]+)(min|minutes?))?"+"(([0-9]+)s(ec|econds?)?)?(([0-9]+)ms(ec)?)?$"));if(!m)return;return ms.YEAR*(+m[2]||0)+ms.MONTH*(+m[5]||0)+ms.WEEK*(+m[8]||0)+ms.DAY*(+m[11]||0)+ms.HOUR*(+m[14]||0)+ms.MIN*(+m[17]||0)+ms.SEC*(+m[20]||0)+(+m[23]||0)};E.months_long=["January","February","March","April","May","June","July","August","September","October","November","December"];E.months_short=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];var months_short_lc=E.months_short.map(function(m){return m.toLowerCase()});E.days_long=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];E.days_short=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];var days_short_lc=E.days_short.map(function(d){return d.toLowerCase()});E.locale={months_long:E.months_long,months_short:E.months_short,days_long:E.days_long,days_short:E.days_short,AM:"AM",PM:"PM"};E.get=date_get;function date_get(d,_new){var y,mon,day,H,M,S,_ms;if(d===undefined)return new Date;if(d==null)return new Date(null);if(d instanceof Date)return _new?new Date(d):d;if(typeof d=="string"){var m;d=d.trim();if(m=/^((\d\d\d\d)-(\d\d)-(\d\d)|(\d\d?)-([A-Za-z]{3})-(\d\d(\d\d)?))\s*([\sT](\d\d):(\d\d)(:(\d\d)(\.(\d\d\d))?)?Z?)?$/.exec(d)){H=+m[10]||0;M=+m[11]||0;S=+m[13]||0;_ms=+m[15]||0;if(m[2]){y=+m[2];mon=+m[3];day=+m[4];if(!y&&!mon&&!day&&!H&&!M&&!S&&!_ms)return new Date(NaN);return new Date(Date.UTC(y,mon-1,day,H,M,S,_ms))}if(m[5]){y=+m[7];mon=months_short_lc.indexOf(m[6].toLowerCase())+1;day=+m[5];if(m[7].length==2){y=+y;y+=y>=70?1900:2e3}return new Date(Date.UTC(y,mon-1,day,H,M,S,_ms))}}if(/^\d+$/.test(d))return new Date(+d);return new Date(d)}if(typeof d=="number")return new Date(d);throw new TypeError("invalid date "+d)}E.to_sql_ms=function(d){d=E.get(d);if(isNaN(d))return"0000-00-00 00:00:00.000";return pad(d.getUTCFullYear(),4)+"-"+pad(d.getUTCMonth()+1,2)+"-"+pad(d.getUTCDate(),2)+" "+pad(d.getUTCHours(),2)+":"+pad(d.getUTCMinutes(),2)+":"+pad(d.getUTCSeconds(),2)+"."+pad(d.getUTCMilliseconds(),3)};E.to_sql_sec=function(d){return E.to_sql_ms(d).slice(0,-4)};E.to_sql=function(d){return E.to_sql_ms(d).replace(/( 00:00:00)?....$/,"")};E.from_sql=E.get;E.to_month_short=function(d){d=E.get(d);return E.months_short[d.getUTCMonth()]};E.to_jdate=function(d){d=E.get(d);return(pad(d.getUTCDate(),2)+"-"+E.months_short[d.getUTCMonth()]+"-"+pad(d.getUTCFullYear()%100,2)+" "+pad(d.getUTCHours(),2)+":"+pad(d.getUTCMinutes(),2)+":"+pad(d.getUTCSeconds(),2)).replace(/( 00:00)?:00$/,"")};E.to_log_file=function(d){d=E.get(d);return d.getUTCFullYear()+pad(d.getUTCMonth()+1,2)+pad(d.getUTCDate(),2)+"_"+pad(d.getUTCHours(),2)+pad(d.getUTCMinutes(),2)+pad(d.getUTCSeconds(),2)};E.from_log_file=function(d){var m=d.match(/^(\d{4})(\d{2})(\d{2})_(\d{2})(\d{2})(\d{2})$/);if(!m)return;return new Date(Date.UTC(m[1],m[2]-1,m[3],m[4],m[5],m[6]))};E.to_log_ms=function(d){return E.to_sql_ms(d).replace(/-/g,".")};E.from_rcs=function(d){var m=d.match(/^(\d{4})\.(\d{2})\.(\d{2})\.(\d{2})\.(\d{2})\.(\d{2})$/);if(!m)return;return new Date(Date.UTC(m[1],m[2]-1,m[3],m[4],m[5],m[6]))};E.to_rcs=function(d){return E.to_sql_sec(d).replace(/[-: ]/g,".")};E.sec={MS:.001,SEC:1,MIN:60,HOUR:60*60,DAY:24*60*60,WEEK:7*24*60*60,MONTH:30*24*60*60,YEAR:365*24*60*60};E.ms={};for(var key in E.sec)E.ms[key]=E.sec[key]*1e3;var ms=E.ms;E.align=function(d,align){d=E.get(d,1);switch(align.toUpperCase()){case"MS":break;case"SEC":d.setUTCMilliseconds(0);break;case"MIN":d.setUTCSeconds(0,0);break;case"HOUR":d.setUTCMinutes(0,0,0);break;case"DAY":d.setUTCHours(0,0,0,0);break;case"WEEK":d.setUTCDate(d.getUTCDate()-d.getUTCDay());d.setUTCHours(0,0,0,0);break;case"MONTH":d.setUTCDate(1);d.setUTCHours(0,0,0,0);break;case"YEAR":d.setUTCMonth(0,1);d.setUTCHours(0,0,0,0);break;default:throw new Error("invalid align "+align)}return d};E.add=function(d,duration){d=E.get(d,1);if(duration.year)d.setUTCFullYear(d.getUTCFullYear()+duration.year);if(duration.month)d.setUTCMonth(d.getUTCMonth()+duration.month);["day","hour","min","sec","ms"].forEach(function(key){if(duration[key])d.setTime(+d+duration[key]*ms[key.toUpperCase()])});return d};E.describe_interval=function(_ms){if(_ms<2*ms.MIN)return Math.round(_ms/ms.SEC)+" sec";if(_ms<2*ms.HOUR)return Math.round(_ms/ms.MIN)+" min";if(_ms<2*ms.DAY)return Math.round(_ms/ms.HOUR)+" hours";if(_ms<2*ms.WEEK)return Math.round(_ms/ms.DAY)+" days";if(_ms<2*ms.MONTH)return Math.round(_ms/ms.WEEK)+" weeks";if(_ms<2*ms.YEAR)return Math.round(_ms/ms.MONTH)+" months";return Math.round(_ms/ms.YEAR)+" years"};E.time_ago=function(d,until_date){var _ms=E.get(until_date)-E.get(d);if(_ms=0)d=new Date(+E.align(d,"WEEK")+_v*ms.DAY+(dir||0)*ms.WEEK);else if(_v=/^([+-]?\d+)(?:([ymoinwdhs]+)(\d.*)?)?$/.exec(v)){if(amount!==undefined)return;amount=dir!==undefined?Math.abs(+_v[1]):+_v[1];if(_v[2]){a.splice(i+1,0,_v[2]);if(_v[3])a.splice(i+2,0,_v[3])}continue}else if(/^([ywdhs]|years?|months?|mon?|weeks?|days?|hours?|minutes?|min|seconds?|sec)$/.test(v)){_v=v[0]=="m"&&v[1]=="i"?ms.MIN:v[0]=="y"?ms.YEAR:v[0]=="m"&&v[1]=="o"?ms.MONTH:v[0]=="w"?ms.WEEK:v[0]=="d"?ms.DAY:v[0]=="h"?ms.HOUR:ms.SEC;amount=amount===undefined?1:amount;_dir=dir===undefined?opt.dir||1:dir;if(_v==ms.MONTH)d.setUTCMonth(d.getUTCMonth()+_dir*amount);else if(_v==ms.YEAR)d.setUTCFullYear(d.getUTCFullYear()+_dir*amount);else d=new Date(+d+_v*amount*_dir);amount=undefined}else return;if(amount!==undefined)return}if(amount!==undefined)return;return d};E.strptime=function(str,fmt){function month(m){return months_short_lc.indexOf(m.toLowerCase())}var parse={"%":["%",function(){},0],a:["[a-z]+",function(m){},0],A:["[a-z]+",function(m){},0],b:["[a-z]+",function(m){d.setUTCMonth(month(m))},2],B:["[a-z]+",function(m){d.setUTCMonth(month(m.toLowerCase()))},2],y:["[0-9]{2}",function(m){d.setUTCFullYear(+m+(m<70?2e3:1900))},1],Y:["[0-9]{4}",function(m){d.setUTCFullYear(+m)},1],m:["[0-9]{0,2}",function(m){d.setUTCMonth(+m-1)},2],d:["[0-9]{0,2}",function(m){d.setUTCDate(+m)},3],H:["[0-9]{0,2}",function(m){d.setUTCHours(+m)},4],M:["[0-9]{0,2}",function(m){d.setUTCMinutes(+m)},5],S:["[0-9]{0,2}",function(m){d.setUTCSeconds(+m)},6],s:["[0-9]+",function(m){d=new Date(+m)},0],L:["[0-9]{0,3}",function(m){d.setUTCMilliseconds(+m)},7],z:["[+-][0-9]{4}",function(m){var timezone=+m.slice(0,3)*3600+m.slice(3,5)*60;d=new Date(d.getTime()-timezone*1e3)},8],Z:["[a-z]{0,3}[+-][0-9]{2}:?[0-9]{2}|[a-z]{1,3}",function(m){m=/^([a-z]{0,3})(?:([+-][0-9]{2}):?([0-9]{2}))?$/i.exec(m);if(m[1]=="Z"||m[1]=="UTC")return;var timezone=+m[2]*3600+m[3]*60;d=new Date(d.getTime()-timezone*1e3)},8],I:["[0-9]{0,2}",function(m){d.setUTCHours(+m)},4],p:["AM|PM",function(m){if(d.getUTCHours()==12)d.setUTCHours(d.getUTCHours()-12);if(m.toUpperCase()=="PM")d.setUTCHours(d.getUTCHours()+12)},9]};var ff=[];var ff_idx=[];var re=new RegExp("^\\s*"+fmt.replace(/%(?:([a-zA-Z%]))/g,function(_,fd){var d=parse[fd];if(!d)throw Error("Unknown format descripter: "+fd);ff_idx[d[2]]=ff.length;ff.push(d[1]);return"("+d[0]+")"})+"\\s*$","i");var matched=str.match(re);if(!matched)return;var d=new Date(0);for(var i=0;i12?hours-12:hours}function ord_str(n){var i=n%10,ii=n%100;if(ii>=11&&ii<=13||i==0||i>=4)return"th";switch(i){case 1:return"st";case 2:return"nd";case 3:return"rd"}}function week_num(l,d,first_weekday){var wday=l.getDay(d);if(first_weekday=="monday")wday=wday==0?wday=6:wday-1;var yday=(d-l.getYearBegin(d))/ms.DAY;return Math.floor((yday+7-wday)/7)}function padx(n,padding,length){if(typeof padding=="number"){length=padding;padding="0"}if(padding===undefined)padding="0";length=length||2;var s=""+n;if(padding)for(;s.length=0?Math.floor(num):-Math.floor(-num)};E.thousand_grouping=function(num_s){var m=/^([-+])?(\d*)(\.\d*)?$/.exec(num_s);if(!m)return num_s;m[2]=(m[2]||"").replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1"+",");return(m[1]||"")+m[2]+(m[3]||"")};E.parse_fast=function(fmt){var _fmt=fmt,match=[],arg_names=0,cursor=1;var pad_chr,pad_chrs,arg_padded,f,s=JSON.stringify;f='var out = "", arg, arg_s, sign;\n';for(;_fmt;_fmt=_fmt.substring(match[0].length)){if(match=/^[^%]+/.exec(_fmt))f+="out += "+s(match[0])+";\n";else if(match=/^%%/.exec(_fmt))f+='out += "%";\n';else if(match=/^%(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?(')?([bcdefoOsuxX])/.exec(_fmt)){var positional=match[1],keyword=match[2],sign=match[3];var pad_zero=match[4],pad_min=match[5],pad_max=match[6];var precision=match[7],thousand_grouping=match[8]=="'";var conversion=match[9],keyword_list=[];if(keyword){arg_names|=1;var _keyword=keyword,kmatch;if(!(kmatch=/^([a-z_][a-z_\d]*)/i.exec(_keyword)))throw"sprintf: invalid keyword property name "+_keyword;keyword_list.push(kmatch[1]);while(_keyword=_keyword.substring(kmatch[0].length)){if(kmatch=/^\.([a-z_][a-z_\d]*)/i.exec(_keyword))keyword_list.push(kmatch[1]);else if(kmatch=/^\[(\d+)\]/.exec(_keyword))keyword_list.push(kmatch[1]);else throw"sprintf: invalid keyword format "+_keyword}}else arg_names|=2;if(arg_names===3){throw"sprintf: mixing positional and named placeholders is "+"not (yet) supported"}f+="sign = false;\n";if(keyword_list.length){f+="arg = argv["+cursor+"]";for(var k=0;k>>0;arg_s=""+arg});break;case"x":f(function(){arg_s=arg.toString(16)});break;case"X":f(function(){arg_s=arg.toString(16).toUpperCase()});break;case"s":f(function(){arg_s=""+arg});if(precision)f(function(){arg_s=arg_s.substring(0,precision)});break}if(/[def]/.test(conversion)){if(sign)f(function(){if(arg>=0)arg_s="+"+arg_s});f(function(){sign=arg_s[0]=="-"||arg_s[0]=="+"})}var pad_chr=!pad_zero?" ":pad_zero=="0"?"0":pad_zero[1];f(function(){var pad_chrs=pad_chr.repeat(Math.max(+pad_max-arg_s.length,0));var arg_padded=!pad_max?arg_s:pad_min?arg_s+pad_chrs:sign&&pad_chr[0]=="0"?arg_s[0]+pad_chrs+arg_s.slice(1):pad_chrs+arg_s;out+=arg_padded})}else throw"sprintf invalid format "+_fmt})();return function(_argv){argv=_argv;out="";for(var i=0;i<_f.length;i++)_f[i](argv);return out}};E.parse=function(){try{if(new Function("return 1")()==1)return E.parse_fast}catch(e){}return E.parse_slow}();E.vsprintf=function(fmt,argv,opt){if(opt){if(opt.fast)return E.parse_fast(fmt)([fmt].concat(argv));if(opt.slow)return E.parse_slow(fmt)([fmt].concat(argv))}return E.sprintf.apply(null,[fmt].concat(argv))};return E})})(); (function(){var __hola_stub_define;var is_node=typeof module=="object"&&module.exports&&module.children;if(!is_node)define=define||self.define;else define=require("./require_node.js").define(module,"../");define("/util/rate_limit.js",[],function(){var E=rate_limit;function rate_limit(rl,ms,n){var now=Date.now();if(!rl.count||rl.ts+msthis.size)return false;this.level=new_level;return true};return E})})(); (function(){var __hola_stub_define;var if_node_ff=typeof module=="object"&&module.exports;if(!if_node_ff)define=define||self.define;else define=require("./require_node.js").define(module,"../");define("/util/escape.js",[],function(){var E={};E.un={};var html_escape_table={"&":"&","<":"<",">":">",'"':""","'":"'"};E.html=function(html){return html.replace(/[&<>"']/g,function(m){return html_escape_table[m[0]]})};E.sh=function(s_or_a){function single(s){s=""+s;if(!s)return'""';if(/^[a-z0-9_\-.\/:]+$/i.test(s))return s;return'"'+s.replace(/([\\"`$])/g,"\\$1")+'"'}if(arguments.length==1&&!Array.isArray(s_or_a))return single(s_or_a);var s="",a=Array.isArray(s_or_a)?s_or_a:arguments;for(var i=0;iE.level)return;__zerr(level,args)};E._zerr=_zerr;E.zexit=function(args){var stack;if(err_has_stack(args)){stack=args.stack;__zerr(L.CRIT,[E.e2s(args)])}else{var e=new Error;stack=e.stack;__zerr(L.CRIT,arguments);console.error(stack)}E.flush();if(zutil.is_mocha()){debugger;process.exit(1)}var zcounter_file=require("./zcounter_file.js");zcounter_file.inc("server_zexit");args=zerr_format(arguments);write_zexit_log({id:"server_zexit",info:""+args,ts:date.to_sql(),backtrace:stack,version:version});E.flush();debugger;process.exit(1)};var write_zexit_log=function(json){try{var file=require("./file.js");file.write_e(E.ZEXIT_LOG_DIR+"/"+date.to_log_file()+"_zexit_"+process.pid+".log",E.json(json),{mkdirp:1})}catch(e){E.zerr(E.e2s(e))}}}else{var chrome=self.chrome;E.conf=self.conf;E.log=[];var L_STR=E.L_STR=["EMERGENCY","ALERT","CRITICAL","ERROR","WARNING","NOTICE","INFO","DEBUG"];E.level=self.is_tpopup?L.CRITICAL:E.conf&&E.conf.zerr_level?L[self.conf.zerr_level]:L.WARN;E.log.max_size=200;var console_method=function(l){return l<=L.ERR?"error":!chrome?"log":l===L.WARN?"warn":l<=L.INFO?"info":"debug"};_zerr=function(l,args){var s;try{var fmt=""+args[0];var fmt_args=Array.prototype.slice.call(args,1);s=(fmt+(fmt_args.length?" "+E.json(fmt_args):"")).substr(0,1024);var prefix=date.to_sql_ms()+" "+L_STR[l]+": ";E.log.push(prefix+s);if(E.is(l)){Function.prototype.apply.bind(console[console_method(l)],console)([prefix+fmt].concat(fmt_args))}if(E.log.length>E.log.max_size)E.log.splice(0,E.log.length-E.log.max_size/2)}catch(err){try{console.error("ERROR in zerr "+(err.stack||err),arguments)}catch(e){}}if(l<=L.CRIT)throw new Error(s)};E._zerr=_zerr;var post=function(url,data){var use_xdr=typeof XDomainRequest=="function"&&!("withCredentials"in XMLHttpRequest.prototype);var req=use_xdr?new XDomainRequest:new XMLHttpRequest;req.open("POST",url);if(req.setRequestHeader){req.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8")}req.send(zescape.qs(data))};var perr_transport=function(id,info,opt){opt=zutil.clone(opt||{});var qs=opt.qs||{},data=opt.data||{};data.is_json=1;if(info&&typeof info!="string")info=zerr.json(info);if(opt.err&&!info)info=""+(opt.err.message||zerr.json(opt.err));data.info=info;qs.id=id;if(!opt.no_zerr){zerr._zerr(opt.level,["perr "+id+(info?" info: "+info:"")+(opt.bt?"\n"+opt.bt:"")])}return post(zescape.uri(E.conf.url_perr+"/perr",qs),data)};var perr=function(perr_orig,pending){while(pending.length)perr_transport.apply(null,pending.shift());return perr_transport};E.perr_install(perr)}return E})})(); (function(){var __hola_stub_define;var is_node=typeof module=="object"&&module.exports&&module.children;if(!is_node)define=define||self.define;else define=require("./require_node.js").define(module,"../");define("/util/ajax_lite.js",["/util/etask.js","/util/date.js","/util/zerr.js","/util/escape.js","events"],function(etask,date,zerr,zescape,events){var E=ajax;var assign=Object.assign;E.json=function(opt){return ajax(assign({},opt,{data_type:"json"}))};E.events=new events.EventEmitter;E.t={};E.t.get_origin=get_origin;E.t.get_url_origin=get_url_origin;E.t.is_current_origin=is_current_origin;var raw_default_opt={method:"GET",url:null,headers:null,data_type:"text",data:null,qs:null,timeout:20*date.ms.SEC,with_credentials:false,return_headers:false};var ajax_default_opt={slow:2*date.ms.SEC,perr:null};var type_helpers={text:{setup:function(xhr){if(xhr instanceof XMLHttpRequest){xhr.setRequestHeader("Accept","text/*");xhr.responseType="text"}},extract:function(xhr){return xhr.responseText}},json:{setup:function(xhr){if(xhr instanceof XMLHttpRequest){xhr.setRequestHeader("Accept","application/json");xhr.responseType="text"}},extract:function(xhr){return JSON.parse(xhr.responseText)}}};function get_origin(location){if(location.origin)return location.origin;var default_ports={"http:":80,"https:":443};var port=location.port;if(default_ports[location.protocol]==port)port=null;return location.protocol+"//"+location.hostname+(port?":"+port:"")}var probe_link;function get_url_origin(url){probe_link=probe_link||document.createElement("a");probe_link.href=url;probe_link.href=probe_link.href;return get_origin(probe_link)}function is_current_origin(url){return is_node?false:window.location.origin==get_url_origin(url)}var can_use_xdr=typeof XDomainRequest=="function"&&!("withCredentials"in XMLHttpRequest.prototype);E.raw=function(opt){return etask([function(){opt=assign({},raw_default_opt,opt);var type_helper=type_helpers[opt.data_type];if(!type_helper){throw{status:null,status_text:"Unknown data_type "+opt.data_type,response_text:null}}var req=can_use_xdr&&!is_current_origin(opt.url)?new XDomainRequest:new XMLHttpRequest;var url=zescape.uri(opt.url,opt.qs);var wait=this.wait();if(opt.timeout){this.alarm(opt.timeout,function(){req.abort();wait.throw({status:null,status_text:"timeout",response_text:null})})}req.open(opt.method,url);type_helper.setup(req);if(opt.headers&&req.setRequestHeader){for(var header in opt.headers)req.setRequestHeader(header,opt.headers[header])}if(opt.with_credentials&&"withCredentials"in req)req.withCredentials=true;req.onload=function(){var status=req.status||200;if(status==1223)status=204;if(status>=200&&status<300){var res=type_helper.extract(req);if(opt.return_headers){return wait.continue({res:res,headers:req.getAllResponseHeaders?req.getAllResponseHeaders():""})}return wait.continue(res)}return wait.throw({status:status,status_text:req.statusText,response_text:req.responseText})};req.onerror=function(){wait.throw({status:req.status,status_text:req.statusText,response_text:req.responseText})};this.finally(function(){req.onload=req.onerror=null});var data=opt.data;if(data!=null){switch(typeof data){case"object":data=zescape.qs(data);break;case"string":data=zescape.uri_comp(data);break;default:data=data+""}if(req.setRequestHeader){req.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8")}}req.send(data);return wait}])};function ajax(opt){opt=assign({},raw_default_opt,ajax_default_opt,opt);var t0=Date.now();var url=zescape.uri(opt.url,opt.qs);zerr.debug("ajax("+opt.data_type+") url "+url);return etask([function(){return E.raw(opt)},function catch$(err){zerr.err("ajax("+opt.data_type+") failed url "+url+" data "+zerr.json(opt.data).substr(0,200)+" status: "+err.status+" "+err.status_text+"\nresponseText: "+(err.response_text||"").substr(0,200));if(err.status_text=="timeout")E.events.emit("timeout",this);throw err},function(response){var t=Date.now()-t0,slow=t>opt.slow;zerr[slow?"err":"debug"]("ajax("+opt.data_type+") "+(slow?"SLOW ":"ok ")+t+"ms url "+url);if(slow&&opt.perr)opt.perr({id:"be_ajax_slow",info:t+"ms "+url});return response}])}return E})})(); !function(e){if("function"==typeof define&&define.amd)define("cookie",e);else if("object"==typeof exports)module.exports=e();else{var n=window.Cookies,t=window.Cookies=e();t.noConflict=function(){return window.Cookies=n,t}}}(function(){function e(){for(var e=0,n={};e1){if(i=e({path:"/"},o.defaults,i),"number"==typeof i.expires){var s=new Date;s.setMilliseconds(s.getMilliseconds()+864e5*i.expires),i.expires=s}try{c=JSON.stringify(r),/^[\{\[]/.test(c)&&(r=c)}catch(a){}return r=t.write?t.write(r,n):encodeURIComponent(String(r)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),n=encodeURIComponent(String(n)),n=n.replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent),n=n.replace(/[\(\)]/g,escape),document.cookie=[n,"=",r,i.expires&&"; expires="+i.expires.toUTCString(),i.path&&"; path="+i.path,i.domain&&"; domain="+i.domain,i.secure?"; secure":""].join("")}n||(c={});for(var p=document.cookie?document.cookie.split("; "):[],u=/(%[0-9A-Z]{2})+/g,d=0;d1?sprintf.apply(null,args):args[0];log(E.type,s,opt);if(opt.perr_id&&E.perr)E.perr({id:opt.perr_id,info:s})}catch(err){console.error("error in log_cdn",E.type,s,err);if(E.perr)E.perr({id:"log_cdn_err",info:s,bt:err.stack})}}function extend_opt(def_opt){if(def_opt.muted)return;var args=[].slice.call(arguments,1);var opt={};if(typeof args[args.length-1]=="object")opt=assign({},args.pop());log_cdn.apply(this,args.concat(assign(opt,def_opt)))}var log_levels={crit:1,err:2,warn:3,notice:4,info:5,debug:6};function log_level_handler(opt,level){var level_opt=level=="console"?{console_log:true,level:"info"}:{level:level};return extend_opt.bind(E,assign({},opt,level_opt))}function log_create(opt){opt=opt||{logs:[]};return{crit:log_level_handler(opt,"crit"),err:log_level_handler(opt,"err"),warn:log_level_handler(opt,"warn"),notice:log_level_handler(opt,"notice"),info:log_level_handler(opt,"info"),debug:log_level_handler(opt,"debug"),console:log_level_handler(opt,"console"),set_module:function(module){return log_create(assign({},opt,{module:module}))},reset_module:function(){return this.set_module(null)},mute:function(){return log_create(assign({},opt,{muted:true}))},unmute:function(){return log_create(assign({},opt,{muted:false}))},get_logs:function(){return opt.logs},reset_logs:function(){opt.logs.splice(0,opt.logs.length)},logs_to_str:function(logs,full_log){return logs_to_str(logs||opt.logs,full_log)},concat:function(logs,need_sort){return logs_concat(opt.logs,logs,need_sort)},fork:function(id){return log_create(assign({},opt,{id:id,logs:opt.logs.slice()}))},stash:function(){var stash=opt.logs.slice();return function(){zutil.clone_inplace(opt.logs,stash)}}}}assign(E,log_create());E.settings_def=function(){return{log_level:"notice",max_size:2048,max_full_history_size:8192}};E.settings=E.settings_def();E.init=function(opt){E.settings=assign({},E.settings_def(),storage.get_json("hola_log_settings"),zutil.clone_deep(opt))};E.set=function(o,no_storage){if(!no_storage)storage.set_json("hola_log_settings",o);E.settings=assign({},E.settings_def(),zutil.clone_deep(o))};E.log_is=function(level){return log_levels[E.settings.log_level]>=log_levels[level]};E.full_history=[];function pad(num,size){return E.zmocha_pad||("000"+num).slice(-size)}function log(type,s,opt){opt=opt||{};var logs=opt.logs||E.get_logs();var msg=type+(opt.module?"/"+opt.module:"")+": "+s;var slevel=opt.level||"debug";var level=log_levels[slevel];var set_level=log_levels[E.settings.log_level||"notice"];var print=false;if(opt.console_log)print=true;else if(level<=set_level){var mods=E.settings.log_modules;if(!opt.module||!mods)print=true;else if(mods&&(mods.includes(opt.module)||mods.includes("*")))print=true}var d=zutil.is_mocha()?E.zmocha_date||new Date:new Date;var _msg=date.to_sql_ms(d)+" ["+(opt.id||0)+"] "+msg;if(print){var l=E.level_to_console(slevel);if(zutil.is_mocha()&&E.zmocha_test_log){E.zmocha_console=E.zmocha_console||[];E.zmocha_console.push(l+" "+_msg)}else console[l](_msg)}E.full_history.push(_msg);if(level<=Math.max(log_levels.info,set_level))logs.push(date.to_log_ms(d)+pad(logs.length,3)+" "+msg);var max_full=E.settings.max_full_history_size||8192;var max_size=E.settings.max_size||2048;if(!E.debug_mode&&E.full_history.length>max_full)E.full_history.splice(0,max_full/2);if(!E.debug_mode&&logs.length>max_size)logs.splice(0,max_size/2)}E.level_to_console=function(level){switch(level){case"crit":return"error";case"err":return"error";case"warn":return"warn";case"notice":return"log";case"info":return"info";case"debug":return zutil.is_mocha()?"info":"debug";default:console.error("invalid level",level);return"error"}};function logs_to_str(logs,full_log){if(!logs)return"no logs";var size=E.settings.max_size/2;if(!full_log&&logs.length>size)logs=logs.slice(-size);return array.to_nl(logs)||"empty logs"}function logs_concat(logs,logs2,need_sort){var combined_logs=(logs||[]).concat(logs2||[]);if(need_sort)combined_logs.sort();return combined_logs}E.set_perr=function(perr_func){E.perr=perr_func};return E})})(); (function(){var __hola_stub_define;var is_node=typeof module=="object"&&module.exports&&module.children;if(!is_node)define=define||self.define;else define=require("./require_node.js").define(module,"../");define("/util/rand.js",["/util/array.js"],function(array){var E={};var is_jtest=false;var jtest_vals={};var MAX_INT=2147483647;var MIN_INT=-MAX_INT-1;function jtest_pop(s){var elm;if(s===undefined)return null;if((elm=jtest_vals[s])===undefined)return null;return elm.shift()}E.rand=function(s){var ret;if(is_jtest&&(ret=jtest_pop(s))!==null)return ret;return Math.random()};E.rand_int=function(s){var ret;if(is_jtest&&(ret=jtest_pop(s))!==null)return ret;return Math.floor(Math.random()*(MAX_INT-MIN_INT+1))-MAX_INT};E.rand_range=function(from,to,s){var ret;if(is_jtest&&(ret=jtest_pop(s))!==null)return ret;return Math.floor(Math.random()*(to-from))+from};E.jtest_push=function(s,arr){if(!jtest_vals[s])jtest_vals[s]=[];if(Array.isArray(arr))array.push(jtest_vals[s],arr);else jtest_vals[s].push(arr)};E.jtest_init=function(){is_jtest=true;jtest_vals={}};E.jtest_uninit=function(){is_jtest=false};E.basic_u32=function(v){return 1103515245*v+12345>>>0};E.basic_u31=function(v){return 1103515245*v+12345&2147483647};return E})})(); !function(n){function t(n,t){var r=(65535&n)+(65535&t),e=(n>>16)+(t>>16)+(r>>16);return e<<16|65535&r}function r(n,t){return n<>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<>>9<<4)+14]=r;var e,i,a,h,d,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e>5]>>>t%32&255);return r}function h(n){var t,r=[];for(r[(n.length>>2)-1]=void 0,t=0;t>5]|=(255&n.charCodeAt(t/8))<16&&(o=i(o,8*n.length)),r=0;16>r;r+=1)u[r]=909522486^o[r],c[r]=1549556828^o[r];return e=i(u.concat(h(t)),512+8*t.length),a(i(c.concat(e),640))}function g(n){var t,r,e="0123456789abcdef",o="";for(r=0;r>>4&15)+e.charAt(15&t);return o}function v(n){return unescape(encodeURIComponent(n))}function m(n){return d(v(n))}function p(n){return g(m(n))}function s(n,t){return l(v(n),v(t))}function C(n,t){return g(s(n,t))}function A(n,t,r){return t?r?s(t,n):C(t,n):r?m(n):p(n)}"function"==typeof define&&define.amd?define("md5",[],function(){return A}):"object"==typeof module&&module.exports?module.exports=A:n.md5=A}(this); (function(){var __hola_stub_define,is_node=typeof module=="object"&&module.exports;if(!is_node)define=define||self.define;else{var define_node=require("../../../util/require_node.js").define(module,"../");define=function(name,deps,fn){return define_node(name,["/util/url.js"],fn)}}define("/svc/cdn/pub/util.js",["/util/url.js","/util/ajax_lite.js","/util/storage.js","/util/escape.js","/util/zerr.js","/util/user_agent.js","/util/etask.js","/util/date.js","/util/array.js","/util/util.js","/svc/cdn/pub/log.js","/util/events.js","/util/rand.js","md5","/util/rate_limit.js"],function(zurl,ajax,storage,zescape,zerr,user_agent,etask,date,array,zutil,_log,events,rand,md5,rate_limit){var def_perr_url="//perr.h-cdn.com/be_client_cgi/perr";var E={conf:{}};var assign=Object.assign;var log;if(is_node){}else{E.geoip=zutil.clone(storage.get_json("hola_geoip")||{});E.perr_url=def_perr_url;E.jtest={};E.uri_opts_list=["tech"];E.session_id="session_id_"+rand.rand("cdn_session_id");var protocol=typeof window!="undefined"&&window.location&&window.location.protocol;E.protocol=!protocol||!protocol.startsWith("http")?"http:":protocol;log=_log.set_module("util");E.ERR={failed:-1,ranges_unsupported:-2,aborted:-3,head_unsupported:-4,disconnected:-5,unicode_bom:-6};E.ERR_str={"-1":"failed","-2":"ranges_unsupported","-3":"aborted","-4":"head_unsupported","-5":"disconnected","-6":"unicode_bom"};E.BEFOREUNLOAD=typeof navigator!="undefined"&&navigator.userAgent.match(/iPad|iPhone|iPod/)?"pagehide":"beforeunload";E.browser_init=function(ua,platform){var browser=E.browser=user_agent.guess_browser(ua);var guess=E.guess=user_agent.guess(ua,platform);E.is_chrome=browser.browser=="chrome"&&!browser.opera;E.is_firefox=browser.browser=="firefox";E.is_ie=browser.browser=="ie";E.is_opera=browser.opera;E.is_safari=browser.browser=="safari";E.is_windows=guess.os=="windows";E.is_android=guess.os=="android";E.is_winphone=guess.os=="winphone";E.is_mac=guess.os=="macos";E.is_ios=guess.os=="ios";E.is_linux=guess.os=="linux";E.is_webos=guess.os=="webos";E.is_mobile=guess.mobile;E.is_tv=guess.tv;E.is_ios_sdk=browser.hola_ios;E.is_android_sdk=browser.hola_app;E.browser_rule_s=E.browser.opera?"opera":E.browser.hola_app?"android_app":E.browser.hola_ios?"ios_app":E.browser.webos_app?"webos_app":E.browser.chromium_based?"chromium_based":E.browser.browser};E.browser_init();E.fix_url=function(url){return url.startsWith("//")?E.protocol+url:url};function dom_query_fn(method){return function(selector){var root=document[method]?document:document.body&&document.body[method]?document.body:document.createElement("div");return root[method](selector)}}E.dom_query=dom_query_fn("querySelector");E.dom_query_all=dom_query_fn("querySelectorAll");E.dom_listen=function(element,on_dom_change){if(window.MutationObserver){var observer=new window.MutationObserver(on_dom_change);observer.observe(element,{childList:true,subtree:true});return observer.disconnect.bind(observer)}if(window.MutationEvent&&element.addEventListener){E.cdn_perr({id:"using_mutation_events",info:{from:"dom_listen"}});document.addEventListener("DOMSubtreeModified",on_dom_change);return element.removeEventListener.bind(element,"DOMSubtreeModified",on_dom_change)}E.cdn_perr({id:"dom_listen_unavailable"});return function(){}};E.attr_watch=function(element,opt){if(window.MutationObserver){var observer=new window.MutationObserver(function(mutations){var first;if(first=mutations.find(function(record){return record.attributeName==opt.attr})){opt.watch_fn(first.oldValue,element.getAttribute(opt.attr))}});observer.observe(element,{attributes:true,attributeOldValue:true});return observer.disconnect.bind(observer)}if(window.MutationEvent&&element.addEventListener){var on_attr_modified=function(e){if(e.attrName==opt.attr)opt.watch_fn(e.prevValue,e.newValue)};E.cdn_perr({id:"using_mutation_events",info:{from:"attr_watch"}});element.addEventListener("DOMAttrModified",on_attr_modified);return element.removeEventListener.bind(element,"DOMAttrModified",on_attr_modified)}E.cdn_perr({id:"attr_watch_unavailable"})};E.send_beacon=function(url,data){if(typeof navigator!="undefined"&&navigator.sendBeacon){data.send_type="BEACON";if(navigator.sendBeacon(url,to_form_data(data)))return;data.send_type=undefined;E.cdn_perr({id:"send_beacon_err"})}data.send_type="POST";ajax.raw({url:E.fix_url(url),data:data,method:"POST"})};E.is_numeric=function(n){return!isNaN(n)&&n!=null&&n!=Infinity};E.valid_ranges=function(ranges){return ranges&&(!ranges.length||ranges.every(function(r){return E.is_numeric(r.from)&&E.is_numeric(r.to)}))};E.set_local_conf=function(local){storage.set_json("hola_local_conf",local)};E.get_local_conf=function(){var local=storage.get_json("hola_local_conf")||{};if(local.ver!=E.conf.ver)E.set_local_conf(local={ver:E.conf.ver});return local};E.get_dbg_conf=function(){var dbg_conf=storage.get_json("hola_dbg_conf");var window_dbg_conf=typeof window!="undefined"&&window.hola_dbg_conf;if(!window_dbg_conf&&!dbg_conf)return;dbg_conf=zutil.extend_deep({},window_dbg_conf,dbg_conf);log.warn("using hola_dbg_conf %O",dbg_conf,{});return dbg_conf};E.init=function(conf){if(E.inited)return;E.perr_sent={};E.perr_rl_hash={};E.inited=true;E.conf=zutil.extend_deep({},conf,E.get_local_conf(),E.get_dbg_conf());E.perr_url=E.conf.perr_url||def_perr_url;E.ver=E.conf.ver;E.loader=E.loader||{};E._events=new E.events;E.debug_err_url_rx=storage.get("hola_debug_err_url_rx");if(typeof window!="undefined")window.addEventListener(E.BEFOREUNLOAD,on_beforeunload);if(typeof document!="undefined"&&document.visibilityState)document.addEventListener("visibilitychange",on_visibilitychange)};function on_beforeunload(){E.is_beforeunload=true;E._events.emit("beforeunload")}function on_visibilitychange(){if(document.visibilityState=="visible")E._events.emit("visible_state");if(document.visibilityState=="hidden")E._events.emit("hidden_state")}E.conf_enable=function(path,save){E.conf_set(path,true,save)};E.conf_disable=function(path,save){E.conf_set(path,false,save)};E.conf_set=function(path,val,save,conf){path=path.split(".");conf=conf||E.conf||{};var i,c={},_c=c;for(i=0;i=opt.throttle)return;perr_rate_limit(opt);var data=opt.data||{};data.sent=data.sent||{};var info=typeof opt.info!="object"?{_info:opt.info}:opt.info;var customer,zone=opt.zone||{};if(!info.customer&&(customer=E.conf.customer))info.customer=customer;if(!info.zone&&zone.name)info.zone=zone.name;if(!info.method&&zone.method)info.method=zone.method;info.hola_mode=info.hola_mode||zone.mode;info.dashboard=";type="+(zone.stream_type||"unknown")+(zone.player_type?";player="+zone.player_type:"")+(zone.tech?";tech="+zone.tech:"");var url=data.url||opt.url||(typeof window!="undefined"&&window.top===window?location.href:typeof document!="undefined"&&document.referrer);var match=url?url.match(/^http(s)?:\/\/(www\.)?([a-zA-Z0-9-\.]+)\/.*$/):null;info.site=match?match[3]:"unknown";info.frame=typeof window!="undefined"&&window.top!==window;info.url=url;info.location_url=typeof location!="undefined"&&location.href;info.referrer=typeof document!="undefined"&&document.referrer;info.referrer_type=E.referrer_type(info.location_url,info.referrer,E.conf_get("loader.referrer_internal_regex"));assign(info,opt.extra,{file:data.file,link:data.link,err:opt.err||info.err});info.is_embed=is_embed;info.is_touch=is_touch;info.support_fullscreen=user_agent.support_fullscreen();var nc;if(typeof navigator!="undefined"&&(nc=navigator.connection))info.connection={type:nc.type,downlink_max:nc.downlinkMax};if(zone.bwsaver)info.bw_saving=zone.bwsaver;if(zone.video_url&&!info.video_url)info.video_url=zone.video_url;if(zone.video_live&&info.video_live===undefined)info.video_live=zone.video_live;if(zone.player_info)info.player_info=zone.player_info;if(E.is_beforeunload)info.before_unload=true;E.perr_sent[id]=E.perr_sent[id]+1||1;info.session_id=E.session_id;info.tag=E.loader&&E.loader.tag;info.analysis_tag=opt.analysis_tag;perr_raw({tag:E.loader&&E.loader.tag,session_id:E.session_id,id:opt.prefix+id,info:zerr.json(info),customer:customer,zone:zone.name,bt:opt.bt,browser:opt.browser,filehead:opt.filehead,use_beacon:opt.use_beacon,perr_url:opt.perr_url,wrapper:opt.wrapper,delay:!!opt.delay&&opt.prefix=="www_cdn_db_",delayed_perrs:opt.delayed_perrs})}_log.set_perr(function(opt){return E.cdn_perr(opt)});E.cdn_perr=function(opt){if(opt.skip&&opt.skip.includes(opt.id))return;if(opt.filehead)opt.filehead+="\n\n";opt.filehead=opt.filehead||"";var logs;if(opt.add_log){var log_obj=opt.zone?opt.zone.log:_log;if(opt.full)opt.filehead+=log_obj.logs_to_str(_log.full_history,true);else{if(opt.player_logs)logs=log_obj.concat(opt.player_logs,true);opt.filehead+=log_obj.logs_to_str(logs,opt.full_log)}}else opt.filehead+="no log requested";return db_perr(assign(opt,{prefix:"www_cdn_db_"}))};E.stream_fetch_bin=function(opt){opt.timeout=opt.timeout||2e4;var sp,reader,url;function send_fetch(opt){opt.progress=0;opt.fullsize=0;fetch(url).then(function(res){opt.fullsize=res.headers.get("Content-Length");sp.continue(res.body.getReader())}).catch(function(e){sp.continue(e)})}sp=etask({name:"fetch_bin_fetch",cancel:true},[function(){url=zescape.uri(opt.url);this.opt=opt;send_fetch(opt);return this.wait(opt.timeout)},function(_reader){reader=_reader||{};if(this.error||!reader.read)throw"failed fetch request";return etask.while(null,[function(){var _this=this;reader.read().then(function(result){if(result.done)return _this.break();var chunk=result.value;opt.progress+=chunk.byteLength;if(opt.ondata)opt.ondata(chunk);return _this.continue()});return this.wait()}])},function catch$(err){this.return(-1)},function finally$(){if(reader)reader.cancel()}]);return sp};E.str2bin=function(s,offset){offset=offset||0;if(!s||!s.length)return;var arr=new Uint8Array(s.length-offset);var dv=new DataView(arr.buffer);for(var i=offset,j=0;i=9){xhr.responseType="moz-chunked-arraybuffer";xhr.onprogress=fallback_wrapper(function(ev){var res=xhr.response;if(!res){if(!perr_no_res_sent){perr_no_res_sent=true;E.cdn_perr({id:"on_progress_no_res",delay:true})}return}update_xhr_progress(xhr,ev);opt.served=ev.loaded;opt.progress=ev.loaded-res.byteLength;opt.onreadystatechange(xhr,{progress:opt.progress,data:res,last_progress:date.monotonic()});if(opt.onprogress)opt.onprogress.call(xhr,ev)})}else opt.streaming=false;break;default:opt.streaming=false;break}}xhr.streaming=opt.streaming;xhr.send(opt.data);return this.wait(opt.timeout)},function(res){if(this.error||!res)throw"failed fetch request";res.hdrs=E.get_resp_hdrs(xhr);if(!res.fullsize){var v;if(v=E.fullsize_from_xhr(xhr))res.fullsize=+v;else if(!opt.hrange&&(!opt.headers||!opt.headers.Range)){res.fullsize=!res.data?0:res.data.byteLength||res.data.length}}res.status=xhr.status;return res},function catch$(err){this.return()},function finally$(){opt.aborted=true;if(xhr.readyState=this.ws.CLOSING)return;if(this.ws.readyState=b.start(i)&&pos<=b.end(i))return{from:b.start(i),to:b.end(i)}}return{from:pos,to:pos}};E.build_flash_api=function(_this){function call_api(name,check){var f,slice=Array.prototype.slice;if(_this.swf&&(f=_this.swf["hola_"+name]))return check?!!f:f.apply(_this.swf,slice.call(arguments,2))}return{_call_api:call_api,set_bandwidth:call_api.bind(null,"setBandwidth",false),version:call_api.bind(null,"version",false),avail_version:call_api.bind(null,"version",true),settings:call_api.bind(null,"settings",false),avail_settings:call_api.bind(null,"settings",true),set_timeout:call_api.bind(null,"setTimeout",false),avail_set_timeout:call_api.bind(null,"setTimeout",true)}};E.get_elm_resolution=function(elm){var st=elm&&getComputedStyle(elm);if(!st)return;var full_screen=!(document.fullScreenElement!==undefined&&document.fullScreenElement===null||document.msFullscreenElement!==undefined&&document.msFullscreenElement===null||document.mozFullScreen!==undefined&&!document.mozFullScreen||document.webkitIsFullScreen!==undefined&&!document.webkitIsFullScreen);return{width:parseInt(st.width,10),height:parseInt(st.height,10),full_screen:full_screen}};E.max_qid_by_resolution=function(playlists,res){var have=0,max_level=playlists.length-1,chosen=max_level;if(!res||!res.width||!res.height)return max_level;for(var i=max_level;i>=0;i--){var _res=playlists[i].attributes.resolution;var bandwidth=playlists[i].attributes.bandwidth;if(!_res||!_res.width||!_res.height||bandwidth<=64e3)continue;have++;chosen=i;if(_res.width==res.width&&_res.height==res.height)break;if(+_res.width<+res.width&&+_res.height<+res.height){chosen=Math.min(i+1,max_level);break}}return chosen};E.get_bitrate_rank=function(player){var res=player.get_resolution();if(!res)return"unknown";var playlist=player.get_current_playlist();var playlists=player.get_playlists();if(!playlist||!playlists)return"unknown";var qid=playlist.level_idx;var best=E.max_qid_by_resolution(playlists,res);return qid>best?"high":qid>>0;return hash};E.create_fake_xhr=function(opt){var fake_xhr={setup:{},req_headers:[]};opt.log=opt.log.set_module("util");fake_xhr.open=function(verb,url){fake_xhr.verb=verb;fake_xhr.url=url};fake_xhr.setRequestHeader=function(header,value){fake_xhr.req_headers.push([header,value])};fake_xhr.getAllResponseHeaders=function(){};fake_xhr.send=function(){fake_xhr.sent=true;opt.onsend()};fake_xhr.abort=function(){if(!fake_xhr.req||fake_xhr.req.error===E.ERR.aborted||fake_xhr.req.info.rate){return}fake_xhr.req.abort();if(opt.onabort)opt.onabort();opt.log.notice("req aborted",fake_xhr.req.name);if(fake_xhr.onabort)fake_xhr.onabort();if(fake_xhr.onloadend)fake_xhr.onloadend()};return fake_xhr};E.update_fake_xhr=function(req){var fake_xhr=req.info.segment.fake_xhr,err=req.error;fake_xhr.response=err?null:req.res.data;fake_xhr.status=err?404:200;fake_xhr.responseURL=fake_xhr.url;fake_xhr.resp_hdrs=(req.resp||{}).hdrs;if(!err){var ev={loaded:req.res.size,total:req.res.size,target:fake_xhr,lengthComputable:true};if(fake_xhr.onload)fake_xhr.onload(ev)}if(fake_xhr.onloadend)fake_xhr.onloadend();return fake_xhr};E.module_fn=function(module,target){var name=typeof target=="function"?target.name:target;function get_orig(){var s=module.Player.super_,proto_fn=s&&s.prototype[name];return typeof target=="string"&&proto_fn?proto_fn:target}module.Player.prototype[name]=function(a1,a2,a3){var len=arguments.length,mod_fn=this.module&&this.module[name];var fn=mod_fn||get_orig(),fn_this=mod_fn?this.module:this;if(typeof fn!="function")return;switch(len){case 0:return fn.call(fn_this);case 1:return fn.call(fn_this,a1);case 2:return fn.call(fn_this,a1,a2);case 3:return fn.call(fn_this,a1,a2,a3);default:var args=new Array(len);for(var i=0;i0?out_len:0);for(var i=3;iact_i)return false}return true}E.is_old_hola_player=function(ver){return ver&&!check_ver(ver,min_hola_player_version)};E.is_old_swf=function(ver){if(!ver)return;for(var i=0,l=swf_versions.length;i=0&&to>=this.size){log.debug("map err update chunk.to "+to+" extends past map size "+this.size)}this.set_cache_range(from,to,ts,info);if(ts&&!this.date||ts>this.date)this.date=ts;this.sum+=to+(this.exclude_end?0:1)-from;this.ranges.push.apply(this.ranges,[{from:from,to:to}]);this.last_ts=date();if(!this.cache_ranges)this.info=info;this.compress()};E.Map.prototype.remove=function(from,to){if(this.size>=0&&to>=this.size){log.debug("map err remove chunk.to "+to+" extends past map size "+this.size)}var i,c;if(this.cache_ranges){if(!(c=this.get_cache_range(from,to)))return;array.rm_elm(this.cache_ranges,c)}var rm=[],add=[];for(i=0;i=from&&(to<0||r.to<=to))rm.push(r);else if(r.fromto){add.push({from:to+1,to:r.to});r.to=from-1}else if(r.from=to)r.from=to+1}var _this=this;rm.forEach(function(r){array.rm_elm(_this.ranges,r)});add.forEach(function(r){_this.ranges.splice(0,0,r)});this.last_ts=date();this.compress()};E.Map.prototype.get_cache_range=function(from,to){if(!this.cache_ranges)return;for(var i=0;i=0)to=to>=0?Math.min(to,this.size-1):this.size-1;var i;for(i=0;i=0&&from>to?null:{from:from,to:i==this.ranges.length?to:to<0?this.ranges[i].from-1:Math.min(to,this.ranges[i].from-1)}};E.Map.prototype.next_obtained=function(from,to){for(var i=0;i-1&&c.from>to)break;return{from:Math.max(c.from,from),to:to<0?c.to:Math.min(c.to,to),date:this.date,info:this.info}}return null};E.Map.prototype.next_obtained_exact=function(from,to){for(var i=0;i-1&&c.from>to)break;return{from:c.from,to:c.to,date:c.date,info:c.info,i:i}}return null};E.Map.prototype.summarize=function(){this.sum=0;this.ranges.forEach(function(r){this.sum+=r.to+(this.exclude_end?0:1)-r.from},this)};E.Map.prototype.compress=function(){this.ranges.sort(function(a,b){return a.from-b.from});if(this.cache_ranges)this.cache_ranges.sort(function(a,b){return a.from-b.from});var changed=1,changed_once=0;while(changed){changed=0;for(var i=this.ranges.length-1;i>=0;i--){if(!i||this.ranges[i-1].to+1r.from||n.toc.to){m.cache_ranges.splice(i,1);i--;continue}c.date=date(c.date)}maps[host]=new map.Map({ranges:m.ranges,sum:m.sum,last_ts:m.last_ts,cache_ranges:m.cache_ranges});maps[host].date=date(m.date);maps[host].path=m.path;maps[host].info=m.info}if(maps)u.maps=maps;var list=new map.Map;for(m in maps)list.merge(maps[m]);list.last_ts=u.map.last_ts;list.summarize();u.map=list}var data=storage.get_json("hola_bwsaver_cache");if(!data||data.version!=E.version){if(log){log.debug("cache "+(!data?"not found":"version mismatch "+data.version+"!="+E.version))}return{urls:{}}}for(var url in data.urls){var u=data.urls[url];if(data.urls[url].ids){for(var qid in data.urls[url].ids)read_entry(data.urls[url].ids[qid]);if(u.map)read_entry(u);continue}read_entry(u)}return data};gCache.prototype.save=function(opt){var _this=this,url;function update_entry(cur,stored,qid){if(cur.last_ts<_this.read_ts)return;if(stored&&cur.cache_ranges!=stored.cache_ranges)stored=null;if(!stored){if(qid)return void(data.urls[url].ids[qid]=cur);return void(data.urls[url]=cur)}if(cur.single_copy)stored.single_copy=cur.single_copy;if(cur.popular)stored.popular=cur.popular;if(!stored.map)stored.map=cur.map;else if(cur.map.last_ts>_this.read_ts)stored.map.merge(cur.map);for(var cdn in cur.maps){if(!stored.maps[cdn])stored.maps[cdn]=cur.maps[cdn];else if(cur.maps[cdn].last_ts>_this.read_ts){stored.maps[cdn].merge(cur.maps[cdn]);stored.maps[cdn].date=cur.maps[cdn].date;stored.maps[cdn].host=cur.maps[cdn].host}}}opt=opt||{};var now=date.monotonic();if(!opt.close&&now-this.last_save<=5*date.ms.SEC)return;var data=this.read_storage(opt.log);if(!data)data=this.data;else{for(url in this.data.urls){var cur=this.data.urls[url];var stored=data.urls[url];if(this.data.urls[url].ids){data.urls[url]=data.urls[url]||{};data.urls[url].ids=data.urls[url].ids||{};for(var qid in this.data.urls[url].ids){cur=this.data.urls[url].ids[qid];stored=data.urls[url].ids[qid];update_entry(cur,stored,qid)}continue}update_entry(cur,stored)}data.single_copy=this.data.single_copy;data.fast=this.data.fast;data.popular=this.data.popular}try{while(JSON.stringify(data)>this.max_size)this.clean_oldest();data.version=E.version;storage.set_json("hola_bwsaver_cache",data);this.last_save=now;if(opt.close&&opt.log)opt.log.debug("saved "+JSON.stringify(data))}catch(err){perr({id:"bwsaver_cache_err_failed_save",err:err,delay:true});storage.clr("hola_bwsaver_cache")}};E.is_cachable=function(hdrs){if(!hdrs||!hdrs.etag)return 0;if(!hdrs["cache-control"]){if(!hdrs["last-modified"]||!hdrs.date)return 0;var diff=new Date(hdrs.date)-new Date(hdrs["last-modified"]);return diff>=10*date.ms.MIN?diff/10/date.ms.SEC:0}var cc=util.parse.cache_control(hdrs["cache-control"]);return cc["no-cache"]||cc["no-store"]||(cc["max-age"]||0)<=0?0:+cc["max-age"]};return E}); define("/svc/cdn/pub/cdnlist.js",["/util/util.js","/svc/cdn/pub/util.js","/util/storage.js","/util/date.js","/util/etask.js","/util/url.js","/util/events.js","/util/array.js","/util/escape.js"],function(zutil,util,storage,date,etask,zurl,events,array,zescape){var E={};var KB=1024,assign=Object.assign;var ms_since=util.ms_since;E.version="5";E.Cdn=function Cdn(opt){opt=opt||{};if(!(this instanceof E.Cdn))return new E.Cdn(opt);this.ms_hdrs=this.bpms=this.bytes=this.fail=0;this.success=this.delayed=this.aborted_bytes=0;this.aborted=this.ttfb_n=this.ttfb=0;this.enabled=1;this.cache={hit:{},miss:{}};this.cost=+opt.cost;this.req_uid=opt.req_uid||0;this.uid=opt.uid;this.role=opt.role;this.origin=opt.origin;this.owner=opt.owner;this.host=opt.host;this.country=opt.country;this.disconnect=this.disconnect_wait=this.disconnect_ts=0;this.CG=opt.CG;this.hostname=opt.hostname||opt.host;this.name=opt.name||opt.hostname||this.host;this.id="cw"+this.uid;this.learning=assign({},opt.learning);this.progress_bw={bw:0,samples:[],max:opt.max_samples||50};this.success_ts=this.fail_ts=0;this.split=this.split||{};if(typeof WebSocket=="function")this.add_ws_listener();if(opt.progress_bw)this.set_progress_bw(opt.progress_bw);return this};zutil.inherits(E.Cdn,events.EventEmitter);E.Cdn.prototype.get_progress_bw=function(){return this.progress_bw.bw};E.Cdn.prototype.set_progress_bw=function(bw){if(!bw)return;this.progress_bw.samples.push(bw);if(this.progress_bw.samples.length>this.progress_bw.max)this.progress_bw.samples.splice(0,Math.round(this.progress_bw.max/2));var sum=0;this.progress_bw.samples.forEach(function(a){sum+=a});this.progress_bw.bw=Math.round(sum/this.progress_bw.samples.length)};E.Cdn.prototype.is_hola=function(){return this.owner=="hola"};E.Cdn.prototype.is_origin=function(){return this.origin};E.Cdn.prototype.is_single=function(){return this.role=="single_copy"};E.Cdn.prototype.is_fast=function(){return this.role=="fast"};E.Cdn.prototype.is_bootstrap=function(){return this.role=="bootstrap"};E.Cdn.prototype.is_usable=function(){return this.enabled&&(!this.fail||date.monotonic()-this.fail_ts>10*date.ms.MIN||this.success_ts>this.fail_ts)};E.Cdn.prototype.update_from_hdrs=function(hdrs){hdrs=hdrs||[];this.update_cache_type(hdrs["x-cache"]);this.update_hola_resp(hdrs["x-hola-resp"])};E.Cdn.prototype.update_hola_resp=function(s){var resp=zescape.parse.http_words(s);for(var i=0;i=this.ms_hdrs*2?opt.elapsed:this.ms_hdrs}opt.ms=opt.ms||opt.elapsed-opt.ms_hdrs;this.update_stream_stats(opt);if(!opt.final)return;this.update_cache_stats(opt);if(!opt.error||opt.rate&&this.is_origin()){this.success++;this.success_ts=date.monotonic()}this.bytes+=opt.sz;if(opt.rate)this.rate_bytes=(this.rate_bytes||0)+opt.sz};E.Cdn.prototype.update_stream_stats=function(opt){var ms_hdrs=opt.ms_hdrs,ms=opt.ms,sz=opt.sz,elapsed=opt.elapsed;if(!ms_hdrs&&(!this.ms_hdrs||elapsed<=this.ms_hdrs))return;var replace=opt.replace||this.ms_hdrsms_hdrs*2;this.ms_hdrs=replace?ms_hdrs:Math.round((this.ms_hdrs*2+ms_hdrs)/3);if(opt.rate)return this.bpms=replace?0:this.bpms;if(!sz&&(!this.bpms||!opt.ms_hdrs)||sz<64*KB&&opt.ttcbpms*2;this.bpms=Math.round(!this.bpms||this.is_bw_from_cache()||replace?bpms||this.bpms/2:(this.bpms*2+bpms)/3)};E.Cdn.prototype.update_cache_stats=function(opt){var ms_hdrs=opt.ms_hdrs,ms=opt.ms,sz=opt.sz,elapsed=opt.elapsed;if(!ms_hdrs&&(!this.ms_hdrs||elapsed<=this.ms_hdrs))return;if(opt.rate&&!ms_hdrs||!opt.rate&&(!sz&&(!this.bpms||!ms_hdrs)||sz<64*KB&&elapsedms_hdrs*2;set.ms_hdrs=!set.ms_hdrs?ms_hdrs:Math.round((set.ms_hdrs*2+ms_hdrs)/3);if(opt.rate)return this.bpms=replace?0:this.bpms;set.from_cache=undefined;var new_rate=Math.round(512*KB/bpms);if(prev_rate<=new_rate*(this.CG("cdn.send_reqs.rate_decrease")||.7))this.emit("rate_decrease",this,prev_rate/new_rate);replace=replace||this.bpmsbpms*2;set.bpms=Math.round(!set.bpms||replace?bpms:(set.bpms*2+bpms)/3);set.bytes=(set.bytes||0)+sz};E.Cdn_list=function Cdn_list(opt){if(!(this instanceof E.Cdn_list))return new E.Cdn_list(opt);opt=opt||{};this.arr=[];this.uid=opt.uid||(E.bootstraps?E.bootstraps.uid:1);this.save_to=opt.save_to;this.length=0;this.CG=opt.zone.CG.bind(opt.zone)||function(){};this.zperr=opt.zone.perr_get();this.log=opt.zone.log_get().set_module("cdnlist");this.add(opt.cdns,opt.role);return this};zutil.inherits(E.Cdn_list,events.EventEmitter);E.Cdn_list.prototype.find=function(func,a){for(var i=0;i"+opt.role);c.role=opt.role}return}var bootstrap=E.bootstraps?E.bootstraps.get_by_host(host):null;var uid=opt.uid||(bootstrap?bootstrap.uid:null)||_this.uid;opt.req_uid=opt.req_uid||(bootstrap?1:null);assign(opt,{uid:uid,host:host});var cdn=new E.Cdn(assign({CG:_this.CG,role:role},opt));cdn.on("message",function(data){_this.emit("message",cdn,data);_this.emit("message."+data.cmd,cdn,data)});if(!bootstrap&&(!opt.uid||opt.uid==_this.uid))_this.uid++;_this.update_from_cache(cdn);_this.arr.push(cdn);_this.log.debug("added cdn "+JSON.stringify(opt)+" bw "+cdn.get_progress_bw()+" uid "+cdn.uid+" cost "+cdn.cost);_this.emit("cdn_added",cdn)}for(var i=0;i2e3&&(!disc_cdn||cdn.compare_rate(disc_cdn,{sz:sz,sec:sec})<0)){disc_cdn=cdn}}if((!pending||cdn.cost2e3&&(!disc_cdn||cdn.compare_rate(disc_cdn,{sz:opt.sz,sec:opt.sec})<0)){disc_cdn=cdn}}},this);best_cdn=best_cdn||disc_cdn;if(this.prev_best_cdn!==best_cdn){this.emit("new_best_cdn",best_cdn);this.log.debug("new best_cdn "+(best_cdn?best_cdn.id:"none")+" bpms "+(best_cdn?best_cdn.bpms:0)+" hdrs "+(best_cdn?best_cdn.ms_hdrs:0)+" rate "+(best_cdn?best_cdn.rate():0)+" caller "+caller)}this.prev_best_cdn=best_cdn;return best_cdn};E.Cdn_list.prototype.get=function(opt){this.arr.forEach(function(cdn){if(cdn.is_usable()&&(!opt.not||!opt.not.includes(cdn))&&(opt.delayed===undefined||!cdn.delayed)){return cdn}})};E.Cdn_list.prototype.get_by_id=function(id){return this.find(function(cdn){return cdn.id==id})};E.Cdn_list.prototype.get_by_host=function(host){return this.find(function(cdn){return cdn.host==host||cdn.redir_host==host||cdn.name==host||cdn.hostname==host})};E.Cdn_list.prototype.get_by_uid=function(uid){return this.find(function(cdn){return cdn.uid==uid})};E.Cdn_list.prototype.get_origin=function(){return this.find(function(cdn){return cdn.origin})};E.Cdn_list.prototype.read_storage=function(){if(!this.save_to)return{cdns:{}};var data=storage.get_json(this.save_to);if(!data||data.version!=E.version){this.log.debug("cdn cache "+(!data?"not found":"version mismatch "+data.version+"!="+E.version));return{cdns:{}}}return data};E.Cdn_list.prototype.update_from_cache=function(cdn){if(!this.cache)this.cache=this.read_storage();cdn.cache=this.cache.cdns[cdn.host]||{success_ts:0,hit:{bpms:0,ms_hdrs:0,bytes:0},miss:{bpms:0,ms_hdrs:0,bytes:0},delayed:0,success:0};cdn.cache.hit=cdn.cache.hit||{};cdn.cache.miss=cdn.cache.miss||{};if(cdn.success_ts>=cdn.cache.success_ts)return;cdn.cache_flag=cdn.cache.hit.bpms||!cdn.cache.miss.bpms?"hit":"miss";var cache=cdn.cache[cdn.cache_flag];cdn.bpms=cache.bpms;cdn.ms_hdrs=cache.ms_hdrs;if(!zutil.is_mocha()||!util.jtest.snapshot)cdn.cache.hit.from_cache=cdn.cache.miss.from_cache=true;cdn.delayed=cdn.cache.delayed;cdn.success=cdn.cache.success;cdn.success_ts=cdn.cache.success_ts;if(cdn.cache.progress_bw)cdn.set_progress_bw(cdn.cache.progress_bw)};E.Cdn_list.prototype.to_json=function(){var json={};for(var i=0;ithis.max_size){var oldest;for(cdn in data.cdns){if(!oldest||data[cdn].success_tslimit;var async=!zutil.is_mocha()&&zone.CG("cdn.url2cdn.async");url=zone.conf_apply("agent.url2vid",[url],url);function send_req(host,_opt){var cdn=E.bootstraps.get_by_host(host);if(zone.CG("cdn.send_reqs.https")||util.protocol=="https:")host=cdn.hostname;var opt={url:"//"+host+"/get_cdns?customer="+zone.CG("customer")+"&zone="+zone.CG("zone")+"&url="+encodeURIComponent(url),response_type:"json",method:"GET"};assign(opt,_opt);E.bootstraps.emit("get_cdns",opt,cdn);_this.spawn(util.fetch_bin(opt));zlog.debug("req init get cdns "+opt.url+" uid cw"+cdn.uid+"/"+opt.uid)}return etask({name:"url2cdns",cancel:true,async:async},[function loop(){_this=this;this.start_ms=date.monotonic();var cache=storage.get_json("hola_bootstrap_cache");if(Array.isArray(cache)&&cache.length){var had=E.bootstraps.get_by_host(cache[0].host);cache[0].uid=cdns?cdns.uid++:0;E.bootstraps.add([cache[0]],"bootstrap");send_req(cache[0].host,{from_cache:true});sent++;if(!had)limit=Math.min(5,keys.length+1);else array.rm_elm(keys,had.host)}zlog.info("bootstraping inited for "+url+" sending to "+limit+" cdns");if(util.jtest.bootstrap_wait&&zutil.is_mocha())return this.wait()},function(){return etask.for(function(){return sent=bl||i0?res[k].ts-res[k-1].ts:res[k].elapsed}return res};E.timeline_to_str=function(zone,all){var tl=E.timeline(zone),tr=E.LOG_THRESHOLD;function ev2str(e){return e.name+" "+e.ts+"ms +"+e.elapsed+"ms"}tl=all?tl:tl.filter(function(e,i){return e.elapsed>=tr||e.report||i=tr||tl[i+1].report)});return tl.map(function(e){return ev2str(e)}).join("\n")};return E}); define("/svc/cdn/pub/adaptive.js",["/svc/cdn/pub/util.js","/util/zerr.js","/util/date.js","/util/etask.js","/util/events.js","/util/util.js","/util/array.js","/util/url.js","/svc/cdn/pub/cache.js","/svc/cdn/pub/load_perf.js"],function(util,zerr,date,etask,events,zutil,array,zurl,zcache,load_perf){var E={};var assign=Object.assign,ERR=util.ERR;E.Method=function(opt){if(!(this instanceof E.Method))return new E.Method(opt);var _this=this;this.sent_perf_events=[];this.send_single_perf_event=function(name,report){if(this.sent_perf_events.includes(name))return;load_perf.push(name,this.bws.zone,report);this.sent_perf_events.push(name)};var player=this.player=opt.player;this.indexer={};this.bws=opt.bws;this.log=opt.bws.zone.log_get().set_module("adaptive");this.CG=this.bws.zone.CG.bind(this.bws.zone);this.CS=this.bws.zone.CS.bind(this.bws.zone);this.CE=this.bws.zone.CE.bind(this.bws.zone);this.fallback_wrapper=this.bws.fallback_wrapper.bind(this);this.segments=[];this.origins={};this.type="adaptive";this.adaptive=opt.adaptive;this.dur=10;this.choose_bw_src();load_perf.push("player_init_adaptive_start",this.bws.zone);player.init_adaptive(this);this.sort_reqs=function(){};this.set_fullsize=function(){};this.is_next_chunk=function(){return true};this.ondata=this.fallback_wrapper(this._ondata,"adaptive");this.on_live_manifest=function(data){this.send_playlist_to_cdns(data.url,data.format)}.bind(this);this.reset_segment_index=function(){this.last_segment_index=undefined}.bind(this);this.on_rate_decrease=function(cdn,per){var best_cdn=_this.bws.cdns.get_best_cdn("on_rate_decrease",{allow_fast:_this.bws.method.fast_allowed_range(this,{index:_this.last_segment_index})});if(best_cdn!=cdn)_this.CE("cdn.send_reqs.next_cdn.use_best_single");_this.bws.stats.rate_decrease++};this.on_cdn_added=function(cdn){cdn.on("rate_decrease",this.on_rate_decrease)}.bind(this);player.on("seeking",this.reset_segment_index);player.on("live_manifest",this.on_live_manifest);this.bws.cdns.on("cdn_added",this.on_cdn_added);this.CE("cdn.bwsaver.disable");if(!this.CG("cdn.send_reqs.origin_as_fastest")&&this.CG("cdn.send_reqs.origin.head_unsupported")){this.CE("cdn.send_reqs.origin_until_rated")}if(!this.CG("cdn.bwsaver.lowcost_watermark_sec")&&player.is_live_stream()){this.bws.lowcost_watermark_sec=15}};zutil.inherits(E.Method,events.EventEmitter);E.Method.prototype.uninit=function(){this.player.off("live_manifest",this.on_live_manifest);this.player.off("seeking",this.reset_segment_index);if(this.bws.cdns){this.bws.cdns.off("cdn_added",this.on_cdn_added);this.bws.cdns.forEach(function(cdn){cdn.off("rate_decrase",this.on_rate_decrease)})}this.emit("uninit")};E.Method.prototype.need_chunk=function(chunk){return!chunk.req.info.rate};E.Method.prototype.set_params=function(req){var s="",segment=req.info.segment;s+=util.set_param("stack",this.adaptive);s+=util.set_param("index",segment.index);s+=util.set_param("dur",segment.dur);s+=util.set_param("id",segment.playlist_id);s+=util.set_param("manifest",req.stream.bws.url_s);return s};E.Method.prototype.close_obtained_reqs=function(stream){for(var i=0;i_this.bw_src.bw)_this.bw_src={host:cdn.host,bw:bw||0}})};E.Method.prototype.onprogress=function(event,req){if(req.info.rate)return;function call_fakexhr(p){return["dashjs","dailymotion","vjs"].includes(p.name)}if(call_fakexhr(this.player)||this.player.module&&call_fakexhr(this.player.module)){var segment=req.info.segment;if(segment.fake_xhr&&segment.fake_xhr.onprogress)segment.fake_xhr.onprogress(event)}var bw=req.cdn.get_progress_bw();if(this.bw_src&&(req.info.from_cache||this.bw_src.host!=req.cdn.host&&this.bw_src.bw>bw)){this.log.debug("use best bw for "+req.cdn.host+"/"+bw+" replace by "+this.bw_src.host+" bw "+this.bw_src.bw);bw=this.bw_src.bw}else{this.bw_src={host:req.cdn.host,bw:bw};if(this.bw_src.host==req.cdn.host)this.choose_bw_src();if(bw!=this.bw_src.bw){this.log.debug("choose best bw for "+req.cdn.host+"/"+bw+" replace by "+this.bw_src.host+" bw "+this.bw_src.bw)}}this.log.debug("onprogress loaded "+event.loaded+" hola "+bw+" player bw "+this.player.get_bandwidth())};E.Method.prototype.oncomplete_req=function(req){var stream=req.stream,segment=req.info.segment;array.rm_elm(stream.reqs,req);if(!req.info.rate)this.emit("seg_complete",req);if(!req.error){stream.on_meta_data({bitrate:segment.bitrate,duration:segment.dur,start_hdr_sz:0});if(!req.info.rate){stream.map.update(segment.index,segment.index+1);this.log.debug("map updated "+JSON.stringify(stream.map.ranges));this.close_obtained_reqs(stream)}if(req.res.size)stream.set_slice_size(req.res.size,segment.dur,"oncomplete_req")}if(!this.CG("cdn.method.disable_set_bandwidth")&&this.player.flash_api){this.player.flash_api.set_bandwidth(this.bws.cdns.get_best_cdn_bw_bits())}if(req.error!=ERR.aborted){if(req.error&&!req.info.rate&&!req.info.clone)this.add_segment(segment);else stream.send_reqs()}};E.Method.prototype.add_segment=function(segment){this.add_origin(segment);var stream=this.get_stream_by_segment(segment);if(!stream&&segment.media_type=="audio"&&this.bws.streams.length==1)stream=this.bws.create_stream({id:"audio"});this.bws.emit("add_segment",segment,stream);this.segments.push(segment);if(stream){stream.last_segment=segment;stream.send_reqs()}};E.Method.prototype.remove_segment=function(segment){array.rm_elm(this.segments,segment)};E.Method.prototype.cache_set=function(req){if(req.info.rate||!this.bws.cache)return;var from=req.info.segment.index,to=req.info.segment.index;if(req.info.segment.range){from=req.info.segment.range.from;to=req.info.segment.range.to}this.bws.cache.opt.cache_ranges=!!req.info.segment.range;this.bws.cache.set({id:req.info.cache_id,host:req.cdn.host,path:req.cache_path,from:from,to:to,cache_date:req.resp.hdrs.date,info:{max_age:zcache.is_cachable(req.resp.hdrs),vary:req.vary_hdr,data_prefix:req.hola_resp.data_prefix}})};return E}); (function(){var __hola_stub_define;var is_node_ff=typeof module=="object"&&module.exports;if(!is_node_ff)define=define||self.define;else define=require("./require_node.js").define(module,"../");define("/util/string.js",["/util/array.js"],function(array){var E={};E.rm_empty_last=function(a){if(a[a.length-1]==="")a.pop();return a};E.split_trim=function(s,sep,limit){return array.compact_self(s.split(sep,limit))};E.split_ws=function(s){return E.split_trim(s,/\s+/)};E.qw=function(s){return E.split_ws(!Array.isArray(s)?s:E.es6_str(arguments))};E.chomp=function(s){return s.replace(/\n$/,"")};E.split_crlf=function(s){return E.rm_empty_last(s.split(/\r?\n/))};E.split_nl=function(s){return E.rm_empty_last(s.split("\n"))};E.to_array_buffer=function(s){var buf=new ArrayBuffer(s.length),buf_view=new Uint8Array(buf),i;for(i=0;i0&&spaces!=Infinity)lines=array.sed(lines,new RegExp("^ {"+spaces+"}"),"");return lines.join("\n")};E.nl2sp=function(){return E.es6_str(arguments).replace(/\n\s*/g," ")};E.detach=function(s){return(" "+s).slice(1)};return E})})(); (function(){var __hola_stub_define,is_node=typeof module=="object"&&module.exports;if(!is_node)define=define||self.define;else define=require("../../../util/require_node.js").define(module,"../");define("/svc/cdn/pub/timeline.js",["/util/util.js","/util/date.js","/util/escape.js","/util/array.js","/util/string.js"],function(zutil,date,zescape,array,string){var E=Timeline;var qw=string.qw;function Timeline(opt){this.opt=opt||{};this.last=date.monotonic();this.arr=[];var _this=this;if(!is_node&&window.performance){if(this.opt.ts)this.arr.push({name:"loader_ts",ts:this.opt.ts});this.arr.push({name:"nav_start",ts:window.performance.now?0:window.performance.timing.navigationStart,elapsed:0});if(window.performance.timing.domContentLoadedEventEnd){this.arr.push({name:"page_load",ts:window.performance.timing.domContentLoadedEventEnd,elapsed:window.performance.timing.domContentLoadedEventEnd-window.performance.timing.navigationStart})}else{document.addEventListener("DOMContentLoaded",function(event){_this.push("page_load")})}}this.push("stats_init")}Timeline.prototype.find=function(names,ops){names=array.to_array(names);ops=ops||{order:"last"};var i,arr=this.arr;if(ops.order=="last")for(i=arr.length-1;i>=0&&!names.includes(arr[i].name);i--);else for(i=0;i=0?arr[i]:null};Timeline.prototype.elapsed_from=function(name){function handle_arg(arg){var o=arg.split("=")[0],val=arg.split("=")[1];switch(o){case"order":ops.order=val;break}}var ops={order:"last"};var m=name.match(/([a-z,-_=]+:)?([a-z0-9_,]+)/);if(m[1])m[1].split(",").forEach(handle_arg);var e=this.find(m[2]?m[2].split(","):[name],ops);if(e)return date.monotonic()-e.ts};function is_seek(name){return/^(seek|info_seek)$/.test(name)}Timeline.prototype.push=function(name,params){var now=date.monotonic(),diff=now-this.last;var e=Object.assign({},{name:name,ts:now,elapsed:diff},params);var arr=this.arr,len=this.arr.length;for(var n in e){if(e[n]===undefined)delete e[n]}if(len&&is_seek(e.name)){if(arr[len-1].name=="seek"&&e.elapsed<100){e.name="scrub_begin";this.seek_count=1}else if(arr[len-1].name=="scrub_begin"){if(e.name=="info_seek")this.seek_count++;return}}if(e.name!="scrub_begin"&&e.name!="scrub_end"&&len&&arr[len-1].name=="scrub_begin"){this.push("scrub_end",{events:this.seek_count});this.push(name,params);return}arr.push(e);if(this.opt.log)this.opt.log(JSON.stringify(e));this.last=now;this.frames=Math.max(this.frames||0,e.frames||0);return diff};Timeline.prototype.last_name=function(){return this.arr[this.arr.length-1].name};Timeline.from_str=function(s){var timeline=new Timeline,a=qw(s),last,val;timeline.arr=[];for(var i=0;imax_ms?"_over_max":"";var s=prefix+event+postfix;if(!zutil.is_mocha()){var _s="_"+s.replace("_waiting","").replace("_over_max","");stats[_s+"_n"]=(stats[_s+"_n"]||0)+(n||1);stats[_s+"_ms"]=(stats[_s+"_ms"]||0)+(ms||0)}if(!no_max&&max_msdate.ms.MIN){s=prefix+event;stats[s+"_over_1min_n"]=(stats[s+"_over_1min_n"]||0)+1;if(opt.debug)console.debug("*** %s %dms #%d",s,ms,n||1);return}if(!ms&&!_opt.allow_zero)_throw(event+" too small");var _n=(stats[s+"_n"]||0)+(stats[s+"_over_"+max_n+"_n"]||0)+n;if(_n&&max_n&&_n>max_n){stats[s+"_over_"+max_n+"_n"]=_n;delete stats[s+"_n"];delete stats[s+"_ms"];return}if(n)stats[s+"_n"]=(stats[s+"_n"]||0)+n;else if(stats[s+"_ms"])_throw("multiple "+event);stats[s+"_ms"]=(stats[s+"_ms"]||0)+ms;if(opt.debug)console.debug("*** %s%s %dms #%d",prefix,event,ms,n||1)}function ad_played_full(pos,a){var ts=a.ts,dur;for(var i=pos-1;i>=0;i--){switch(arr[i].name){case"ad_time":dur=arr[i].eduration;break;case"ad_play":return dur&&ts-arr[i].ts>.9*dur*date.ms.SEC;case"ad_impression":return false}}return false}var stats={};var low_buffer_limit=.75*date.ms.SEC;var nav_start_ts,attached_ts,seek_ts,seeked_ts,buf_wait_ts,play_ts,s;var last_play_ts,ignore_fps_wait,freeze_ts,scrub_ts;var high_bitrate_ts,low_fps_ts,no_fps_ts,high_fps_ts,loader_ts;var prev_max,play_started,video_started,paused,started_paused;var native_hls,vjs_hds,disable_ad_start;var disable_ad_stats,disable_missing_bitrate;var disable_fps=!this.frames;var started_ad_playing,ad_playing,preroll_t0,preroll_t1;var midroll_t0,suspend_ts,restore_ts;var manifest_parsed_ts;var ad_download_ts,ad_config_ts,ad_start_ts;var ignore_seek_stats;try{for(var i=0;i1?"play_seek_start_waiting":"play_start_waiting",a.ts-(preroll_t1||play_ts||attached_ts),{paused:started_paused})}}else if(ad_playing){stats_inc("midroll_waiting",a.ts-midroll_t0,{allow_zero:true,no_max:true})}else if(!video_started&&restore_ts)stats_inc("restore_start_waiting",a.ts-restore_ts);else if(suspend_ts){stats_inc("suspend_waiting",a.ts-suspend_ts,{max_ms:5*date.ms.MIN})}else if(seek_ts){stats_inc("seek_waiting",a.ts-seek_ts,{paused:paused,allow_zero:true})}else if(play_ts){stats_inc("resume_waiting",a.ts-play_ts,{allow_zero:true})}else{if(a.ts-buf_wait_ts>=low_buffer_limit){stats_inc("buf_wait_waiting",a.ts-buf_wait_ts,{allow_zero:true});if(disable_fps&&!zutil.is_mocha()){stats_inc("wait_waiting",a.ts-buf_wait_ts,{allow_zero:true})}}}if(high_bitrate_ts){stats_inc("high_bitrate_waiting",a.ts-high_bitrate_ts,{no_max:true})}if(scrub_ts)stats_inc("scrub_waiting",a.ts-scrub_ts);if(freeze_ts)stats_inc("freeze_waiting",a.ts-freeze_ts);if(low_fps_ts)stats_inc("low_fps_waiting",a.ts-low_fps_ts);if(no_fps_ts){stats_inc("no_fps_waiting",a.ts-no_fps_ts);if(!ignore_fps_wait){stats_inc("fps_wait_waiting",a.ts-no_fps_ts);if(!disable_fps&&!zutil.is_mocha())stats_inc("wait_waiting",a.ts-no_fps_ts)}}if(high_fps_ts){stats_inc("high_fps",a.ts-high_fps_ts,{n:1,no_max:true})}if(!stats.play_start_ms&&!stats.play_start_over_max_ms&&!stats.play_start_over_1min_n&&!stats.play_start_waiting_ms&&!stats.play_start_waiting_over_max_ms&&!stats.play_start_waiting_over_1min_n&&!stats.paused_play_start_ms&&!stats.paused_play_start_over_max_ms&&!stats.paused_play_start_over_1min_n&&!stats.paused_play_start_waiting_ms&&!stats.paused_play_start_waiting_over_max_ms&&!stats.paused_play_start_waiting_1min_n&&!stats.paused_no_play_ms&&!stats.play_seek_start_ms&&!stats.play_seek_start_over_max_ms&&!stats.play_seek_start_over_1min_n&&!stats.play_seek_start_waiting_ms&&!stats.play_seek_start_waiting_over_max_ms&&!stats.play_seek_start_waiting_over_1min_n&&!stats.paused_play_seek_start_ms&&!stats.paused_play_seek_start_over_max_ms&&!stats.paused_play_seek_start_over_1min_n&&!stats.paused_play_seek_start_waiting_ms&&!stats.paused_play_seek_start_waiting_over_max_ms&&!stats.paused_play_seek_start_waiting_1min_n&&!stats.preroll_waiting_ms&&!stats.paused_play_start_waiting_over_1min_n){_throw("unexpected start")}break;case"play_start":if(!attached_ts)_throw("missing attached");if(play_started)_throw("multiple play_start");if(ad_playing)_throw("play_start in ad");if(buf_wait_ts)_throw("play_start without buf_wait_end");if(started_paused&&!play_ts)_throw("missing play");if(a.pos&&a.pos>1){stats_inc("play_seek_start",a.ts-(preroll_t1||play_ts||restore_ts||attached_ts),{paused:started_paused})}else{stats_inc("play_start",a.ts-(preroll_t1||play_ts||restore_ts||attached_ts),{paused:started_paused});if(!started_paused&&!started_ad_playing&&loader_ts){stats_inc("init_start",a.ts-loader_ts,{n:1,no_max:true})}}if(no_fps_ts)ignore_fps_wait=true;video_started=play_started=true;play_ts=undefined;restore_ts=undefined;if(nav_start_ts!==undefined)stats.time_to_play_ms=a.ts-nav_start_ts;break;case"restore_start":if(video_started)_throw("multiple restore_start");video_started=true;stats_inc("restore_start",a.ts-restore_ts,{n:1});restore_ts=undefined;break;case"seek":ignore_seek_stats=false;if(ad_playing)_throw("seek in ad");if(!video_started){_throw("seek before "+(!play_started?"play_start":"restore_start"))}if(play_ts){stats.seek_before_resume_n=(stats.seek_before_resume_n||0)+1;play_ts=undefined}seek_ts=a.ts;seeked_ts=undefined;if(no_fps_ts)ignore_fps_wait=true;break;case"seeked":if(no_fps_ts)ignore_fps_wait=true;if(ad_playing){seeked_ts=seek_ts=undefined;stats.seeked_in_ad_n=(stats.seeked_in_ad_n||0)+1;break}if(ignore_seek_stats){stats.ignore_seeked_n=(stats.ignore_seeked_n||0)+1;break}if(!seek_ts){seeked_ts=seek_ts=undefined;stats.seeked_without_seek_n=(stats.seeked_without_seek_n||0)+1;break}seeked_ts=a.ts;if(paused){if(buf_wait_ts)_throw("paused seeked without buf_wait_end");stats_inc("seek",a.ts-seek_ts,{paused:true,n:1});seeked_ts=seek_ts=undefined}break;case"seek_start":if(no_fps_ts)ignore_fps_wait=true;if(ad_playing)_throw("seek_start in ad");if(ignore_seek_stats){stats.ignore_seek_start_n=(stats.ignore_seek_start_n||0)+1;break}if(paused)_throw("seek_start in paused");if(!seeked_ts){seeked_ts=seek_ts=undefined;stats.seek_start_without_seeked_n=(stats.seek_start_without_seeked_n||0)+1;break}if(buf_wait_ts)_throw("seek_start without buf_wait_end");stats_inc("seek",a.ts-seek_ts,{paused:paused,n:1});seeked_ts=seek_ts=undefined;break;case"scrub_begin":if(scrub_ts)throw new Error("scrub_begin without scrub_end");scrub_ts=a.ts;break;case"scrub_end":if(!scrub_ts)throw new Error("scrub_end without scrub_begin");stats_inc("scrub",a.ts-scrub_ts,{n:1});scrub_ts=undefined;break;case"resume":if(ad_playing)_throw("resume in ad");if(paused)_throw("resume while paused");if(play_ts===undefined)_throw("resume without play");if(buf_wait_ts)_throw("resume without buf_wait_end");stats_inc("resume",a.ts-play_ts,{paused:paused,n:1});play_ts=undefined;break;case"suspend":if(suspend_ts)_throw("suspend in suspended");suspend_ts=a.ts;restore_ts=undefined;video_started=false;break;case"restore":if(!suspend_ts)_throw("resume but not suspended");stats_inc("suspend",a.ts-suspend_ts,{n:1,max_ms:5*date.ms.MIN});suspend_ts=undefined;seeked_ts=seek_ts=play_ts=undefined;paused=started_paused=!!a.paused;restore_ts=a.ts;break;case"buf_wait_begin":if(paused)_throw("buf_wait_begin in paused");if(ad_playing)_throw("buf_wait_begin in ad");if(buf_wait_ts)_throw("buf_wait_begin after buf_wait_begin");buf_wait_ts=a.ts;break;case"buf_wait_end":if(paused)_throw("buf_wait_end in paused");if(buf_wait_ts===undefined)_throw("buf_wait_end without buf_wait_begin");if(video_started&&seek_ts===undefined&&!play_ts&&a.ts-buf_wait_ts){if(a.ts-buf_wait_ts>>24)+"."+((ip&16711680)>>>16)+"."+((ip&65280)>>>8)+"."+(ip&255)};E.inet_addr=function(ip){var parts=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(ip);if(parts===null)return null;if(parts[1]>255||parts[2]>255||parts[3]>255||parts[4]>255)return null;return(parts[1]<<24)+(parts[2]<<16)+(parts[3]<<8)+(parts[4]|0)>>>0};function flags_to_str_once(flags,conv){var f='var s = "";\n';f+='if (!flags) return "";\n';for(var i in conv){if(!conv.hasOwnProperty(i))continue;f+="if (flags & "+conv[i]+") "+"{ s += "+JSON.stringify(i.toLowerCase())+'+" ";'+" flags &= ~"+conv[i]+"; }\n"}f+="if (flags && conv.__conv_to_str.err) "+"conv.__conv_to_str.err(flags, conv);\n";f+="return s.slice(0, -1);\n";var func=new Function(["flags","conv"],f);Object.defineProperty(conv,"__conv_to_str",{enumerable:false,writable:true});conv.__conv_to_str=func;func.err=function(flags,conv){zerr.perr("flags_str_invalid","flags "+flags+" "+JSON.stringify(conv).slice(0,30))};return conv.__conv_to_str(flags,conv)}E.flags_to_str=function(flags,conv){if(conv.__conv_to_str)return conv.__conv_to_str(flags,conv);return flags_to_str_once(flags,conv)};function flags_from_str_once(s,conv){var f="var flags = 0, a, i;\n";f+="if (!s) return 0;\n";f+="s = s.toUpperCase();\n";f+='a = s.split(",");\n';f+="for (i=0; i=scale_vals[i+1].n*ratio;i++);else i=scale_vals.findIndex(function(_scale){return _scale.s==scale});if(per=="ms"&&i){per="s";i--;num=num/1e3}scale=scale_vals[i];if(opt.is_scale)return scale.n;num/=scale.n;if(num<.001)return"0"+_per();if(num>=base-1)num=Math.trunc(num);var str=num.toFixed(num<1?3:num<10?2:num<100?1:0);return sign+str.replace(/\.0*$/,"")+(opt.space?" ":"")+scale.s+_per()};E.format_per=function(per){if(!per)return"";switch(per){case"s":case"ms":return per;case"%":case"%%":return"%";default:return"/"+per[0]}};E.parse_function=function(f){var m=/^function\s*([\w$]+)?\s*\(([\s\w$,]*?)(\s*\/\*\*\/)?\)\s*\{\n?([\s\S]*?)\n?\}$/.exec(f);return{name:m[1]||null,args:m[2]?m[2].split(/\s*,\s*/):[],body:m[4]}};function date_stringify(d){return{__ISODate__:d.toISOString()}}E.JSON_stringify=function(obj,opt){var s,prev_date,_date,prev_func,prev_re;var date_class,func_class,re_class;opt=opt||{};if(opt.date)_date=typeof opt.date=="function"?opt.date:date_stringify;if(opt.mongo)_date=date_stringify;if(_date){date_class=opt.vm_context?vm.runInContext("Date",opt.vm_context):Date;prev_date=date_class.prototype.toJSON;date_class.prototype.toJSON=function(){return _date(this)}}if(opt.func){func_class=opt.vm_context?vm.runInContext("Function",opt.vm_context):Function;prev_func=func_class.prototype.toJSON;func_class.prototype.toJSON=function(){return{__Function__:this.toString()}}}if(opt.re){re_class=opt.vm_context?vm.runInContext("RegExp",opt.vm_context):RegExp;prev_re=re_class.prototype.toJSON;Object.defineProperty(re_class.prototype,"toJSON",{value:function(){return{__RegExp__:this.toString()}},writable:true})}try{s=JSON.stringify(obj,opt.replacer,opt.spaces)}finally{if(_date)date_class.prototype.toJSON=prev_date;if(opt.func)func_class.prototype.toJSON=prev_func;if(opt.re)re_class.prototype.toJSON=prev_re}if(opt.mongo)s=s.replace(/\{"__ISODate__":("[0-9TZ:.-]+")\}/g,"ISODate($1)");return s};function parse_leaf(v,opt){opt=Object.assign({date:1,re:1,func:1},opt);if(!v||typeof v!="object"||Object.keys(v).length!=1)return v;if(v.__ISODate__&&opt.date)return new Date(v.__ISODate__);if(v.__Function__&&opt.func){if(vm)return vm.runInThisContext("("+v.__Function__+")");var info=E.parse_function(v.__Function__);return new Function(info.args.join(","),info.body)}if(v.__RegExp__&&opt.re){var parsed=/^\/(.*)\/(\w*)$/.exec(v.__RegExp__);if(!parsed)throw new Error("failed parsing regexp");return new RegExp(parsed[1],parsed[2])}return v}E.JSON_parse=function(s,opt){return JSON.parse(s,function(k,v){return parse_leaf(v,opt)})};E.JSON_parse_obj=function(v,opt){if(!v||typeof v!="object")return v;if(Array.isArray(v)){for(var i=0;i20)return;_this.push("no_bitrate");return}if(bitrate!=ctx.prev_bitrate)_this.push("bitrate",{bitrate:bitrate});ctx.prev_bitrate=bitrate;update_bitrate_sec(bitrate,prev_pos,pos)}this.zone=opt.zone;this.wrapper=opt.wrapper;this.log=this.zone.log_get().set_module("stats");this.perm_data=this.perm_data||{};var _this=this;var zperr=this.zone.perr_get();this.log.debug("new player stats");zperr({id:"stats_new",info:{only_stats:opt.only_stats},delay:true});this.opt=opt;var player=this.player=opt.player;var stats=this.stats={};this.timeline=new timeline({log:this.log.debug.bind(this.log),ts:opt.ts});stats.buf_n=stats.buf_sec=0;stats.bitrate_sec={};stats.pos_val={high:{sum:0,sec:0},low:{sum:0,sec:0},best:{sum:0,sec:0},unknown:{sum:0,sec:0},full:{sum:0,sec:0},width_300:{sum:0,sec:0},width_600:{sum:0,sec:0},width_900:{sum:0,sec:0},width_1200:{sum:0,sec:0},width_over_1200:{sum:0,sec:0},width_unknown:{sum:0,sec:0},height_200:{sum:0,sec:0},height_400:{sum:0,sec:0},height_800:{sum:0,sec:0},height_over_800:{sum:0,sec:0},height_unknown:{sum:0,sec:0}};stats.suspends=[];stats.download_sec=new map.Map({sum:0,size:-1,exclude_end:true});this.fps=undefined;this.fps_poll=this.try_wrapper(function(){this.fps_poll.check()});this.fps_poll.check=function(){if(zutil.is_mocha())return;var limit=20;if(!player.is_playing())return this.fps_poll.reset_ts();var f=player.get_decoded_frames(),ts=date.monotonic();if(!this.fps_poll.ts){this.fps_poll.ts={t0:{ts:ts,f:f},t1:{ts:ts,f:f}};return}var dt=ts-this.fps_poll.ts.t1.ts;var df=f-this.fps_poll.ts.t1.f;if(dt<.4*date.ms.SEC)return;var fps=this.fps=date.ms.SEC*df/dt;this.fps_poll.ts.t1={ts:ts,f:f};if(fps)stats.fps_play_sec=(stats.fps_play_sec||0)+dt/1e3;if(fps<=limit&&this.fps_poll.high_fps){this.fps_poll.high_fps=false;if(0)this.push("high_fps_end")}if(fps&&this.fps_poll.no_fps){this.fps_poll.no_fps=false;this.push("no_fps_end")}if(!fps&&!this.fps_poll.no_fps){this.fps_poll.no_fps=true;this.push("no_fps_begin")}if((!fps||fps>limit)&&this.fps_poll.low_fps){this.fps_poll.low_fps=false;if(0)this.push("low_fps_end")}if(fps&&fps<=limit&&!this.fps_poll.low_fps){this.fps_poll.low_fps=true;if(0)this.push("low_fps_begin")}if(fps>limit&&!this.fps_poll.high_fps){this.fps_poll.high_fps=true;if(0)this.push("high_fps_begin")}if(fps>=limit){stats.fps_avg=this.fps_poll.avg.f=(this.fps_poll.avg.f*this.fps_poll.avg.t+fps*dt)/(this.fps_poll.avg.t+dt);this.fps_poll.avg.t=this.fps_poll.avg.t+dt}}.bind(this);this.fps_poll.avg={f:0,t:0};this.fps_poll.reset_ts=function(){if(!this.fps_poll.ts)return;var ts=date.monotonic(),dt=ts-this.fps_poll.ts.t1.ts;stats.fps_play_sec=(stats.fps_play_sec||0)+dt/1e3;if(this.fps_poll.no_fps){this.fps_poll.no_fps=false;this.push("no_fps_end",{reset_ts:1})}if(this.fps_poll.low_fps){this.fps_poll.low_fps=false;if(0)this.push("low_fps_end",{reset_ts:1})}if(this.fps_poll.high_fps){this.fps_poll.high_fps=false;if(0)this.push("high_fps_end",{reset_ts:1})}this.fps_poll.ts=undefined}.bind(this);this.download_poll=this.try_wrapper(function(){var b=player.get_current_buffer();if(!b)return;var c=player.get_pos();if(cb.to){stats.invalid_current_buffer_n=(stats.invalid_current_buffer_n||0)+1;return}stats.download_sec.update(c,b.to);stats.buf_n++;stats.buf_sec+=b.to-c});stats.unique_view_sec=new map.Map({sum:0,size:-1,exclude_end:true});stats.no_fps_unique_view_sec=new map.Map({sum:0,size:-1,exclude_end:true});this.view_poll=this.try_wrapper(function(){var prev_pos=this.view_poll.view_prev_pos;var prev_frames=this.view_poll.view_prev_frames;var pos=player.get_pos();var frames=player.get_decoded_frames();this.view_poll.view_prev_pos=pos;this.view_poll.view_prev_frames=frames;var duration=this.player.get_duration();var prev_duration=stats.duration_sec;stats.duration_sec=Math.max(duration||0,stats.duration_sec||0);if(prev_duration!=stats.duration_sec&&!zutil.is_mocha()){_this.push("duration_change",!stats.duration_sec?{no_duration_change:1}:stats.duration_sec-prev_duration>date.sec.MIN?{duration_change_over_1min:1}:{})}if(!isFinite(pos)||!isFinite(prev_pos)||!this.play_start)return;if(!pos)return;var d=pos-prev_pos;if(d<=0||d>2)return;var bandwidth=player.get_bandwidth();var best_cdn=player.bws&&player.bws.cdns.get_best_cdn_bw_bits();var avsync=player.bws&&player.bws.parser&&player.bws.parser.type=="mp4"&&player.bws.parser.media_appender.get_avsync();if(!frames||frames-prev_frames>0){stats.unique_view_sec.update(prev_pos,pos);stats.view_sec=(stats.view_sec||0)+d}else if(frames)stats.no_fps_unique_view_sec.update(prev_pos,pos);update_bandwidth_min_max("bandwidth",bandwidth);update_bandwidth_min_max("best_cdn_bandwidth",best_cdn);update_bandwidth_avg("bandwidth",d,bandwidth);update_bandwidth_avg("best_cdn_bandwidth",d,best_cdn);update_bitrate(stats,pos,prev_pos);update_avsync(avsync)});this.ended={};this.ended_poll=this.try_wrapper(function(){if(player.is_live_stream()||player.is_paused())return;var cur=player.html5?player.html5.currentTime:player.get_pos();var dur=player.html5?player.html5.duration:player.get_duration();if(!cur||!dur)return;if(Math.floor(dur)-Math.round(cur)>.25)return;this.ended.n=(this.ended.n||0)+1;if(this.ended.n!=5)return;this.log.err("video ended but missing ended event");zperr({id:"missing_ended_event_error",add_log:true,extra:this.get_stats_all()})});this.ended_poll.reset_ts=function(){this.ended.n=0}.bind(this);this.freeze={};this.freeze_poll=this.try_wrapper(function(){this.freeze_poll.check()});this.freeze_poll.check=function(){if(zutil.is_mocha())return;if(!player.is_playing())return this.freeze_poll.reset_ts();var limit=2*date.ms.SEC;var pos_prev=this.freeze.pos,pos_curr=player.get_pos();var ts_prev=this.freeze.ts,ts_curr=date.monotonic();if(ts_prev){var b=player.get_current_buffer();if(b.to-pos_curr>10&&Math.abs(pos_prev-pos_curr)<.25){this.freeze.detected=true;if(ts_curr-ts_prev>limit){if(!this.freeze.handled){this.freeze.handled=true;stats.freeze_n=(stats.freeze_n||0)+1;this.push("freeze_begin");if(stats.freeze_n==1){this.log.warn("freeze over "+limit+" ms");zperr({id:"video_freeze",add_log:true,extra:this.get_stats_all(),filehead:player.bws?"last test:\n"+player.bws.unittest.gen_test():undefined,delay:true})}else if(stats.freeze_n==2){this.log.warn("freeze #"+stats.freeze_n+" over "+limit+" ms");zperr({id:"video_freeze_2",add_log:true,extra:this.get_stats_all(),filehead:player.bws?"last test:\n"+player.bws.unittest.gen_test():undefined,delay:true})}}}}else{if(this.freeze.handled)this.push("freeze_end");this.freeze.handled=this.freeze.detected=false}}if(this.freeze.detected)return;this.freeze.pos=pos_curr;this.freeze.ts=ts_curr}.bind(this);this.freeze_poll.reset_ts=function(){if(!this.freeze.ts)return;if(this.freeze.handled)this.push("freeze_end");this.freeze.ts=this.freeze.pos=undefined;this.freeze.handled=this.freeze.detected=false}.bind(this);this.set_adaptive(!!this.opt.adaptive);this.stats_init();this.start_listening()};E.PlayerStats.prototype.start_listening=function(){var zperr=this.zone.perr_get();var player=this.player;this.interval_200ms=setInterval(function(){this.download_poll();this.view_poll();this.interval2_poll();if(0&&this.high_bitrate_poll)this.high_bitrate_poll()}.bind(this),200);this.interval_500ms=setInterval(function(){this.fps_poll();this.ended_poll();this.freeze_poll()}.bind(this),500);var ping_sec=this.zone.CG("stats.ping_sec");if(ping_sec){this.interval_ping=setInterval(function(){zperr({id:"stats_ping",info:{only_stats:this.opt.only_stats,ping_sec:ping_sec,timeline_str:this.timeline.to_str(true)}})}.bind(this),(+ping_sec||60)*1e3)}player.on("timeupdate",this.stats_time_cb);player.on("seeking",this.stats_seeking_cb);player.on("seeked",this.stats_seeked_cb);player.on("pre-state",this.states_pre_state_cb);player.on("pre-ended",this.stats_pre_ended2_cb);player.on("pre-error",this.stats_pre_error_cb);player.on("pre-fallback",this.stats_pre_fallback_cb);player.on("visibility_end",this.stats_visibility_end_cb);player.on("visibility_start",this.stats_visibility_start_cb);player.on("request_fragment",this.stats_request_fragment);player.on("request_fragment_done",this.stats_request_fragment_done);player.on("fragmentloaded",this.stats_fragment_loaded);player.on("waiting",this.stats_waiting);player.on("manifest_parsed",this.stats_manifest_parsed);player.on("ad_play",this.stats_ad_play);player.on("ad_pause",this.stats_ad_pause);player.on("ad_impression",this.stats_ad_impression);player.on("ad_config",this.stats_ad_config);player.on("ad_start",this.stats_ad_start);player.on("ad_download",this.stats_ad_download);player.on("ad_skipped",this.stats_ad_skipped);player.on("ad_complete",this.stats_ad_complete);player.on("ad_error",this.stats_ad_error);player.on("ad_time",this.stats_ad_time);player.on("src_change",this.stats_src_change);player.on("seg_stats",this.stats_seg_stats);player.on("suspend",this.stats_suspend);player.on("restore",this.stats_restore)};E.PlayerStats.prototype.stop_listening=function(){var player=this.player;this.fps_poll.reset_ts();this.ended_poll.reset_ts();this.freeze_poll.reset_ts();this.interval_200ms=clearInterval(this.interval_200ms);this.interval_500ms=clearInterval(this.interval_500ms);this.interval_ping=clearInterval(this.interval_ping);player.off("timeupdate",this.stats_time_cb);player.off("seeking",this.stats_seeking_cb);player.off("seeked",this.stats_seeked2_cb);player.off("pre-state",this.states_pre_state_cb);player.off("pre-ended",this.stats_pre_ended2_cb);player.off("pre-error",this.stats_pre_error_cb);player.off("pre-fallback",this.stats_pre_fallback_cb);player.off("visibility_end",this.stats_visibility_end_cb);player.off("visibility_start",this.stats_visibility_start_cb);player.off("request_fragment",this.stats_request_fragment);player.off("request_fragment_done",this.stats_request_fragment_done);player.off("fragmentloaded",this.stats_fragment_loaded);player.off("waiting",this.stats_waiting);player.off("manifest_parsed",this.stats_manifest_parsed);player.off("ad_play",this.stats_ad_play);player.off("ad_pause",this.stats_ad_pause);player.off("ad_impression",this.stats_ad_impression);player.off("ad_config",this.stats_ad_config);player.off("ad_start",this.stats_ad_start);player.off("ad_download",this.stats_ad_download);player.off("ad_skipped",this.stats_ad_skipped);player.off("ad_complete",this.stats_ad_complete);player.off("ad_error",this.stats_ad_error);player.off("ad_time",this.stats_ad_time);player.off("src_change",this.stats_src_change);player.off("seg_stats",this.stats_seg_stats);player.off("suspend",this.stats_suspend);player.off("restore",this.stats_restore)};E.PlayerStats.prototype.suspend=function(suspend){this.video_start=undefined;this.play_pos=undefined;this.seek_pos=undefined;if(suspend){if(this.waiting){this.push("buf_wait_end",{check_waiting:"suspend"});this.waiting=false}this.push("suspend");return}this.push("restore")};E.PlayerStats.prototype.set_adaptive=function(adaptive){if(this.adaptive==adaptive)return;if(!(this.adaptive=adaptive))return;var _this=this,high_bitrate=false;this.high_bitrate_poll=this.try_wrapper(function(){var bitrate=_this.player.get_bitrate();var bw=_this.player.get_bandwidth();if(!bitrate||!bw)return;if(bitrate>=bw&&!high_bitrate){_this.push("high_bitrate_begin");high_bitrate=true}else if(bitrate%s pos %s",this.prev_url,url,_info.pos);this.timeline.push("url_change",_info);this.emit("url_change",_info);this.prev_url=url}this.log.info("%s pos %s buf %s-%s state %s ad_playing %s bitrate %s",e,info.pos,info.buf_from,info.buf_to,info.state,info.ad_playing,info.bitrate);this.timeline.push(e,info);this.emit(e,o)};E.PlayerStats.prototype.stats_init=function(){load_perf.push("stats_init_start",this.zone);var player=this.player;var last_time;var _this=this;function is_waiting(){if(player.is_idle()||_this.playing_t0===undefined)return false;var b=player.get_current_buffer();var pos=player.get_pos(),diff=b.to-pos;var duration=player.get_duration();var min=player.jwplayer||player.html5&&util.is_firefox?1:.25;if(duration&&duration-pos<2)return false;return diff1)return;if(pos-pos_prev<.25){this.pos_prev=pos_prev;return}this.video_start=pos;if(this.play_start){this.push("restore_start",zutil.is_mocha()?undefined:{pos_prev:pos_prev});this.log.debug("restore_start_ms "+this.timeline.elapsed_from("restore"))}else{this.play_start=true;load_perf.push("stats_play_start_triggered",this.zone,true);this.push("play_start",zutil.is_mocha()?undefined:{pos_prev:pos_prev});this.log.debug("play_start_ms "+this.timeline.elapsed_from("stats_init"))}return}if(this.seek_pos!==undefined){if(!player.is_paused()&&this.seek_pos=opt.max_report_count)return;ctx[prop_reported]++;return name+ctx[prop_reported]}var id;if(id=fragment_load_report_next.call(this,{max_report_count:3}))this.push(id,{loadtime:o.loadtime});ctx[stats_name+"_sum"]=(ctx[stats_name+"_sum"]||0)+o.loadtime;ctx[stats_name+"_count"]=(ctx[stats_name+"_count"]||0)+1};this.stats_fragment_record_avg=function(stats_name){var ctx=this.stats_fragment_data;if(!ctx[stats_name+"_count"])return;var avg=ctx[stats_name+"_sum"]/ctx[stats_name+"_count"];this.push(stats_name,{loadtime:Math.round(avg)})};this.stats_request_fragment_done=this.try_wrapper(function(o){this.stats_fragment_record("fragment_js",{loadtime:o.jstime})});this.stats_fragment_loaded=this.try_wrapper(function(o){this.stats_fragment_record("fragment_loadtime",{loadtime:o.loadtime})});this.stats_calc_fragment_load_avg=this.try_wrapper(function(){this.stats_fragment_record_avg("fragment_js");this.stats_fragment_record_avg("fragment_loadtime")});this.stats_waiting=this.try_wrapper(function(o){push_info("waiting_event")});this.stats_manifest_parsed=this.try_wrapper(function(){this.push("manifest_parsed")});this.stats_pre_beforeunload2_cb=this.try_wrapper(function(){this.stats_calc_fragment_load_avg();this.push("beforeunload")});this.stats_visibility_end_cb=this.try_wrapper(function(){this.stats_calc_fragment_load_avg();this.push("visibility_end")});this.stats_visibility_start_cb=this.try_wrapper(function(){this.perm_data.visibility_switch_n=(this.perm_data.visibility_switch_n||0)+1;this.push("visibility_start",{switch_n:this.perm_data.visibility_switch_n})});this.interval2_poll=this.try_wrapper(function(){if(player.is_idle())return;check_waiting("interval")});var ad_events=["ad_play","ad_pause","ad_impression","ad_config","ad_start","ad_download"];ad_events.forEach(function(evt){_this["stats_"+evt]=_this.try_wrapper(function(){return function(){this.push(evt)}}())});this.stats_ad_complete=this.try_wrapper(function(){load_perf.push("stats_ad_finish",this.zone,true);this.push("ad_complete")});this.stats_ad_skipped=this.try_wrapper(function(){load_perf.push("stats_ad_finish",this.zone,true);this.push("ad_skipped")});this.stats_ad_error=this.try_wrapper(function(e){load_perf.push("stats_ad_error",this.zone,true);this.push("ad_error",{ad_error:""+e});if(this.adblock)this.push("ad_error_with_adblock",{ad_error:""+e})});this.stats_ad_time=this.try_wrapper(function(e){update_time("ad",e)});this.stats_src_change=this.try_wrapper(function(e){this.push("src_change",e)});this.stats_seg_stats=this.try_wrapper(function(e){var stats=this.stats;if(!e.keyFrames){this.log.warn("segment without keyframe %o",e);stats.dm_no_keyframe_n=(stats.dm_no_keyframe_n||0)+1}if(e.dropped){this.log.warn("dropped frames %s %o",e.dropped,e);stats.dm_dropped_n=(stats.dm_dropped_n||0)+1}if(e.AVUnsync){this.log.info("audio/video unsync %ssec %o",e.AVUnsync,e);stats.dm_avunsync_n=(stats.dm_avunsync_n||0)+1;stats.dm_avunsync_sec=(stats.dm_avunsync_sec||0)+e.AVUnsync}if(e.audioGap){this.log.info("gap in audio",e);stats.dm_audio_gap_n=(stats.dm_audio_gap_n||0)+1}if(e.videoGap){this.log.info("gap in video",e);stats.dm_video_gap_n=(stats.dm_video_gap_n||0)+1}});this.stats_suspend=this.try_wrapper(function(e){this.suspend(true)});this.stats_restore=this.try_wrapper(function(e){this.suspend(false)});this.adblock=false;etask([function(){if(zutil.is_mocha())return;return ajax.raw({url:util.fix_url("//player.h-cdn.com/ads.js.")})},function catch$(e){_this.adblock=true;_this.push("adblock")}]);util.on("pre-beforeunload",this.stats_pre_beforeunload2_cb);this.playing_t0=player.is_paused()?undefined:date.monotonic();this.frames0=player.get_decoded_frames();var attached_opt={ad_playing:player.is_ad_playing(),paused:player.is_paused()};var url=player.get_url();if(is_android&&this.opt.only_stats&&this.zone.is_hls_link(url))attached_opt.native_hls=true;if(player.name=="vjs"&&this.zone.is_hds_link(url))attached_opt.vjs_hds=true;if(this.zone.CG("stats.disable_ad_start"))attached_opt.disable_ad_start=true;if(this.zone.CG("stats.disable_ad_stats"))attached_opt.disable_ad_stats=true;if(this.zone.CG("stats.disable_missing_bitrate"))attached_opt.disable_missing_bitrate=true;if(this.zone.CG("stats.disable_fps")||!player.html5&&player.tech!="html5"&&!zutil.is_mocha()){attached_opt.disable_fps=true}this.push("attached",attached_opt);load_perf.push("stats_init_end",this.zone)};E.PlayerStats.prototype.get_stats=util.try_wrapper(function(minimal,skip_stat){var bws=this.player.bws;var ret=zutil.clone(this.stats);ret.play_sec=(ret.play_sec||0)+(this.playing_t0!==undefined?(date.monotonic()-this.playing_t0)/date.ms.SEC:0);if(!minimal)ret.timeline=this.timeline.arr;ret.timeline_str=this.timeline.to_str(true);if(!skip_stat){ret.stat=this.timeline.get_stats();ret.no_fps_play_per=100*ret.stat.no_fps_ms/1e3/ret.fps_play_sec;ret.low_fps_play_per=100*ret.stat.low_fps_ms/1e3/ret.fps_play_sec;ret.high_fps_play_per=100*ret.stat.high_fps_ms/1e3/ret.fps_play_sec}ret.player_n=this.wrapper&&this.wrapper.player_n;ret.video_check_n=this.wrapper&&this.wrapper.video_check_n;var b,t=0,n=0;for(b in ret.bitrate_sec){if(ret.bitrate_sec[b].sum<0)ret.invalid_sec_sum_n=(ret.invalid_sec_sum_n||0)+1;else if(+b>0){t+=+b*ret.bitrate_sec[b].sum;n+=ret.bitrate_sec[b].sum}else ret.invalid_bitrate_n=(ret.invalid_bitrate_n||0)+1}ret.bitrate_avg=n?t/n:0;for(var name in ret.pos_val){ret["bitrate_"+name+"_sec"]=ret.pos_val[name].sec;ret["bitrate_"+name+"_avg"]=ret.pos_val[name].sum/ret.pos_val[name].sec||0}delete ret.bitrate_sec;delete ret.pos_val;delete ret.time;if(bws&&bws.method&&bws.method.first_index!==undefined)ret.first_index=bws.method.first_index;return ret});E.PlayerStats.prototype.try_wrapper=function(func){return util.try_wrapper({prefix:"stats"},func.bind(this))};E.PlayerStats.prototype.get_stats_all=util.try_wrapper(function(minimal){var bws=this.player.bws;var player=this.get_stats(true,minimal);var timing=E.get_stats_timing();var ret={player:player,timing:timing};if(bws)ret=assign(ret,bws.get_stats());return ret});function format_traffic_stats(ret,bws){var total=0,aborted=0;var s="Traffic distribution statistics";s+="\n"+String.fromCharCode(8212).repeat(31);s+="\nstats cdn total %"+" name Bps\n";function out(cdn,dn,perc,name,bps){s+=sprintf(" %+19s %+16s %+4s %+30s %+14s\n",cdn,conv.scaled_number(+dn,{space:true,base:1024}),perc,name&&name!=cdn?name:"",bps?(isNaN(bps)?bps:conv.scaled_number(+bps,{space:true,base:1024}))+"/sec":"")}ret.cdns.forEach(function(cdn){total+=cdn.bytes+cdn.aborted_bytes;aborted+=cdn.aborted_bytes});total+=bws.stats.cached;ret.cdns.forEach(function(cdn){var s=zurl.is_ip(cdn.host)?cdn.host:cdn.host.split(".")[0];out(s,cdn.bytes,(total?Math.round(cdn.bytes*100/total):0)+"%",cdn.name,cdn.bps)});if(bws.stats.cached){var sum=bws.stats.cached;out("cache",sum,Math.round(sum*100/total)+"%")}if(aborted)out("aborted",Math.round(aborted),Math.round(aborted*100/total)+"%");return s}function format_play_start(stats){var s="Start time -";var manual=(stats._paused_play_start_ms||0)+(stats._paused_play_seek_start_ms||0);var autostart=(stats._play_start_ms||0)+(stats._play_seek_start_ms||0);s+=" Autostart: "+(autostart?Math.round(autostart)+" ms":"n/a")+";";s+=" Manual play: "+(manual?Math.round(manual)+" ms":"n/a");return s}function format_seek(stats){var count=(stats._seek_n||0)+(stats._paused_seek_n||0);var seek_time=(stats._seek_ms||0)+(stats._paused_seek_ms||0);var average=count?Math.round(seek_time/count):0;return"Seek - Number of seeks: "+count+";"+" Average seek time: "+average+" ms"}function format_buffering(stats){return"Buffering - Number of buffering events: "+(stats._wait_n||0)+";"+" Total buffering time: "+Math.round(stats._wait_ms||0)+" ms"}function format_engagement(player){return"Engagement - Video duration: "+Math.round(player.duration_sec||0)+" sec; Viewed so far: "+Math.round(player.view_sec||0)+" sec"}function format_bitrate(stats){return"Bitrate - Current: "+Math.round(stats.bitrate_last/1e3||0)+" kbps; Min: "+Math.round(stats.bitrate_min/1e3||0)+" kbps;"+" Max: "+Math.round(stats.bitrate_max/1e3||0)+" kbps;"+" Number of bitrate changes: "+(stats.bitrate_n||0)}function format_video_quality_stats(ret){var s="Video Quality of Experience statistics";var stat=ret.player?ret.player.stat||{}:{};s+="\n"+String.fromCharCode(8212).repeat(38);s+="\n"+format_play_start(stat);s+="\n"+format_seek(stat);s+="\n"+format_buffering(stat);s+="\n"+format_engagement(ret.player||{});s+="\n"+format_bitrate(stat);return s}function format_misc_stats(ret,bws,player){var bsec;if(!(bsec=bws&&bws.buf_sec())){var b=player.get_current_buffer(),pos=player.get_pos()||0;var diff=Math.ceil(b.to)-Math.round(pos);bsec={player:diff,buffered:diff,obtained:0}}var s="Current forward buffer: player "+bsec.player+" buffered "+bsec.buffered+" sec, js "+bsec.obtained+" sec\n";var stream=bws&&bws.get_stream_by_id("video");if(stream)s+="Bitrate "+Math.round(stream.bitrate)+" bps\n";else s+="Stream not found\n";if(ret.timing){s+="Script load time "+Math.round(ret.timing.duration)+"ms\n";if(ret.timing.page_load)s+="Page load time "+ret.timing.page_load+"ms\n"}return s}E.PlayerStats.prototype.print_stats=function(omit){var ret=this.get_stats_all();var bws=this.player.bws;var s="";if(!zutil.is_mocha()){if(ret.cdns)s+="\n\n"+format_traffic_stats(ret,bws);s+="\n\n"+format_video_quality_stats(ret);s+="\n\n"+format_misc_stats(ret,bws,this.player)}this.log.console(s);if(ret&&ret.player&&ret.player.stat){if(ret.player.stat.error)this.log.err("error with stats: "+ret.player.stat.error);var stat=ret.player.stat;var t={};zutil.forEach(stat,function(v,k){if(omit&&omit.includes(k))return;if(k.substr(-3,3)=="_ms")v=Math.round(v);t[k]=v});stat=t;this.log.console("player stats: "+JSON.stringify(stat))}return ret};E.is_bad_performance_single=function(stat,e){return stat[e+"_over_max_ms"]||stat[e+"_waiting_over_max_ms"]};E.is_bad_performance=function(stat){return E.is_bad_performance_single(stat,"play_start")||E.is_bad_performance_single(stat,"paused_play_start")||E.is_bad_performance_single(stat,"seek")||E.is_bad_performance_single(stat,"paused_seek")||E.is_bad_performance_single(stat,"wait")||E.is_bad_performance_single(stat,"resume")};return E}); define("/svc/cdn/pub/progressive.js",["/svc/cdn/pub/util.js","/util/etask.js","/util/zerr.js","/util/array.js","/util/date.js","/svc/cdn/pub/cache.js"],function(util,etask,zerr,array,date,zcache){var E={};var ERR=util.ERR,perr=util.cdn_perr;E.Method=function(opt){if(!(this instanceof E.Method))return new E.Method(opt);this.player=opt.player;this.bws=opt.bws;this.log=opt.bws.zone.log_get().set_module("progressive");this.fallback_wrapper=this.bws.fallback_wrapper.bind(this);this.type="progressive";this.ondata=this.fallback_wrapper(this._ondata,"progressive");this.alg={last_req_bw:{},up:0,down:0,jump_at:2,fall_at:2};this.bws.url=this.bws.origin_select(this.bws.url);this.CG=this.bws.zone.CG.bind(this.bws.zone);this.CE=this.bws.zone.CE.bind(this.bws.zone);this.memory_cache=memory_cache.bind(this);this.bws.add_origin(this.bws.url.hostname);var _this=this;this.bws.on("stream_start",function(stream){var loaded=0,sec=0,a=_this.bws.memory_cache.last;stream.on("serve",function(){if(!this.chunks.length&&!this.map.next_unobtained(this.from,this.to)){this.oncomplete()}});if(!stream.from){if(_this.CG("cdn.method.memory_cache_sec"))stream.chunks=_this.bws.memory_cache.start.slice();stream.chunks.forEach(function(c){c.req.stream=stream;loaded+=c.data.byteLength;sec+=c.sec});if(!a.length||loaded!=a[0].from){if(_this.CG("cdn.method.memory_cache_sec")){_this.bws.stats.memory_cache.start.push({bytes:loaded,sec:sec})}return _this.log.info("loaded "+loaded+" bytes from memory = "+sec+" sec")}}if(!_this.CG("cdn.method.memory_cache_sec")||!a.length)return;if(stream.from>a[a.length-1].to||stream.to>0&&stream.to+10&&stream.to+1"+(req.to_ms()-req.elapsed()+500)+" rate "+req.rate()+" another cdn can get "+can_get);req.cdn.on_too_slow(req.resp&&req.resp.hdrs["x-cache"]=="HIT");if(!req.cdn.too_slow&&!can_get){var zperr=this.bws.zone.perr_get();zperr({id:"all_cdns_too_slow",delay:true});req.cdn.too_slow=true}};E.Method.prototype.chunk_len=function(chunk){return chunk.to+1-chunk.from};E.Method.prototype.set_chunk_data=function(chunk){var stream=chunk.req.stream;if(chunk.from>=stream.completed)return;chunk.data=chunk.data.slice(stream.completed-chunk.from);chunk.from=stream.completed};E.Method.prototype.set_req_alg=function(req){if(this.CG("cdn.req_alg.disable"))return;var ms=req.to_ms(),event=req.error?"failed":"success";if(req.cdn.is_single()&&!req.info.rate&&req.info.bitrate&&ms&&ms+5001&&buf_sec.obtained+buf_sec.player<2){this.CS("cdn.origin.min_slice_sz",(this.CG("cdn.origin.min_slice_sz")||stream.slice)*2)}}this.set_req_alg(req);if(req.error!=ERR.aborted)stream.send_reqs()};E.Method.prototype.set_params=function(req){return""};E.Method.prototype.next_slice_fixup=function(stream,range,sec){var to=range.from+stream.slice-1;if(this.CG("cdn.send_reqs.exact_slice_sz")&&stream.bitrate){to=Math.max(to,this.sec2offset(stream,this.bws.get_pos()+this.bws.slice_sec))}range.to=range.to<0?to:Math.min(range.to,to);this.log.debug("next slice "+stream.slice+" "+JSON.stringify(range)+" needed sec "+sec)};E.Method.prototype.cache_get=function(stream,range){return stream.cache_get(range)};E.Method.prototype.next_slice=function(stream){var from=stream.completed,to=stream.to,sec;if(!(sec=stream.needed_sec()))return;function is_valid(r){return r&&(r.to<0||r.from<=r.to)}from=Math.max(from,stream.from);var r1=this.next_unobtained(stream,from,to),r,r2;while(r1&&is_valid(r2=this.next_unassigned(stream,r1.from,to))&&is_valid(r1=this.next_unobtained(stream,r2.from,to))&&r1.from!=r2.from);if(!r1||!r2)return;r={from:r1.from,to:Math.min(r1.to,r2.to)};if(r.to>-1&&r.to0)to=to>=0?Math.min(to,fullsize-1):fullsize-1;for(var i=0;i=0&&r.to+1=0&&from>to?null:{from:from,to:i==arr.length?to:to<0?arr[i].from-1:Math.min(to,arr[i].from-1)}};E.Method.prototype.next_assigned=function(stream,from,to){return this.next_have(stream.reqs,from,to)};E.Method.prototype.next_obtained=function(stream,from,to){return this.next_have(stream.chunks,from,to)};E.Method.prototype.next_have=function(arr,from,to){var chosen;arr.forEach(function(r){if(r.to+1-1&&r.from>to+1||chosen&&r.from>chosen.to+1){return}if(!chosen)chosen={from:r.from,to:r.to};else{var n=chosen.to<0?chosen.to:r.to<0?r.to:Math.max(chosen.to,r.to);chosen.from=Math.max(from,Math.min(chosen.from,r.from));chosen.to=to<0?n:Math.min(to,n)}});return chosen};E.Method.prototype.sec2offset=function(stream,pos){var parser=this.bws.parser;return parser&&parser.time2ofs&&!isNaN(parser.time2ofs(pos))?parser.time2ofs(pos):stream.sec2sz(pos)};E.Method.prototype.offset2sec=function(stream,ofs){var parser=this.bws.parser;return parser&&parser.ofs2time&&!isNaN(parser.ofs2time(ofs))?parser.ofs2time(ofs):stream.sz2sec(ofs)};E.Method.prototype.req=function(stream,cdn,from,to,info){if(cdn.is_origin()&&(!info||!info.rate)&&this.CG("cdn.send_reqs.origin.min_slice_sz")){to=Math.min(stream.to>-1?stream.to:Infinity,from+Math.max(to+1-from,this.CG("cdn.send_reqs.origin.min_slice_sz")))}return stream.req(cdn,from,to,info)};E.Method.prototype.on_parallel_req=function(p){p.from_cache=this.bws.cache.is_cached(p.range,p.cdn.host)};E.Method.prototype.send_reqs=function(stream){if(!stream.map.next_unobtained(stream.from,stream.to))return;var cdnr,r,reqs=-1,fastest=this.bws.fastest_policy(),buf_sec;if(this.CG("cdn.send_reqs.throttle_on_sec")&&(buf_sec=this.bws.buf_sec())&&buf_sec.obtained>buf_sec.buffered+this.CG("cdn.send_reqs.throttle_on_sec")){if(!this.js_throttling){this.log.info("needed_sec: throttling on js buffer of "+buf_sec.obtained+" sec")}return this.js_throttling=true}this.js_throttling=false;var req_init_failed,cache_failed=[];while(!this.bws.closed&&reqs-1||!this.cache_get(stream,r))&&(cdnr=stream.next_cdn(r))){var early;if(!(early=stream.allow_req("send_reqs",true))){this.log.debug("not allowed range req");break}var cached,range=cdnr.range;if(this.bws.cache&&!this.CG("cdn.cache.disabled")&&range.to>-1&&(cached=this.bws.cache.next_obtained(null,range.from,range.to))){cached.sort(function(a,b){return b.range.from-a.range.from});for(var i=0;icompleted)break;sec+=completed==chunk.from&&chunk.sec?chunk.sec:chunk.req.to_sec(Math.max(completed,chunk.from),chunk.to);completed=chunk.to}if(stream.bitrate&&this.bws.parser&&this.bws.parser.media_appender){sec+=stream.sz2sec(this.bws.parser.media_appender.calc_chunkq_bytes())}return sec};E.Method.prototype.close_obtained_reqs=function(stream){for(var i=0;ichunk.req.stream.completed};E.Method.prototype.is_next_chunk=function(chunk){return chunk.from<=chunk.req.stream.completed&&chunk.to>=chunk.req.stream.completed};E.Method.prototype.fast_allowed_range=function(stream,range){return!stream.bitrate||this.bws.parser.ofs2time(range.from)<(this.CG("cdn.send_reqs.fast.sec_limit")||10)};function memory_cache(chunk){var sec=this.CG("cdn.method.memory_cache_sec");var start=this.bws.memory_cache.start,last=this.bws.memory_cache.last;if(!sec)return;var a=!chunk.from||start.length&&chunk.from==start[start.length-1].to+1?start:last;var qsec=0;if(a==start){a.forEach(function(c){qsec+=c.sec});if(qsec+chunk.sec>=sec)a=last}if(a!=start&&a.length&&chunk.from!=a[a.length-1].to+1)a=this.bws.memory_cache.last=[];a.push(chunk);qsec=0;a.forEach(function(c){qsec+=c.sec});while(a.length>1&&qsec-a[0].sec>=sec){qsec-=a[0].sec;a.splice(0,1)}}E.Method.prototype._ondata=function(chunk){var bws=this.bws,req=chunk.req,stream=req.stream,completed;var media_src=this.player.media_src;if(!media_src||media_src.readyState=="closed"){return void perr({id:"progressive_mediasource_invalid_state",info:media_src&&media_src.readyState,add_log:true,throttle:3})}this.set_fullsize(stream,req.res?req.res.fullsize:0);if(!chunk.data){this.log.debug("on data error: failed acquiring range "+req.from+"-"+req.to);return}if(chunk.tostream.completed){this.log.debug("on data error: expected "+stream.completed+" got "+chunk.from+"-"+chunk.to);return}var data=chunk.from==stream.completed?chunk.data:chunk.data.slice(stream.completed-chunk.from);data.fileStart=stream.completed;bws.stats.served+=data.byteLength;var _completed;this.memory_cache(chunk);if(_completed=bws.parser.append_buffer(data,stream.fullsize,req))completed=_completed;if(bws.parser.type!="flv"&&completed>stream.fullsize&&stream.fullsize>0){bws.uninit({err:"Something happened with "+bws.parser.type+" chunks"+" completed "+completed+" while fullsize is "+stream.fullsize})}this.log.debug("bwsaver->"+bws.parser.type+" "+data.fileStart+"-"+(data.fileStart+data.byteLength-1)+"="+data.byteLength+" completed "+completed+" stream completed "+bws.stream_completed()+"->"+(stream.completed+data.byteLength));stream.completed+=data.byteLength;bws.track_state("ondata");bws.emit("serve",data,chunk);if(completed!=stream.completed)stream.set_completed(completed,"ondata");if(bws.parser.flush&&(bws.done||bws.parser.m_i&&stream.fullsize>0&&stream.completed>=stream.fullsize)){bws.parser.flush()}};E.Method.prototype.set_fullsize=function(stream,fullsize){if(stream.fullsize||!fullsize)return;stream.fullsize=fullsize;stream.to=fullsize-1;this.bws.fullsize+=fullsize;stream.map.set_size(stream.fullsize)};E.Method.prototype.sort_reqs=function(stream){stream.reqs.sort(function(a,b){return a.from-b.from})};E.Method.prototype.cache_set=function(req){this.bws.cache.set({id:req.info.cache_id,host:req.cdn.host,path:req.cache_path,from:req.from,to:req.to,cache_date:req.resp.hdrs.date,info:{max_age:zcache.is_cachable(req.resp.hdrs),vary:this.CG("cdn.send_reqs.vary_url_params")&&(req.hrange||req.from==0&&(req.to<0||req.to==req.fullsize)?req.vary_hdr:null),data_prefix:req.hola_resp.data_prefix}})};return E}); define("/svc/cdn/pub/unittest.js",["/util/storage.js","/util/date.js","/util/url.js","/util/util.js","/svc/cdn/pub/util.js","/svc/cdn/pub/cache.js","/svc/cdn/pub/cdnlist.js","/util/events.js"],function(storage,date,zurl,zutil,util,cache,cdnlist,events){var E={};var KB=1024,MB=1024*KB;var ERR=util.ERR;E.Unittest=function(opt){var zperr=opt.bws.zone.perr_get();try{this.start_ts=date.to_sql_ms();this.log=opt.bws.zone.log_get().set_module("unittest");this.vc_id=this.start_vc_id=+(opt.vc_id||1);this.last=this.start=date.monotonic();this.url=opt.url;this.adaptive=opt.bws.adaptive;this.origin=opt.origin;this.delayed={};this.test="";this.resp_q={};this.bws=opt.bws;this.CG=this.bws.zone.CG.bind(this.bws.zone);this.CS=this.bws.zone.CS.bind(this.bws.zone);this.max_len=opt.max_len||256*KB;this.conf=zutil.clone_deep(opt.bws.zone.conf);this.snapshot();this.player=opt.player;this.bitrate={};this.pending={};this.stream_info={};this.bws_events=[];this.player_events=[];this.res=this.player.get_resolution();this.bws_on("req_end",this.req_end);this.bws_on("req_resp",this.req_resp);this.bws_on("set_slow",this.set_slow);this.bws_on("player_state",this.player_state);this.bws_on("serve",this.serve);this.bws_on("req_start",this.req_start);this.bws_on("xhr_start",this.xhr_start);this.bws_on("xhr_end",this.xhr_end);this.bws_on("set_completed",this.set_completed);this.bws_on("stream_start",this.stream_start);this.bws_on("pause",this.pause);this.bws_on("resume",this.resume);this.bws_on("suspend",this.suspend);this.bws_on("continue",this._continue);this.bws_on("uninit",this.uninit);this.bws_on("add_segment",this.add_segment);this.bws_on("set_max_reqs",this.set_max_reqs);this.bws_on("method_init",this.method_init);this.bws_on("parser_init",this.parser_init);this.bws_on("track_state",this.track_state);this.player_on("play",this.set_play);this.player_on("pause",this.set_pause);this.player_on("waiting",this.set_waiting);this.player_on("on_frag_loading",this.on_frag_loading);var cb1,cb2,cb3,cb4,stats=this.bws.cdn_svc.attached_stats;if(stats){cb1=this.try_wrapper(this.on_waiting);cb2=this.try_wrapper(this.on_seek_start);stats.on("wait_begin",cb1);stats.on("seek_start",cb2);this.on("uninit",function(){stats.off("wait_begin",cb1);stats.off("seek_start",cb2)})}if(cdnlist.bootstraps){cb3=this.try_wrapper(this.get_cdns);cb4=this.try_wrapper(this.get_cdns_end);cdnlist.bootstraps.on("get_cdns",cb3);cdnlist.bootstraps.on("get_cdns_end",cb4);this.on("uninit",function(){cdnlist.bootstraps.off("get_cdns",cb3);cdnlist.bootstraps.off("get_cdns_end",cb4)})}if(this.CG("analysis.js",[]).length){this.analysis_int=setInterval(this.try_wrapper(this.analysis_cb),1e3)}}catch(e){if(this.log)this.log.info("error unittests init "+e+" "+e.stack);zperr({id:"bwsaver_err_set_unittest",err:e.message})}return this};zutil.inherits(E.Unittest,events.EventEmitter);E.Unittest.prototype.try_wrapper=function(func){var _this=this;var zperr=this.bws.zone.perr_get();return function(){try{return func.apply(_this,arguments)}catch(e){zperr({id:"bwsaver_err_set_unittest",err:e.message,throttle:1,filehead:e.stack,delay:true});_this.log.info("unittest error "+e.message+" "+e.stack)}}};E.Unittest.prototype.bws_on=function(event,cb){var _cb=this.try_wrapper(cb);this.bws_events[event]=(this.bws_events[event]||[]).concat(_cb);this.bws.on(event,_cb)};E.Unittest.prototype.player_on=function(event,cb){var _cb=this.try_wrapper(cb);this.player_events[event]=(this.player_events[event]||[]).concat(_cb);this.bws.player_on(event,_cb)};E.Unittest.prototype.snapshot=function(){var _this=this;this.bws.cdns.save({close:true});this.cdns_cache=storage.get("hola_cdnlist_cache");this.bootstrap_cache=storage.get("hola_bootstrap_cache");var vc_id=Infinity;this.bws.streams.forEach(function(stream){vc_id=stream.uid5)this.set(diff+"ms",null);this.last=now};E.Unittest.prototype.handle_pending=function(s,pending){var _this=this;if(pending){if(this.pending[pending]){this.pending[pending].str=s;this.pending[pending].n++}else this.pending[pending]={str:s,n:0};return true}var keys=Object.keys(this.pending);if(keys.length){keys.forEach(function(cmd){_this.test+=" "+_this.pending[cmd].str});this.pending={}}};E.Unittest.prototype.set=function(s,pending){var _this=this;if(this.handle_pending(s,pending))return;this.test+=" "+s;if(this.test.length>this.max_len){if(!this.start_test){this.start_test=this.gen_test();util.log_report({id:"log",cdn:this.bws.cdn_svc,add_log:this.CG("util.log.report.start.add_log"),add_unittest:this.CG("util.log.report.start.unittest")})}var now=date.monotonic();this.log.debug("unittest exceeded max "+this.max_len+" starting new snapshot");this.test="";this.snapshot();this.is_snapshot=true;var pos=this.player.get_pos();this.player_state(pos,this.bws.buf_sec(pos));this.bws.streams.forEach(function(stream){var reqs=[];stream.jtest_start=stream.completed;stream.reqs.forEach(function(req){var info={};["bitrate","cached_bw","cache_id","from_cache","orig_from_cache","rate","segment","uid","bw_by_performance_stats","vary"].reduce(function(o,p){o[p]=req.info[p];return o},info);info.uid=req.uid;if(req.info.clone)info.clone=req.info.clone.id;if(req.info.overloaded)info.clone=req.info.overloaded.id;var r={stream:stream.uid,range:req.from+"B-"+(req.to+1)+"B",cdn:req.cdn.uid,ms:now-req.tm_create,info:info};stream.jtest_start=Math.min(stream.jtest_start,req.from);reqs.push(r)});_this.stream_start(stream,{reqs:reqs,start:stream.jtest_start})})}return s};E.Unittest.prototype.req_resp=function(req,caller){req.unittest=req.unittest||{progress:0,ms_hdrs:0,last_update:date.monotonic()};if(req.loaded==req.unittest.progress&&req.ms_hdrs==req.unittest.ms_hdrs)return;if(caller=="onprogress"&&date.monotonic()-req.unittest.last_update<(this.CG("cdn.unittest.progress_update_ms")||1e3)){return}req.unittest.last_update=date.monotonic();if(caller!="progress")this.time_since();var len=req.to+1-req.from;if(this.adaptive&&this.file!=len){this.set("file("+len+"B)");this.file=len}var buf_sec=this.bws.buf_sec_last;var from=req.from+req.unittest.progress;var to=req.from+req.loaded-1;this.set("cw"+req.cdn.uid+"-1&&to==req.to||req.done?" ms "+Math.round(req.ms||req.elapsed()-req.ms_hdrs)+" done":"")+(buf_sec&&Math.round(buf_sec.buffered)?" buffered "+Math.round(buf_sec.buffered)+"s":"")+(buf_sec&&Math.round(buf_sec.pos)?" pos "+Math.round(buf_sec.pos)+"s":"")+(req.stream.bitrate&&this.bitrate[req.stream.uid]!=req.stream.bitrate&&!this.hola_adaptive?" bitrate "+req.stream.bitrate:"")+(req.done&&req.cdn.rate()!=Infinity?" rate "+req.cdn.rate():"")+(req.cdn.cache_flag&&!req.unittest.ms_hdrs?" cf "+req.cdn.cache_flag:"")+")");this.bitrate[req.stream.uid]=req.stream.bitrate;req.unittest.cache=req.info.from_cache||req.info.orig_from_cache;req.unittest.progress=req.loaded;req.unittest.ms_hdrs=req.ms_hdrs;req.unittest.resp=true;var q=this.resp_q[req.stream.uid],prev_loaded;from=to=undefined;while(q.loaded!=prev_loaded){prev_loaded=q.loaded;var c=q.serve[0];if(!c||c.from>q.loaded)break;if(c.jump){q.loaded=c.to;q.serve.splice(0,1);continue}if(from===undefined){from=c.from;to=from+c.len}else to+=c.len;q.serve.splice(0,1);q.loaded+=c.len}if(to>from)this.set_serve(req.stream,from,to);this.last_cmd="cw_resp"};E.Unittest.prototype.parser_init=function(){var cb=this.try_wrapper(this.onseek);this.bws.parser.on("seek_complete",cb);this.on("uninit",function(){this.bws.parser.off("seek_complete",cb)})};E.Unittest.prototype.allow_early_req=function(req){this.time_since();this.set_progress_all(req.stream)};E.Unittest.prototype.req_log_progress=function(req){if(req&&!req.done)this.req_resp(req,"progress")};E.Unittest.prototype.req_end=function(req){this.time_since();this.req_log_progress(req);if(req.cdn.is_hola())this.last_hola_req_url=req.url;else this.last_origin_req_url=req.url;if(!req.error)return;if(req.info.overloaded||req.info.clone||req.info.was_cloned||req.info.was_overloaded){this.req_log_progress(req.info.overloaded||req.info.clone||req.stream.get_req_by_id(req.info.was_overloaded)||req.stream.get_req_by_id(req.info.was_cloned))}this.set("cw"+req.cdn.uid+(req.error==ERR.aborted&&!req.abort_fragment?">":"<")+"!(id "+req.uid+(req.abort_fragment?" abort":"")+")");this.last_cmd="cw_end"};E.Unittest.prototype.gen_playlist=function(){var _this=this;if(!this.hola_adaptive||!this.bws.method.playlists)return;var pl=this.bws.method.playlists;if(!pl)return;var i=this.bws.method.qid||0;if(!pl[i].segments)for(i=0;i1?" vc_id "+this.start_vc_id:"")+(this.is_snapshot&&this.hola_adaptive?" delay_stream":"")+(this.res?" resolution "+this.res.width+"x"+this.res.height:"")+") file("+(this.adaptive?"30C":(this.bws.fullsize?this.bws.fullsize+"B":"10C")+" dynamic")+") jtest(set_slice) "+this.test+" free";if(typeof window!=="undefined"&&window.hola_cdn)window.hola_cdn.last_gen_test=test}catch(e){this.log.info("error unittests generation "+e);zperr({id:"bwsaver_err_set_unittest",err:"genration failed "+e.message,bt:e.stack})}this.in_gen_test=false;return test};E.Unittest.prototype.on_waiting=function(){var _this=this;clearTimeout(this.timeout_handle);this.timeout_handle=setTimeout(function(){var s=_this.bws.cdn_svc.attached_stats.get_stats();if(!s.stat.wait_waiting_ms&&!s.stat.wait_waiting_over_max_ms)return;var pos=_this.player.get_pos();if(pos<=3)_this.bws.stats.buffering.start++;else if(pos-_this.bws.start_pos<=3)_this.bws.stats.buffering.seek++;else if(!_this.bws.cdns.can_get_by_hola(_this.bws.slice,_this.bws.slice_sec)){_this.bws.stats.buffering.none_can_get++}else _this.bws.stats.buffering.other++;if(!_this.buffering_test){try{_this.log.info("buffering event "+(s.stat.wait_waiting_ms?"wait_waiting "+s.stat.wait_waiting_ms:"over_max "+s.stat.wait_waiting_over_max_ms));_this.set_player_state("waiting_js");_this.buffering_test=_this.gen_test()}catch(e){_this.buffering_test="error "+e.stack}}if(!_this.buffering_test_sent){util.log_report({id:"log",cdn:_this.bws.cdn_svc,add_log:_this.CG("util.log.report.wait.add_log"),add_unittest:_this.CG("util.log.report.wait.unittest")});_this.buffering_test_sent=true}},this.CG("cdn.unittest.buffering_wait_interval")||1e3)};E.Unittest.prototype.on_seek_start=function(){if(this.seek_test)return;util.log_report({id:"log",cdn:this.bws.cdn_svc,add_log:this.CG("util.log.report.seek.add_log"),add_unittest:this.CG("util.log.report.seek.unittest")});this.seek_test=this.gen_test()};E.Unittest.prototype.set_slow=function(req){if(req.error)return;this.req_log_progress(req);this.time_since();this.set("cw"+req.cdn.uid+">slow("+this.req_range(req)+")");this.last_cmd="cw_slow"};E.Unittest.prototype.player_state=function(pos,bsec){this.time_since();if(bsec.player>39)this.bws_set_progress_all();var total=Math.round(bsec.buffered+bsec.obtained);this.set("player_state(pos "+Math.round(pos)+"s"+" player "+bsec.player+"s"+(total?" buffered "+total+"s":"")+")","player_state")};E.Unittest.prototype.set_policy=function(policy){this.time_since();this.set("set_policy("+policy+")");this.last_cmd="set_policy"};E.Unittest.prototype.set_serve=function(stream,from,to){from=Math.max(from,stream.jtest_start||0);var s="",len=to-from;if(this.adaptive&&!this.hola_adaptive&&this.file!=len){s+="file("+len+"B) ";this.file=len}if(this.hola_adaptive){for(var i=from;ifrom?" ":"")+"vc"+stream.uid+"req(get_cdns"+(fetch_opt.from_cache?" cache":"")+")");this.last_cmd="cw_req"};E.Unittest.prototype.get_cdns_end=function(host,child,error){this.time_since();var retval=child.retval,resp="single";if(!error&&retval.data){resp+=" ";retval.data.single.forEach(function(cdn){resp+=cdn.host+","});resp=resp.slice(0,-1);if(retval.data.fast&&retval.data.fast.length){resp+=" fast ";retval.data.fast.forEach(function(cdn){resp+=cdn.host+","});resp=resp.slice(0,-1)}}else resp="status 403";var cdn=cdnlist.bootstraps.get_by_host(host);this.set("cw"+(cdn?cdn.uid:0)+"fastest.loaded)fastest=r});if(fastest)this.req_log_progress(fastest)}if(req.info.rate)stream_info.rate++;else stream_info.segment++;if(req.uid===undefined){req.uid=req.info.uid||req.cdn.req_uid;req.cdn.req_uid=req.uid+1}this.set("cw"+req.cdn.uid+">req("+this.req_range(req)+(req.info.from_cache?" cache":"")+")");this.last_cmd="cw_req"};E.Unittest.prototype.onseek=function(info){var _this=this;this.time_since();this.bws.streams.forEach(function(stream){_this.set("vc"+stream.uid+">seek("+Math.round(info.time)+"sec offset "+info.offset+(_this.hola_adaptive?"i":"B")+")")});this.last_cmd="seek"};E.Unittest.prototype.on_playlist_update=function(){var playlist=this.playlist;this.gen_playlist();if(playlist==this.playlist)return;this.time_since();this.set("playlists("+this.playlist+")");this.playlist_set=true;this.last_cmd="playlist_update"};E.Unittest.prototype.on_resolution_change=function(res){this.time_since();this.set("resolution("+res.width+"x"+res.height+")");this.last_cmd="resolution"};E.Unittest.prototype.on_set_quality=function(qid){this.time_since();this.set("set_quality("+qid+")");this.last_cmd="set_quality"};E.Unittest.prototype.analysis_checkpoint=function(){if(this.analysis_int)this.try_wrapper(this.analysis_cb)()};E.Unittest.prototype.uninit=function(){this.emit("uninit");if(this.timeout_handle)clearTimeout(this.timeout_handle);var event,i;for(event in this.bws_events){for(i=0;ioffset("+completed+"B)");this.last_cmd="offset"};E.Unittest.prototype.stream_start=function(stream,opt){var reqs=opt.reqs,id=opt.id,cb;if(stream.uid===undefined){stream.uid=+id||this.vc_id;this.vc_id=stream.uid+1}this.resp_q[stream.uid]=this.resp_q[stream.uid]||{loaded:this.bws.adaptive?this.bws.method.start_index||this.bws.method.first_index:stream.from,serve:[]};this.stream_info[stream.uid]={rate:0,segment:0};if(this.adaptive&&!reqs){if(this.hola_adaptive){this.set("vc"+stream.uid+">req("+(stream.from?stream.from+"B-"+stream.to+"B ":"")+"verify)");cb=this.try_wrapper(this.allow_early_req);stream.on("allow_early_req",cb);this.on("uninit",function(){stream.off("allow_early_req",cb)})}return}var best_cdn=this.bws.cdns.get_best_cdn("stream_start");this.time_since();this.set("vc"+stream.uid+">req("+(opt.start||stream.from)+"B-"+stream.to+"B"+(stream.slice?" slice "+stream.slice+"B":"")+(this.hola_adaptive?" qid "+stream.bws.method.qid:"")+(stream.bitrate?" bitrate "+stream.bitrate:"")+(stream.map.sum?" map "+JSON.stringify(stream.map):"")+(reqs?" init "+JSON.stringify(reqs):"")+(stream.monitor_start?" monitor_ms "+Math.round(Math.max(500-(date.monotonic()-stream.monitor_start),0)):"")+(best_cdn?" best_cdn cw"+best_cdn.uid:"")+(this.bws.player.is_paused()?" paused":"")+(stream.completed>(opt.start||stream.from)?" completed "+stream.completed:"")+")");cb=this.try_wrapper(this.allow_early_req);stream.on("allow_early_req",cb);this.on("uninit",function(){stream.off("allow_early_req",cb)});this.last_cmd="vc_req"};E.Unittest.prototype.method_init=function(method){if(method.type=="hola_adaptive"){var seek_cb=this.try_wrapper(this.onseek);var pl_cb=this.try_wrapper(this.on_playlist_update);var sq_cb=this.try_wrapper(this.on_set_quality);var res_cb=this.try_wrapper(this.on_resolution_change);method.on("seek_complete",seek_cb);method.on("update_playlists",pl_cb);method.on("set_quality",sq_cb);method.on("resolution_change",res_cb);this.on("uninit",function(){method.off("seek_complete",seek_cb);method.off("update_playlists",pl_cb);method.off("set_quality",sq_cb);method.off("resolution_change",res_cb)});this.hola_adaptive=true}};E.Unittest.prototype.analysis_cb=function(){var run=function(path,sid){var ex;try{if(!this.bws.zone.conf_apply(path,[],undefined,this.bws,true))return false}catch(e){ex=e.message}util.log_report({exception:ex,id:"analysis",cdn:this.bws.cdn_svc,add_unittest:!ex,add_log:!ex,analysis_tag:Object.assign({},this.CG("analysis.tag"),{sid:sid})});if(this.log)this.log.notice("sending log report %s",sid);return true}.bind(this);var snippets=this.CG("analysis.js",[]);snippets.forEach(function(s,i){if(s.mode!="multi"&&s.count>0)return;if(run("analysis.js."+i+".js",s.id))s.count=s.count+1||1});if(snippets.every(function(s){return s.mode!="multi"&&s.count>0}))this.analysis_int=clearInterval(this.analysis_int)};E.Unittest.prototype.set_play=function(){this.set_player_state("play")};E.Unittest.prototype.set_pause=function(){this.set_player_state("pause")};E.Unittest.prototype.set_waiting=function(){this.set_player_state("waiting")};E.Unittest.prototype.set_player_state=function(state){this.time_since();this.set("set_player_state("+state+")");if(state=="waiting_js")this.bws_set_progress_all();this.last_cmd="set_player_state"};E.Unittest.prototype.on_frag_loading=function(idx){this.time_since();this.set("frag_loading("+idx+")");this.last_cmd="on_frag_loading"};E.Unittest.prototype.set_max_reqs=function(stream){if(this.max_num_reqs==stream.max_num_reqs)return;this.time_since();this.set("vc"+stream.uid+">set_max_reqs("+stream.max_num_reqs+")");this.max_num_reqs=stream.max_num_reqs;this.last_cmd="set_max_reqs"};E.Unittest.prototype.track_state=function(){this.time_since();this.bws_set_progress_all()};E.Unittest.prototype.add_segment=function(segment,stream){this.time_since();this.set("vc"+stream.uid+">req(qid "+(segment.qid||segment.playlist_id)+" hls t"+segment.index+" dur "+segment.dur+(segment.bitrate&&segment.bitrate!=segment.qid?" bitrate "+segment.bitrate:"")+")");this.last_cmd="vc_req"};return E}); define("/svc/cdn/pub/req.js",["/util/url.js","/svc/cdn/pub/util.js","/util/etask.js","/util/util.js","/util/date.js","/util/events.js","/util/array.js","/util/escape.js"],function(zurl,util,etask,zutil,date,events,array,zescape){var ERR=util.ERR;var ms_since=util.ms_since;var KB=1024;zutil.inherits(Req,events.EventEmitter);var E=Req,proto=E.prototype;function Req(cdn,from,to,stream,info,E){if(!(this instanceof Req))return new Req(cdn,from,to,stream,info,E);this.info=info||{};this.cdn=cdn;this.from=from;this.to=to;this.expected_status=this.to==-1&&!this.from?200:206;this.E=E;this.stream=stream;this.zone=stream.bws.zone;this.hola_resp={};this.CG=this.zone.CG.bind(this.zone);this.CS=this.zone.CS.bind(this.zone);this.CE=this.zone.CE.bind(this.zone);this.CES=this.zone.CES.bind(this.zone);this.log=this.zone.log_get().set_module("req");this.fallback_wrapper=this.stream.bws.fallback_wrapper.bind(this);this.oncomplete=this.fallback_wrapper(this._oncomplete);this.set_name();this.slice_sec=this.to_sec();this.ttc=this.remaining().ms;this.ttc_ms_hdrs=cdn.ms_hdrs;this.info.bitrate=stream.bitrate;this.info.orig_from_cache=this.info.from_cache;if(this.info.rate&&this.cdn.is_origin()&&this.CG("cdn.send_reqs.origin.head_unsupported")){this.from=1;this.to=2}this.init();stream.reqs.push(this);this.fetch_bin()}proto.set_name=function(){this.name=(this.id?this.id+" ":"")+(this.info.rate?"rate":this.from+"-"+this.to)+(this.info.segment?" segment "+this.info.segment.index+" of "+this.info.segment.playlist_id:"")};proto.init=function(){this.tm_create=date.monotonic();this.progress_ts=this.tm_create;this.ms_hdrs=this.served=this.loaded=this.ttfb=this.completed=0;this.error=undefined;this.progress=this.from};proto.set_params=function(url){if(this.cdn.is_origin())return;var s="",h="";if(!this.info.rate&&!this.CG("cdn.send_reqs.disable_url_ranges")&&(this.to!=-1&&(!this.stream.bws.adaptive||this.stream.bws.method.ranged_playlist)||this.from)){this.hrange=util.set_param("hrange",this.from+"-"+(this.to<0?"":this.to));this.expected_status=200;s+=this.hrange;if(this.CG("cdn.send_reqs.disable_url_params"))s=s.slice(1)}if(!this.CG("cdn.send_reqs.disable_url_params")){var bws=this.stream.bws;s+=util.set_param("player",bws.player.name);s+=util.set_param("tech",bws.tech);s+=util.set_param("method",bws.method.type);s+=util.set_param("cdn",this.cdn.is_fast()?"fast":"single");s+=util.set_param("live",bws.player.is_live_stream());s+=util.set_param("rate",this.info.rate);h+=util.set_param("bps",this.cdn.bps());h+=util.set_param("type",this.info.clone?"clone":this.info.overloaded?"overloaded":"req");s+=bws.method.set_params(this)}this.vary_hdr=h!=""?h.slice(1):null;if(s!=""){var vary=this.info.vary?"&"+this.info.vary:h;this.path+=(url.search?"&":"?")+(!this.CG("cdn.send_reqs.disable_url_params")?"hola":"")+s+(this.CG("cdn.send_reqs.vary_url_params")&&vary!=""&&(this.hrange||!this.from&&this.to==-1)?vary:"")}};proto.fetch_bin=function(){var _this=this,stream=this.stream,cdn=this.cdn,opt;var segment=this.info.segment,info=this.info;function gen_url(vid){var host=_this.CG("cdn.send_reqs.https")?cdn.hostname:cdn.host;if(_this.E.debug_fail_cdns&&!cdn.is_origin()){_this.log.console("failing "+JSON.stringify(vid));host="1.1.1.18"}_this.cache_path=_this.path=(cdn.is_hola()?host+"/"+util.conf.customer+"/"+_this.CG("zone")+"/":"")+(cdn.is_hola()?vid.hostname:cdn.hostname)+(vid.port?":"+vid.port:"");_this.cache_path+=vid.pathname;_this.path+=vid.path;_this.set_params(vid);var protocol=vid.protocol=="https:"||typeof location=="undefined"||!["http:","https:"].includes(location.protocol)||util.is_ios_sdk||util.is_android_sdk||window.hola_cdn_sdk?vid.protocol:location.protocol;return protocol+"//"+_this.path}function onprogress(event){var t;if(_this.info.rate){if(event.loaded>1&&event.loaded_this.loaded)_this.stream.bws.emit("req_resp",_this,"onprogress");_this.loaded=event.loaded||0;_this.progress=_this.from+_this.loaded;_this.progress_ts=date.monotonic();if(_this.to<0&&(event.totalSize||event.total)){_this.to=_this.opt.to=(event.totalSize||event.total)-1;_this.set_name()}if((t=date.monotonic()-_this.hdrs_ts)&&event.loaded>=1e4)_this.cdn.set_progress_bw(Math.round(event.loaded*1e3*8/t));var other=_this.info.clone||_this.info.overloaded;if(other&&!other.error&&(_this.can_get_a()&&!other.can_get()||!_this.stream.bws.adaptive&&other.to>_this.to||_this.remaining_ms()-1?this.to+1:to);if(this.info.segment){var segment=this.info.segment;res=!to?segment.dur:this.to>-1?(to-from)/this.to*segment.dur:segment.bitrate?(to-from)/(segment.bitrate/8*segment.dur):0}else{res=parser&&parser.ofs2time&&!isNaN(parser.ofs2time(to))?parser.ofs2time(to)-parser.ofs2time(from):this.stream.sz2sec(to-from)}if(from===undefined&&to===undefined)this.dur=res;return res?Math.round(res*100)/100:res};proto.is_slow=function(){if(zutil.is_mocha()&&this.E.jtest.set_slow)return this.is_slow_jtest();if(this.info.rate)return false;var remaining=this.remaining(),s,d="";var ms=this.to_ms()||this.stream.slice_sec*date.ms.SEC;var elapsed=this.elapsed(),over_ms=500;s="req "+this.name+" set slow "+(!this.ms_hdrs&&elapsed>2*date.ms.SEC?"no hdrs and elapsed > 2sec":remaining.ms"+Math.max(ms-elapsed+over_ms,0)+" ms "+ms+" elapsed "+elapsed:"elapsed "+elapsed+" > ms "+ms)+" rate "+this.rate();var ret=remaining.msms-elapsed+over_ms||elapsed>ms||!this.ms_hdrs&&elapsed>2*date.ms.SEC;if(ret&&!this.slow){this.update_stats();s+=" new rate "+this.rate();this.stream.bws.emit("set_slow",this)}else if(!ret&&this.slow)this.log.info("req "+this.name+" is suddenly not slow!");if(ret&&ms_since(this.too_slow)>date.ms.SEC&&(elapsed>ms||elapsed>ms/2&&remaining.ms>ms-elapsed+over_ms)){this.too_slow=date.monotonic();if(this.slow){var prev=this.rate();this.update_stats();if(prev!=this.rate())d=" new rate "+this.rate();s+=" too slow"}this.emit("too_slow",this,"is_slow")}if(ret&&s&&(!this.slow||d.length))this.log.info(s+d+" loaded "+this.loaded);return this.slow=ret};proto._oncomplete=function(){var zperr=this.zone.perr_get();this.closed=1;this.tm_complete=date.monotonic();var res="success",ms;var origin=this.stream.bws.cdns.get_origin();if(!this.error&&this.info.overloaded)this.info.overloaded.abort("oncomplete");if(!this.error&&this.info.clone)this.info.clone.abort("oncomplete");if(this.error){if(this.error!=ERR.aborted){if(this.error==ERR.head_unsupported)this.CES("cdn.send_reqs.origin.head_unsupported");else if(this.error==ERR.ranges_unsupported)this.CES("cdn.send_reqs.origin.ranges_unsupported");if(this.error==ERR.disconnected){this.cdn.disconnected();res="disconnected "+(this.cdn.is_usable()?"":" failed final")}else if(!this.cdn.is_origin()||!this.info.rate){this.cdn.failed(this.error==ERR.ranges_unsupported&&!this.stream.bws.adaptive||this.cdn.is_single());res="failed"+(this.cdn.enabled?"":" final ")+this.error+" "+this.error_str}zperr({id:(this.cdn.is_origin()?"origin":"zagent")+"_failure",err:this.error,delay:true})}else{res="aborted by "+this.abort_caller;if(this.stream.bws.fastest_policy()&&this.is_slow())this.cdn.delayed++}}this.log.info("resp end cw"+this.cdn.uid+"/"+this.uid+" "+res+" "+this.elapsed()+"ms "+this.ms_hdrs+"/"+this.ttfb+"/"+this.ms+"/"+(this.ms_hdrs_all||"")+" rate "+this.cdn.rate()+(this.resp?" server cache "+(this.resp.hdrs["x-cache"]||"unknown"):"")+(origin?" origin rate "+origin.rate():"")+(ms?" dur "+ms:"")+" loaded "+this.loaded+(this.info.bw_by_performance_stats?" bw by performance stats":""));this.stream.oncomplete_req(this);this.emit("complete");this.stream.bws.emit("req_complete",this)};function freeze_req_and_fetch_bin(opt){var _this=this;var ms=this.E.debug_freeze_next_req.ms;var cdn=this.E.debug_freeze_next_req.cdn;delete this.E.debug_freeze_next_req;return etask([function(){_this.log.console("sleep for next cdn "+cdn+" req "+ms+"ms "+JSON.stringify(opt));return etask.sleep(ms)},function(){_this.log.console("sleep done cdn "+cdn);this.return(ms)}])}function freeze_cdns_and_fetch_bin(opt){var _this=this;var ms=this.E.debug_freeze_cdns_ms;return etask([function(){_this.log.console("sleep for "+ms+"ms "+JSON.stringify(opt));return etask.sleep(ms)},function(){_this.log.console("sleep done");this.return(ms)}])}proto.abort=function(caller){if(this.error)return;this.log.debug("req "+this.id+" aborted by "+caller);this.abort_caller=caller;this.error=ERR.aborted;var reqs=this.stream.reqs;array.rm_elm(reqs,this);this.cdn.aborted++;this.cdn.aborted_bytes+=this.loaded-this.served;if(this.info.overloaded){this.info.overloaded.other_completed=this.from+this.completed;this.info.overloaded.info.was_cloned=this.id;this.info.was_overloaded=this.info.overloaded.id;this.info.overloaded.info.clone=undefined}if(this.info.clone){this.info.clone.other_completed=this.from+this.completed;this.info.clone.info.was_overloaded=this.id;this.info.was_cloned=this.info.clone.id;this.info.clone.info.overloaded=undefined}this.info.overloaded=this.info.clone=undefined;if(this.sp)this.sp.return(this.error)};proto.remaining_ms=function(o){return this.remaining({if_not_accurate:o===undefined?Infinity:o}).ms};proto.remaining=function(opt){opt=opt||{};var sz=this.size(),left=Math.max(sz-this.loaded,0);var ms=this.done?0:ms_since(this.tm_create);var cdn=this.info.from_cache?this.stream.bws.cache.calc_ttc(left):this.cdn.calc_ttc(left);return{bytes:left,ms:this.loaded(this.reqs[i].ttfb||this.reqs[i].ms_hdrs));i++);var ret=i200)){this.bws.cache.unset(req.info.cache_id,req.cdn.host,req.from,req.to)}if(!req.error&&req.info.overloaded)this.bws.stats.parallel_overloaded_n++;else if(!req.error&&req.info.clone)this.bws.stats.parallel_clone_n++;this.bws.method.oncomplete_req(req);if(req.info.early){this.bws.stats.early_req.n++;this.bws.stats.early_req.ms+=req.ms_hdrs-(req.tm_complete-req.info.early)}else if(!req.info.rate&&this.bws.method.type!="adaptive"&&(req.index||req.to)!=this.to){this.bws.stats.early_req.miss_n++}};proto.get_cdn_by_req_id=function(id){var m=(id||"").match(/cw([0-9]+)\/[0-9]+/);return m?this.bws.cdns.find(function(c){return c.uid==m[1]}):null};proto.get_req_by_id=function(id){return this.reqs.find(function(r){return r.id==id})};proto.needed_sec=function(){return Math.max(this.bws.needed_sec()-this.requested_sec(),0)};proto.parallel_on_slow=function(caller){var best_cdn;if(this.CG("cdn.overload.disable")||(!this.CG("cdn.send_reqs.lowcost_parallel_on_slow")?this.bws.lowcost_policy():0)||this.stopped||!this.bws.cdns){return}var parallel=[];var overloaded=this.reqs.some(function(r){return!!r.info.overloaded});this.reqs.forEach(function(r){if(r.info.rate)return;if(r.done||r.loaded==r.size())return this.log.debug("req "+r.name+" is already done");if(!r.is_slow()){return this.log.debug("req "+r.name+" "+r.cdn.host+" not slow "+ms_since(r.tm_create)+"ms loaded "+r.loaded)}if(r.cdn.is_origin()&&this.CG("cdn.overload.disable_origin"))return this.log.debug("req "+r.name+" origin overload disabled");var other=r.info.overloaded||r.info.clone;if(other){return this.log.debug("req "+r.name+" is "+(r.info.overloaded?"overloaded by ":"clone of ")+other.id+" loaded "+r.loaded)}var remaining=r.remaining();var sz=r.opt.streaming?remaining.bytes:r.size();var origin=this.bws.cdns.get_origin(),best_ttc;var sec=Math.max((r.to_sec()||this.slice_sec)-r.elapsed()/date.ms.SEC,1);if(r.info.cache_backup){best_cdn=r.info.cache_backup.cdn;best_ttc=this.bws.cache.calc_ttc(remaining.bytes)}else if(!r.cdn.is_origin()&&origin&&origin.is_usable()&&(origin.is_bw_from_cache()||r.info.was_cloned&&this.get_cdn_by_req_id(r.info.was_cloned)!=origin||r.info.was_overloaded&&this.get_cdn_by_req_id(r.info.was_overloaded)!=origin)&&origin.can_get(sz,sec,{by_hdrs:origin.is_bw_from_cache()})){best_cdn=origin;best_ttc=Infinity}else if(r.info.was_cloned||r.info.was_overloaded){return this.log.debug("req "+r.name+" was "+(r.info.was_overloaded?"overloaded by "+r.info.was_overloaded:"clone of "+r.info.was_cloned)+" loaded "+r.loaded)}else{best_cdn=this.bws.cdns.get_best_cdn("parallel_on_slow",{allow_fast:this.bws.method.fast_allowed_range(this,{from:r.from+r.loaded,to:r.to,index:r.info.segment&&r.info.segment.index}),sz:sz,sec:sec});best_ttc=best_cdn.calc_ttc(remaining.bytes)}if(!best_cdn)return this.log.debug("req "+r.name+" no best cdn");if(r.cdn==best_cdn&&!r.info.cache_backup)return this.log.debug("req "+r.name+" is already using best cdn");if(best_ttc!=Infinity&&remaining.ms-1&&from>to){return void this.onerror("invalid range "+from+"-"+to,{fallback:1,reason:"invalid_range"})}var req=new zreq(cdn,from,to,this,info,this.bws.cdn_svc);this.bws.method.sort_reqs(this);if((!info||!info.clone&&!info.rate)&&this.stats.prev_cdn&&cdn!=this.stats.prev_cdn){var prev=this.stats.prev_cdn;if(cdn.is_origin()&&prev.is_origin())this.bws.stats.cdn_switch.o2o++;else if(cdn.is_origin()&&!prev.is_origin())this.bws.stats.cdn_switch.h2o++;else if(!cdn.is_origin()&&prev.is_origin())this.bws.stats.cdn_switch.o2h++;else if(!cdn.is_origin()&&!prev.is_origin())this.bws.stats.cdn_switch.h2h++}if(!info||!info.clone&&!info.rate)this.stats.prev_cdn=cdn;this.bws.cancel_delayed_fb();return req};proto.cache_validate=function(req){var zperr=this.bws.zone.perr_get();var hdrs=req.resp.hdrs;var hdr_date=hdrs.date,hdr_x_date=req.cdn.is_hola()&&hdrs["x-date"];if(!req.info.from_cache||!hdr_date)return;var ndate=date(hdr_date),pdate;var entry=this.bws.cache.get_entry(req.info.cache_id);if(!(pdate=entry.maps[req.cdn.host].get_date(req.from,req.to)))return;if(ndate<=pdate.setSeconds(pdate.getSeconds()+1)||hdr_x_date&&hdr_x_date!=hdr_date||req.hola_resp.status==304){return}req.info.from_cache=false;this.log.info("mismatch "+hdr_date+" > "+pdate.toUTCString());zperr({id:"cache_mismatch",delay:true});this.bws.cache.unset(req.info.cache_id,req.cdn.host)};proto.send_reqs=function(){if(this.stopped)return;this.bws.player.refresh_buffered();if(this.bws.fastest_policy())this.parallel_on_slow("send_reqs");this.bws.method.send_reqs(this)};proto.choose_cache_source=function(cached){cached.sort(function(a,b){return b.range.to-a.range.to});var chosen,chosen_i;if(cached.length)this.log.debug("cache_get found "+cached.length+" options");for(var i=0;icached[i].range.to-cached[i].range.from){break}if(cdn=this.bws.cdns.find(function(e){return e.is_usable()&&e.host==cached[i].cdn})){if(chosen&&chosen.is_usable()&&chosen.compare_rate(cdn)<=0){this.log.debug("cdn "+cdn.id+" !fail "+cdn.bps()+"<"+chosen.bps()+" "+cached[i].range.from+"-"+cached[i].range.to);continue}chosen=cdn;chosen_i=i;this.log.debug("chosen "+cdn.id+" !fail "+cdn.bps()+"Bps"+" "+cached[i].range.from+"-"+cached[i].range.to)}else if(cdn=this.bws.cdns.find(function(e){return e.enabled&&e.host==cached[i].cdn})){if(chosen&&(chosen.is_usable()||chosen.compare_rate(cdn)<=0||(cached[chosen_i].range.to-cached[chosen_i].range.from)/2>cached[i].range.to-cached[i].range.from)){this.log.debug("cdn "+cdn.id+" usable "+cdn.bps()+"<"+chosen.bps()+" "+cached[i].range.from+"-"+cached[i].range.to);continue}chosen=cdn;chosen_i=i;this.log.debug("chosen "+cdn.id+" enabled "+cdn.bps()+" "+cached[i].range.from+"-"+cached[i].range.to)}}if(!chosen)return;this.log.debug("next cache cdn "+chosen.name+" "+JSON.stringify(cached[chosen_i]));return{cdn:chosen,range:cached[chosen_i].range}};proto.sec_until_offset=function(o){return Math.max(0,this.bws.method.offset2sec?this.bws.method.offset2sec(this,o)-this.bws.get_pos():this.bws.method.dur)};proto.cache_get=function(range){if(!this.bws.cache||this.CG("cdn.cache.disabled"))return;var cached=this.bws.cache.next_immediate({id:range.cache_id,from:range.from,to:range.to})||[];return this.choose_cache_source(cached)};proto.get_best_cdn=function(range){var sz=range.to<0||this.bws.method.type=="hola_adaptive"?this.slice:range.to+1-range.from;var allow_fast=this.bws.method.fast_allowed_range(this,range);var sec=Math.round(this.sec_until_offset(range.from)*.8);return Object.assign({fastest:this.bws.cdns.get_best_cdn("next_cdn",{allow_fast:allow_fast,sz:sz,sec:sec,fastest:this.bws.fastest_policy()})},this.bws.cdns.get_lowcost_cdn(sz,this.slice_sec,allow_fast))};proto.next_cdn=function(range){var if_not_cached=this.CG("cdn.send_reqs.origin_if_not_cached");var fastest=this.bws.fastest_policy();var origin=this.bws.cdns.get_origin();var res;if(if_not_cached&&this.bws.method.offset2sec&&origin&&origin.is_usable()&&(!this.bitrate||if_not_cached>this.bws.method.offset2sec(this,range.from))){res={cdn:origin,range:range};this.log.debug("origin if not cached - next cdn "+JSON.stringify(res));return res}if(fastest&&origin&&origin.is_usable()&&(this.CG("cdn.send_reqs.origin_as_fastest")||this.CG("cdn.send_reqs.origin_until_rated")&&!origin.bpms)){res={cdn:origin,range:range};this.log.debug("next cdn "+JSON.stringify(res));return res}var chosen_cdns=this.get_best_cdn(range);var best=fastest?chosen_cdns.fastest:chosen_cdns.lowcost_usable||chosen_cdns.fastest;if(!best)return void this.log.debug("next cdn none - no best");if(fastest){this.reqs.forEach(function(req){if(req.cdn==best||req.cdn.bpms||req.loaded<128*KB||req.info.from_cache){return}if(best.compare_rate({host:req.cdn.host,bpms:req.bpms(),ms_hdrs:req.ms_hdrs,can_get:function(){return req.can_get()},rate:function(){return req.rate()},is_bw_from_cache:function(){return 0},is_req:true})>0){best=req.cdn}})}if(this.CTD("cdn.send_reqs.next_cdn.use_best_single")){var _best=fastest?best:this.bws.cdns.prev_best_cdn;if(!this.CG("cdn.send_reqs.next_cdn.disable_use_best_single")&&_best){this.log.debug("use_best_single - next cdn "+_best.id);return{cdn:_best,range:range}}}if(util.jtest.next_cdn){return{cdn:this.bws.cdns.get_by_uid(util.jtest.next_cdn),range:range}}if(res=best?{cdn:best,range:range}:null){this.log.debug("next cdn policy "+this.bws.policy()+" buffered "+this.bws.buf_sec_total()+" requested "+this.requested_sec()+" chosen cw"+res.cdn.uid+"/"+res.cdn.req_uid+" rate "+res.cdn.rate()+" best cw"+best.uid+(res.cdn!=best?" rate "+best.rate():""))}return res};proto.next_unrated=function(){var allow_fail=this.bws.cdns.every(function(cdn){return!cdn.is_usable()});var live_stream=this.bws.player.is_live_stream();var chosen=this.bws.cdns.find(function(cdn){var ping_ms=this.CG("cdn.send_reqs.rate.keep_alive")?cdn.is_origin()?Math.max(this.CG("cdn.send_reqs.origin.keep_alive")||0-date.ms.SEC,4*date.ms.SEC):25*date.ms.SEC:live_stream&&cdn.cache_flag=="miss"&&cdn.is_hola()?5*date.ms.SEC:this.CG("cdn.send_reqs.rate.stale_ms")||5*date.ms.MIN;return cdn.enabled&&(allow_fail||cdn.is_usable())&&!this.is_cdn_active(cdn)&&(!cdn.ms_hdrs||ms_since(cdn.success_ts)>ping_ms)&&(!cdn.is_origin()||!this.CG("cdn.send_reqs.origin.head_unsupported")||!this.CG("cdn.send_reqs.origin.ranges_unsupported"))&&!cdn.is_disconnected()},this);return chosen?{cdn:chosen}:null};proto.requested_sec=function(){var sec=0,ranges=[];this.reqs.forEach(function(r){if(r.info.rate)return;var range=this.bws.adaptive?r.info.segment.index+"-"+r.info.segment.index:r.from+"-"+r.to;if(ranges.includes(range))return;sec+=r.to_sec(r.opt.streaming?r.progress:r.from,r.to)||0;ranges.push(range)},this);return sec};proto.add_chunk=function(chunk){var i,req=chunk.req;if(req.info.data_prefix&&chunk.from>req.from){chunk.from-=req.info.data_prefix;chunk.to-=req.info.data_prefix}if(!this.bws.method.need_chunk(chunk))return chunk.req.discarded=chunk.data.byteLength;if(req.info.segment)chunk.index=req.info.segment.index;var from=chunk.from;if(req.pending_served){if(req.pending_served.to+1==from)from=req.pending_served.from;req.pending_served=null}chunk.sec=req.to_sec(from,chunk.to)||0;if(!chunk.sec&&from!=chunk.to)req.pending_served={from:from,to:chunk.to};this.log.debug("req "+req.name+" data added"+(req.info.from_cache?" from cache":"")+" length "+chunk.data.byteLength);chunk.id=(req.info.segment?"-- "+req.info.segment.index+" -- ":"")+chunk.from+"-"+chunk.to+" "+req.id+(req.info.segment?" qid "+req.info.segment.bitrate:"");for(i=0;ibwsaver "+from+"-"+to+" sec "+sec+" of range "+(this.bws.adaptive?chunk.req.from+"-"+chunk.req.to+" completed "+chunk.req.loaded:this.from+"-"+this.to+" completed "+this.completed));if(!i)this.bws.set_serving_state(!this.served_bytes);this.served_sec+=sec;this.served_bytes+=chunk.data.byteLength;if(chunk.req.cdn.is_fast()){this.bws.stats.served_fast_bytes+=chunk.data.byteLength;this.bws.stats.served_fast_sec+=sec}this.chunks.splice(i,1);chunk.fullsize=this.fullsize;this.bws.method.ondata(chunk);i--;served=true}if(served)this.emit("serve");this.bws.buf_sec_recalc()};proto.bps=function(){return Math.round(this.bpms()/date.ms.SEC)};proto.bpms=function(){return this.served_bytes/ms_since(this.tm_create)};proto.delay_fallback=function(err,opt){var _this=this,ms;if(!opt||!opt.fallback||opt.reason!="no_resources")return;if(!(ms=this.CG("portal.demo.fallback_delay")))return;if(this.bws.fallback_delayed())return true;this.bws.delay_fallback(function(){if(_this.cdns&&_this.cdns.some(function(c){return c.is_usable()})){_this.bws.cancel_delayed_fb()}else _this._onerror(err,opt)},ms);this.log.info("fallback delayed for "+ms+" ms");return true};proto.onerror=function(err,opt){if(this.delay_fallback(err,opt))return;this._onerror(err,opt)};proto._onerror=function(err,opt){this.log.err(this.name+" failed "+err);if(this.opt.onerror)this.opt.onerror(this,err,opt)};proto.set_completed=function(completed,caller){var _this=this;if(completed==this.completed)return;this.bws.emit("set_completed",this,completed);this.completed=completed;this.from=Math.min(this.from,this.completed);this.map=new map.Map;this.chunks=this.chunks.filter(function(ch){if(!ch.req.info.segment||ch.req.info.segment.index>=_this.bws.from)return true});this.log.info("set completed "+this.completed+" called by "+caller)};proto.ondata=function(req,res){var zperr=this.bws.zone.perr_get();if(req.info.rate)return;if(req.done&&req.info.segment)req.info.segment.done=true;if(!this.fullsize&&res&&res.fullsize&&!(req.cdn.is_hola()&&!this.CG("cdn.send_reqs.disable_url_ranges")&&!req.resp.hdrs["x-hola-fullsize"])){this.bws.method.set_fullsize(this,res.fullsize)}if(!req.error&&[200,206].includes(+req.status)){var data=res.data,size=data.byteLength||data.length;if(req.done){req.resp.size=size;if(req.to<0)req.to=req.resp.size-1}this.bws.emit("ondata",{size:size,req:req});if(!req.done||!req.served){var from=res.file_start||req.from;var to=res.file_start!==undefined?res.file_start+data.byteLength-1:req.to;this.add_chunk({from:from,to:to,data:data,req:req});this.serve()}else if(req.served!=data.length){zperr({id:"streaming_not_served_all_bytes",err:"served "+req.served+" != data "+data.byteLength,delay:true})}}else{this.bws.method.ondata({error:req.error,status:+req.status,req:req});this.log.info("req "+req.name+" failed "+(res.error||"")+" status "+req.status)}};proto.resume=function(){this.stopped=false;this.serve();this.send_reqs();this.monitor()};proto.req_size=function(){var bytes=0,completed=this.completed;this.chunks.forEach(function(c){if(completed!=c.from)return;bytes+=c.to+1-c.from;completed+=c.to+1-c.from});this.reqs.forEach(function(req){if(!req.info.clone)bytes+=req.to+1-req.from});return bytes};proto.monitor=function(){var _this=this;if(this.opt.dummy||this.req_mon)return;function _monitor(){this.monitor_start=date.monotonic();if(this.reqs.length)this.parallel_on_slow("monitor");else this.send_reqs()}if(this.opt.jtest_next_monitor_ms){var ms=this.opt.jtest_next_monitor_ms;this.opt.jtest_next_monitor_ms=undefined;this.req_mon=setTimeout(function(){_monitor.call(_this);_this.req_mon=undefined;_this.monitor()},ms)}else this.req_mon=setInterval(function(){_monitor.call(_this)},500)};proto.abort=function(allow_finish){this.stopped=true;for(var i=0;i0)return;if(!this.ts.length)return this.samples=[];if(!this.samples.length||this.samples[0].ts>=this.ts[0])return;for(i=0;its)sz+=s.sz});return sz};return E}); (function(){var __hola_stub_define,crypto;var is_node=typeof module=="object"&&module.exports&&module.children;var is_ff_addon=typeof module=="object"&&module.uri&&!module.uri.indexOf("resource://");if(is_node||is_ff_addon)define=require("./require_node.js").define(module,"../");else define=define||self.define;if(is_node)crypto=require("crypto");define("/util/version_util.js",["/util/sprintf.js","/util/conv.js"],function(sprintf,conv){var E={};var ver_regexp=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;E._expand=function(ver){var v;if(!ver)return"";if(!(v=ver_regexp.exec(ver)))return;return sprintf("%03d.%03d.%03d",+v[1],+v[2],+v[3])};E.expand=conv.cache_str_fn(E._expand);E._trim=function(ver){var v;if(!ver)return"";if(!(v=ver_regexp.exec(ver)))return;return""+ +v[1]+"."+ +v[2]+"."+ +v[3]};E.trim=conv.cache_str_fn(E._trim);E._cmp=function(v1,v2){if(!v1||!v2)return+!!v1-+!!v2;var _v1=v1.split("."),_v2=v2.split("."),i;for(i=0;i<_v1.length&&i<_v2.length&&+_v1[i]==+_v2[i];i++);if(_v1.length==i||_v2.length==i)return _v1.length-_v2.length;return+_v1[i]-+_v2[i]};E.cmp=conv.cache_str_fn2(E._cmp);E._valid=function(v){return ver_regexp.test(""+v)};var version_valid_cache={};E.valid=function(v){var cache=version_valid_cache,res;v=""+v;if(v in cache)return cache[v];if(res=E._valid(v))cache[v]=res;return res};function iter_ver(version,cb){var v;if(!E.valid(version))return version;v=version.split(".");for(var i=v.length-1;i>=0&&!cb(v,i);i--);return v.join(".")}E.inc=function(version){return iter_ver(version,function(v,i){if(v[i]<999){v[i]=+v[i]+1;return true}v[i]=0})};E.dec=function(version){return iter_ver(version,function(v,i){if(v[i]>0){v[i]=+v[i]-1;return true}v[i]=999})};E.get_max=function(versions,cmp){var v,i;versions=versions.sort(cmp||function(v1,v2){return E.cmp(v2.version,v1.version)});for(i=0;i'+''+""+req_id+""+""+''+""+chunk.data.byteLength+""+""+(b64str?''+""+b64str+""+"":"")+(status?''+""+status+""+"":"")+"";swf.CallFunction(cmd)}var sb=new source_buffer({flash_api:player.flash_api,log:player.zone.log_get(),player_id:player.player_id});sb.on("updatebegin",function(e){onFragmentData(req_id,0,e.b64str)});sb.on("ended",function(){onFragmentData(req_id,200,"");delete E.sb_list[req_id]});sb.on("aborted",function(){delete E.sb_list[req_id]});sb.on("error",function(err){adaptive.bws.fallback(err,"hls")});E.sb_list[req_id]=sb;sb.appendBuffer(new Uint8Array(chunk.data))};return E}); define("/svc/cdn/pub/hola_adaptive.js",["/svc/cdn/pub/util.js","/svc/cdn/pub/progressive.js","/util/util.js","/util/url.js","/util/events.js","/util/array.js","/util/zerr.js","/svc/cdn/pub/jsurlstream.js","/util/etask.js","/util/date.js","/svc/cdn/pub/cache.js"],function(util,progressive,zutil,zurl,events,array,zerr,jsurlstream,etask,date,zcache){var E=new events;var assign=Object.assign;var ERR=util.ERR;var KB=1024;function get_dm(pl){return(pl.module||pl.slave&&pl.slave.module||{}).dailymotion}function log_from_zone(zone){return zone.log_get().set_module("hap")}function set_quality(qid,stream,caller,live_updated){if(this.qid==qid)return;var _this=this,playlist;this.hap.set_quality(qid,playlist=this.playlists[qid]);if(!playlist.segments||!playlist.segments.length||playlist.attributes.live&&!live_updated){return this.wait_level=qid}this.wait_level=undefined;this.emit("set_quality",qid);if(typeof stream=="string"){caller=stream;stream=undefined}this.prev_qid=this.qid;this.prev_cache_id=this.cache_id;this.qid=qid;this.cache_id=playlist.playlist_id||playlist.bitrate||"q"+qid;playlist.cache_id=this.cache_id;var segment=playlist.segments[0];var sz=segment.duration*segment.bitrate/8;var purl=zurl.parse(segment.url);if(!this.bws.cdns.get_by_host(purl.hostname))this.bws.add_origin_url(segment.url,"set_quality");function set_stream_quality(s){if(_this.player.is_live_stream()&&(s.completedsegment.media_index+playlist.segments.length)){s.set_completed(+segment.media_index,"set_quality")}s.set_slice_size(sz,segment.duration,"set_quality");s.bitrate=playlist.bitrate||segment.bitrate;var close=[];s.reqs.forEach(function(req){if(req.info.rate||req.resp&&req.info.from_cache)return;if(req.info.segment.qid>_this.qid&&req.size()-req.loaded>_this.dur*s.bitrate/8){close.push(req)}if(req.info.segment.qid<_this.qid&&!req.loaded)close.push(req)});close.forEach(function(req){req.abort("set quality")});if(caller!="update_playlists")_this.send_reqs(s)}if(stream)set_stream_quality(stream);else{this.bws.streams.forEach(function(stream){set_stream_quality(stream)})}this.log.console("quality changed from "+(this.prev_qid===undefined?"none":this.playlists[this.prev_qid].bitrate||"cache id "+this.prev_cache_id)+" to "+(this.playlists[this.qid].bitrate||"cache id "+this.cache_id)+" qid "+this.qid+" caller "+caller)}function onseeking(prev){this.last_segment_index=undefined;var pos=this.player.get_pos();var playlist=this.playlists&&this.playlists[this.qid];if(pos===undefined||!playlist||!playlist.segments)return;if(!this.CG("cdn.method.disable_skip_gap_seeks")&&pos-prev<1){var buf=this.player.get_buffered();for(var i=0;i=0&&(this.playlists[i].is_audio||this.playlists[i].attributes.bandwidth>max);i--);return i<0?this.min_qid:i}function max_qid_by_bandwidth(bps){for(var i=this.playlists.length-1;i>=0&&(this.playlists[i].is_audio||this.playlists[i].attributes.bandwidth*1.2>bps*8);i--);return i<0?this.min_qid:Math.min(i,this.max_qid_by_customer())}function max_qid_by_resolution(){var res=this.player.get_resolution();if(res&&res.width&&res.height&&(!this.res||res.width!=this.res.width||res.height!=this.res.height)){this.log.info("resolution changed to "+res.width+"x"+res.height);if(this.res)this.emit("resolution_change",res);this.res=res}return Math.min(util.max_qid_by_resolution(this.playlists,res),this.max_qid_by_customer())}E.Method=function(opt){if(!(this instanceof E.Method))return new E.Method(opt);var _this=this;var player=this.player=opt.player;this.bws=opt.bws;this.bws.method=this;this.CG=this.bws.zone.CG.bind(this.bws.zone);this.CD=this.bws.zone.CD.bind(this.bws.zone);this.CE=this.bws.zone.CE.bind(this.bws.zone);this.CS=this.bws.zone.CS.bind(this.bws.zone);this.log=log_from_zone(this.bws.zone);this.log.notice("using hola_adaptive");this.zperr=this.bws.zone.perr_get();this.hap=new E.hap({player:player,bws:this.bws});this.fallback_wrapper=this.bws.fallback_wrapper.bind(this);this.type="hola_adaptive";this.ondata=this.fallback_wrapper(this._ondata,"ondata");this.set_quality=this.fallback_wrapper(set_quality,"set_quality");this.max_qid_by_resolution=this.fallback_wrapper(max_qid_by_resolution,"max_qid_by_resolution");this.max_qid_by_bandwidth=this.fallback_wrapper(max_qid_by_bandwidth,"max_qid_by_bandwidth");this.max_qid_by_customer=this.fallback_wrapper(max_qid_by_customer,"max_qid_by_customer");if(this.CG("cdn.method.override_selection"))this.selection=this.CG("cdn.method.override_selection").split(",");this.alg={last_req_bw:{},up:0,down:0,jump_at:2,fall_at:2};if(this.hap.fetch_bin)this.fetch_bin=this.hap.fetch_bin.bind(this);this.origins={};this.playlists=this.get_playlists();this.events=new events;this.on=function(){_this.events.on.apply(_this,arguments)};this.off=function(){_this.events.off.apply(_this,arguments)};this.once=function(){_this.events.once.apply(_this,arguments)};this.emit=function(){_this.events.emit.apply(_this,arguments)};this._on=function(o,event,func){_this.on("uninit",function(){o.off(event,func)});o.on(event,func)};this.CD("cdn.overload.if_not_loaded");this.CS("cdn.bwsaver.min_slice_sz",200*KB);this.CS("cdn.bwsaver.estimated_sec",false);if(util.browser.browser=="safari"){this.CD("cdn.send_reqs.origin.disable");this.CE("cdn.send_reqs.origin.ranges_unsupported");this.CE("cdn.send_reqs.origin_until_rated")}if(!this.CG("cdn.send_reqs.origin_as_fastest")&&this.CG("cdn.send_reqs.origin.head_unsupported")){this.CE("cdn.send_reqs.origin_until_rated")}this._on(this.bws,"req_start",function(req){_this.req_start.apply(_this,arguments);req.index=req.info.segment.index;req.name+=" qid "+req.info.segment.qid;req.stream.segments[req.index]=req.stream.segments[req.index]||{completed:0,"final":false}});this._on(this.bws,"stream_start",function(stream){if(_this.playlists&&_this.qid!==undefined)_this.set_quality(_this.qid,stream);stream.segments=[]});this.pl_manifest_loaded=this.fallback_wrapper(function(){_this.hap.emit("manifest_loaded");_this.update_playlists();_this.bws.streams.forEach(function(stream){if(stream.stopped)stream.resume()})});if(this.playlists)this.pl_manifest_loaded();this._on(player,"manifest_loaded",this.pl_manifest_loaded);this._on(player,"level_loaded",this.fallback_wrapper(this.update_playlists,"level_loaded"));this._on(player,"seeking",this.fallback_wrapper(onseeking,"onseeking"));this._on(player,"detached",function(){_this.bws.streams.forEach(function(stream){stream.completed=_this.first_index|0;stream.abort(true);stream.served_sec=stream.served_bytes=0});if(_this.hap)_this.hap.abort();_this.update_playlists()});this._on(player,"resolutionchange",function(){if(!_this.hap)return;var manual_level=_this.hap.get_manual_level();if(manual_level>-1)_this.set_quality(manual_level)});this.on("uninit",function(){_this.hap.destroy()})};util.assert_enabled(progressive,"progressive module is required but disabled");zutil.inherits(E.Method,progressive.Method);E.Method.prototype.set_params=function(req){var s="",segment=req.info.segment;s+=util.set_param("index",segment.index);s+=util.set_param("dur",segment.dur);s+=util.set_param("id",segment.playlist_id);s+=util.set_param("manifest",req.stream.bws.url_s);return s};E.Method.prototype.offset2sec=function(stream,offset){return offset*this.dur};E.Method.prototype.next_slice_fixup=function(stream,range,sec){if(!sec)return;range.to=range.from;range.cache_id=this.cache_id;if(this.player.is_live_stream()&&this.playlists[this.qid].segments&&this.playlists[this.qid].segments[0].media_index>range.from){this.bws.fallback("index_mismatch","mismatch live index need "+range.from+" but manifest starts with "+this.playlists[this.qid].segments[0].media_index)}this.log.debug("next slice idx "+range.from+" needed sec "+sec)};E.Method.prototype.obtained_sec=function(stream){if(!stream)return 0;var completed=stream.completed,sec=0;for(var i=0;icompleted)break;sec+=chunk.data.final?chunk.req.info.segment.dur:0;if(chunk.data.final)completed=idx+1}return sec};E.Method.prototype.need_chunk=function(chunk){var req=chunk.req,idx=req.info.segment.index;var to=chunk.to-(req.info.segment.from||0);return!req.info.rate&&idx>req.stream.completed||idx==req.stream.completed&&to>req.stream.segments[idx].completed};E.Method.prototype.is_next_chunk=function(chunk){var req=chunk.req,idx=req.info.segment.index;var other=req.info.overloaded||req.info.clone;var from=chunk.from-(req.info.segment.from||0);var to=chunk.to-(req.info.segment.from||0);return idx==req.stream.completed&&from<=req.stream.segments[idx].completed&&to>=req.stream.segments[idx].completed&&!this.hap.is_buffer_delayed(chunk)&&(!other||req.info.segment.qid==other.info.segment.qid||!req.opt.streaming&&!other.opt.streaming||req.loaded>=Math.min(128*KB,req.size())||chunk.data.final)};E.Method.prototype.set_chunk_data=function(chunk){if(this.bws.tech=="flash"||!chunk.req.opt.streaming)return;var req=chunk.req,idx=req.info.segment.index;var from=req.info.segment.from||0;if(chunk.from-from>=req.stream.segments[idx].completed)return;chunk.data=chunk.data.slice(req.stream.segments[idx].completed+from-chunk.from);chunk.from=req.stream.segments[idx].completed+from;chunk.id="-- "+(this.ranged_playlist?req.from+"-"+req.to:req.info.segment.index)+" -- "+chunk.from+"-"+chunk.to+" "+req.id+" qid "+req.info.segment.bitrate};E.Method.prototype.cacheid2qid=function(id){var pl=this.playlists.find(function(p){return p.cache_id==id||p.bitrate==id});return this.playlists.indexOf(pl)};E.Method.prototype.on_parallel_req=function(p){var info,cache=p.info.cache_backup,qid;if(cache&&(qid=this.cacheid2qid(cache.cache_id))>-1){if(info=this.prepare_info_req(cache.cdn,p.info.segment.index,null,qid)){p.range.cache_id=cache.cache_id;p.from_cache=true}}else if(p.info.segment.qid&&(!p.req.loaded||!p.req.opt.streaming)&&(!p.req.cdn.is_bw_from_cache()||p.req.loaded>128*KB||p.req.elapsed()>2*date.ms.SEC)){qid=p.info.segment.qid;for(var i=qid-1;i>=0&&this.playlists[i].is_audio;i--);if(i>-1){info=this.prepare_info_req(p.req.cdn,p.info.segment.index,null,Math.max(Math.min(this.qid,i,this.max_qid_by_bandwidth(p.cdn.bps()||p.req.bps())),this.min_qid))}}p.info=info||p.info};E.Method.prototype.set_req_alg=function(req){if(req.info.rate||req.cdn.is_fast()||req.info.from_cache)return;if(req.error&&!req.info.live_sliding||this.CG("cdn.req_alg.disable"))return;var ms=req.to_ms(),too_slow,qid;if(req.info.live_sliding||req.info.bitrate&&ms&&ms+500-1?manual_level:Math.min(this.max_qid_by_resolution(),this.max_qid_by_bandwidth(too_slow?req.cdn.is_bw_from_cache()?req.bps():req.cdn.bps():this.bws.cdns.get_best_cdn_bw()));this.set_quality(qid,req.stream,"set_req_alg")};E.Method.prototype.close_obtained_reqs=function(stream){for(var i=0;i=0&&stream.chunks[i].req.info.segment!=req.info.segment;i--);if(i<0)this.hap.oncomplete_req(req);else stream.chunks[i].data.final=true;stream.segments[req.info.segment.index].final=true}stream.map.update(req.index,req.index);this.log.debug("map updated "+req.index+"-"+req.index+" "+JSON.stringify(stream.map.ranges));this.close_obtained_reqs(stream);this.log.info(stream.name+" completed "+stream.completed)}if(!req.info.rate)this.emit("seg_complete",req);if(!req.error)stream.set_slice_size(req.size(),req.to_sec(),"oncomplete_req");this.set_req_alg(req);if(req.error!=ERR.aborted)stream.send_reqs()};E.Method.prototype.send_reqs=function(stream){if(!this.playlists||this.qid===undefined||!this.playlists[this.qid].segments){return}var ns;if(this.selection&&(ns=E.Method.super_.prototype.next_slice.call(this,stream))&&this.selection[ns.from-this.first_index]!==undefined&&this.selection[ns.from-this.first_index]!=this.qid){this.log.console("override quality selection - choose qid "+this.selection[ns.from-this.first_index]+" for index "+ns.from);this.set_quality(this.selection[ns.from-this.first_index],stream,"send_reqs")}E.Method.super_.prototype.send_reqs.call(this,stream)};E.Method.prototype.uninit=function(){this.emit("uninit");E.Method.super_.prototype.uninit.call(this)};E.Method.prototype.get_index=function(playlist,pos,seek){if(!playlist)return;if(playlist.level_idx!==undefined){var index=this.hap.get_index(playlist,pos,seek);if(index!==undefined)return index}var segs=playlist.segments;for(var i=0,sec=0;i-1?manual_level:this.bws.opt.start_quality||this.CG("cdn.method.start_quality");var new_qid=s_qid===undefined?this.player.get_resolution()?this.max_qid_by_resolution():this.min_qid:s_qid;this.set_quality(new_qid,"update_playlists");if(level===undefined)level=new_qid}var is_live=this.player.is_live_stream();playlist=this.playlists[level];if(!playlist||!(segments=playlist.segments))return;this.first_index=segments[0].media_index;this.dur=segments[0].dur||segments[0].duration;this.completed=this.first_index-1;if(!pos&&is_live)pos=this.hap.get_live_pos();this.start_index=this.get_index(playlist,pos+this.bws.sec_in_buffer(pos,true));this.last_index=is_live?-1:segments[segments.length-1].media_index;if(is_live||!this.first_playlist_update){this.ranged_playlist=segments[0].from!==undefined;this.first_playlist_update=true;this.bws.from=this.start_index;this.bws.to=this.last_index;this.bws.streams.forEach(function(stream){var last_media_index=segments[segments.length-1].media_index;stream.set_completed(Math.max(stream.completed>last_media_index?this.start_index:stream.completed||0,this.start_index),"update_playlist");this._set_fullsize(stream,this.last_index+1);stream.name="stream vc"+stream.uid+" "+stream.id+" "+stream.from+"-"+stream.to+" "+stream.url.path},this)}if(level!==undefined&&level==this.wait_level)this.set_quality(level,null,"update_playlists",true);if(!is_live||level==this.qid)this.bws.streams.forEach(function(s){this.send_reqs(s)},this)};E.Method.prototype.set_fullsize=function(){};E.Method.prototype._set_fullsize=function(stream,fullsize){if(!this.player.is_live_stream())E.Method.super_.prototype.set_fullsize.call(this,stream,fullsize)};E.Method.prototype.next_unassigned=function(stream,from,to){return this.next_missing(stream.reqs,stream.fullsize,from,to,function(r){return r.info.rate})};E.Method.prototype.next_unobtained=function(stream,from,to){return this.next_missing(stream.chunks,stream.fullsize,from,to,function(c){return!c.data.final})};E.Method.prototype.next_missing=function(arr,fullsize,from,to,skip){var i=0,p_lst=this.playlists&&this.playlists[this.qid];if(fullsize>0)to=to>=0?Math.min(to,fullsize-1):fullsize-1;if(p_lst&&p_lst.attributes.live)to=Math.min(to,p_lst.segments[p_lst.segments.length-1].media_index);for(;i=0&&from>to?null:{from:from,to:i==arr.length?to:to<0?arr[i].index-1:Math.min(to,arr[i].index-1)}};E.Method.prototype.req=function(stream,cdn,from,to,info){var early=info.early_of?stream.get_req_by_id(info.early_of):null;var qid;if(early&&(early.info.clone||early.info.was_cloned)&&early.info.segment.qid-1?this.cacheid2qid(info.cache_id):this.qid:qid;if((!info||!info.rate)&&(!this.playlists||qid===undefined||!this.playlists[qid].segments)){return}info=info||{};if(info.rate)idx=this.playlists[qid].segments[0].media_index;var segment=this.playlists?this.playlists[qid||0].segments["media_index_"+idx]:this.player.get_current_fragment();if(!segment||typeof segment!="object")return;info.segment=zutil.clone_deep(segment);segment=info.segment;info.cache_id=info.segment.playlist_id||info.segment.bitrate||this.cache_id;info.cached_bw=!cdn.prev_bpms;info.no_range=cdn.is_origin()&&this.CG("cdn.send_reqs.origin.ranges_unsupported");segment.bps=segment.bitrate/8;segment.index=segment.index||segment.media_index;segment.playlist_id=info.cache_id;segment.qid=qid;segment.dur=segment.dur||segment.duration;segment.streaming=!this.CG("cdn.send_reqs.disable_streaming");if(info.rate)segment.dur=0;segment.est_sz=info.rate?0:segment.dur*segment.bps;var u=zurl.parse(segment.url),host=u.hostname,bws=this.bws;this.origins[host]=this.origins[host]||bws.origin_select(u).hostname;if(host!=this.origins[host]){u.hostname=this.origins[host];segment.url=zurl.uri_obj_href(u);bws.add_origin_url(segment.url,"req")}else if(!bws.cdns.get_by_host(host)){bws.add_origin_url(segment.url,"req");this.zperr({id:"hola_adaptive_playlist_origin_mismatch",info:{playlist:this.playlists[qid].url,segment:segment.url},delay:true})}segment.hostname=u.hostname;info.xhr_opt={bitrate:segment.bitrate,index:segment.index,url:segment.url,dur:segment.dur,player:this.player,level_idx:this.playlists[qid].level_idx,rate:info.rate,qid:qid};return info};E.Method.prototype.cache_set=function(req){if(req.info.rate)return;if(!req.info.cache_id)return this.log.info("missing cache id for req "+req.id);this.bws.cache.set({id:req.info.cache_id,host:req.cdn.host,path:req.cache_path,from:req.info.segment.index,to:req.info.segment.index,cache_date:req.resp.hdrs.date,info:{max_age:zcache.is_cachable(req.resp.hdrs),vary:req.vary_hdr,data_prefix:req.hola_resp.data_prefix,from:req.info.segment.from,to:req.info.segment.to}})};E.Method.prototype.serve=function(chunk){var req=chunk.req,seg=req.info.segment,stream=req.stream;if(!req.xhr.total){this.zperr({id:"hap_xhr_total_error",info:{total:req.xhr.total,state:req.xhr.readyState,loaded:req.xhr.loaded},delay:true,throttle:1})}if(this.CG("util.log.chunk_hash")){this.log.info("chunk size "+chunk.data.byteLength+" index "+seg.index+" qid "+seg.qid+" checksum "+util.fnv1a(chunk.data))}this.hap.append_buffer(chunk);this.bws.stats.served+=chunk.data.byteLength;if(chunk.data.final&&stream.completed==seg.index)stream.set_completed(+seg.index+1,"serve");stream.segments[seg.index].completed+=chunk.data.byteLength;this.bws.emit("serve",chunk.data,chunk)};E.Method.prototype._ondata=function(chunk){var req=chunk.req;var other=req.info.overloaded||req.info.clone;if(other&&req.info.segment.qid!=other.info.segment.qid&&(req.opt.streaming||other.opt.streaming)){other.abort("hap ondata");req.info.was_cloned=req.info.was_overloaded=undefined}this.serve(chunk);this.bws.track_state("hola hls ondata")};E.Method.prototype.cache_get=function(stream,range){if(!this.bws.cache||this.CG("cdn.cache.disabled"))return;var opts=this.bws.cache.next_immediate({from:range.from,to:range.to,all:true})||[];var chosen,_this=this,str=isNaN(range.cache_id);var req_id=str?range.cache_id:+range.cache_id;opts.forEach(function(o){if(str&&o.id==req_id&&!chosen)chosen=o;else if(!str&&o.id>=req_id&&_this.cacheid2qid(o.id)>-1&&(!chosen||o.idbackup.id)){backup=o}});if(backup){range.cache_backup=stream.choose_cache_source(opts.filter(function(o){return o.id==backup.id&&(!chosen||o.id!=backup.id||chosen.cdn!=o.cdn)}));if(range.cache_backup)range.cache_backup.cache_id=backup.id}if(!chosen)return;var ret=stream.choose_cache_source(opts.filter(function(o){return o.id==chosen.id}));if(ret)ret.cache_id=chosen.id;return ret};E.Method.prototype.fast_allowed_range=function(stream,range){var from=range.index!==undefined?range.index:range.from;var sec_limit=this.CG("cdn.send_reqs.fast.sec_limit")||10;var fast_index=this.CG("cdn.send_reqs.fast.ts_limit")||this.first_index+Math.max(1,Math.ceil(sec_limit/this.dur));return!this.player.is_live_stream()&&from-1)dm.nextLoadLevel=this.initial_load_level})};zutil.inherits(E.hap,events);E.hap.prototype.serve=function(){this.bws.do_streams(null,"serve")};E.hap.prototype.frag_loading=function(o){var _this=this,sc=util.get_hls_sc(this.dm);var stream=this.bws.get_stream_by_id("video"),idx=o.frag.sn;this.log.info("dm onFragLoading "+idx);if(idx===undefined)this.log.info("dmFrag: "+JSON.stringify(o)+" "+(new Error).stack);this.player.emit("on_frag_loading",idx);if(stream&&idx!=stream.completed&&sc.fragCurrent&&sc.fragCurrent.sn==idx&&sc.state=="FRAG_LOADING"){this.log.info("index mismatch dm expects "+idx+" hap is working on "+stream.completed+" syncing");this.bws.stats.seg_mismatch++;this.bws.streams.forEach(function(stream){stream.set_completed(idx,"frag_loading");stream.reqs.forEach(function(req){if(req.info.rate)return;if(req.info.segment.index==idx&&req.opt.streaming&&req.loaded&&stream.segments[idx].completed){req.abort("frag_loading")}if(_this.player.is_live_stream()&&idx>req.info.segment.index){req.info.live_sliding=true;req.abort("frag_loading")}});stream.segments.forEach(function(s){s.completed=0;s.final=false})})}this.serve()};E.hap.prototype.set_quality=function(qid){var dm=this.dm;if(!dm.levelController)return;dm.levelController.manualLevel=this.qid=qid;var sc=util.get_hls_sc(dm);if(sc)sc.level=qid};E.hap.prototype.get_index=function(playlist,pos,seek){var sc=util.get_hls_sc(this.dm);if(!sc)return;var levels=sc.levels,level=levels[playlist.level_idx];var fragments=level.details.fragments,start=fragments[0].start;var fraglen=fragments.length;var end=fragments[fraglen-1].start+fragments[fraglen-1].duration;var frag=sc._findFragment({start:start,fragPrevious:sc.fragPrevious,fragLen:fraglen,fragments:fragments,holaSeek:!!seek,levelDetails:level.details,end:end,bufferEnd:pos});if(!frag)return;var index=frag.sn;if(["PARSING","PARSED"].includes(sc.state)&&index==sc.fragCurrent.sn&&index0)buffered.push({start:buf.start(i),end:buf.end(i)})}}_this.manifest={from:bws.from,levels:sc.levels,playlists:player.get_playlists(),buffered:buffered}};player.on("manifest_loaded",update_metadata);player.on("level_loaded",function(){update_metadata();_this.manifest.level_ms=_this.manifest.level_ms||date()-_this.base_ts});update_metadata()};E.Play_log.prototype.try_wrapper=function(func){var _this=this;var zperr=this.bws.zone.perr_get();return function(){try{return func.apply(_this,arguments)}catch(e){zperr({id:"bwsaver_err_set_play_log",err:e.message,throttle:1});_this.log.info("play_log error "+e.message+" "+e.stack)}}};E.Play_log.prototype.req_end=function(req){var ts=+Date.now();var m=this.requests[req.opt.method]||(this.requests[req.opt.method]={});var s=m[req.url]||(m[req.url]=[]);var resp_hdrs=req.resp?req.resp.hdrs:{};var size_hdr=zutil.own(resp_hdrs,"x-hola-fullsize")&&"x-hola-fullsize"||zutil.own(resp_hdrs,"content-range")&&"content-range"||"content-length";var hdrs=zutil.pick(resp_hdrs,size_hdr,"x-cache","date","x-date");s.push({ts:req.tm_create-this.base_ts|0,ms_hdrs:req.ms_hdrs,ms:ts-req.tm_create|0,size:req.size(),data_prefix:req.info.data_prefix,bps:req.bps()|0,range:req.opt.headers.Range,hdrs:hdrs,progress:this.resp_progress[req.name]});this.have_requests=true};E.Play_log.prototype.ondata=function(d){var p=this.resp_progress[d.req.name]||(this.resp_progress[d.req.name]=[]);p.push({size:d.size,ms:Date.now()-d.req.tm_create|0})};E.Play_log.prototype.cdns_received=function(data){this.cdns_ms=date()-this.base_ts;this.cdns=data};E.Play_log.prototype.send_report=function(){if(!this.have_requests)return;this.on_stop();var zperr=this.bws.zone.perr_get();var info=zutil.pick(this,"bootstrap_cdns","manifest","bootstrap_cache","bwsaver_cache","cdnlist_cache","geoip","base_ts","requests","cdns","cdns_ms","metainfo","start_time","resolution","stop_pos","hola_adaptive","frag_ms");this.reduce_report(info);zperr({id:"play_log",info:info,delay:true})};E.Play_log.prototype.reduce_report=function(data){if(data.manifest&&data.manifest.levels){var levels=[];data.manifest.levels.forEach(function(l){var cp_l=zutil.pick(l,"attrs","url");levels.push(cp_l);if(!l.details)return;cp_l.details=zutil.pick(l.details,"url","startSN","targetduration","totalduration","averagetargetduration","endSN");if(!l.details.fragments)return;cp_l.details.fragments=zutil.extend_deep(l.details.fragments);var fragments=cp_l.details.fragments;for(var i=0;i1)throw err}finally{if(!--counter)fallback=false}}}}function Bwsaver(opt){if(!(this instanceof Bwsaver))return new Bwsaver(opt);var zperr=opt.zone.perr_get();opt=opt||{};zperr({id:"bwsaver_new",delay:opt.zone.loader.init_delay});this.cdn_svc=opt.cdn_svc;this.zone=opt.zone;this.CG=this.zone.CG.bind(this.zone);this.CS=this.zone.CS.bind(this.zone);this.CE=this.zone.CE.bind(this.zone);this.CD=this.zone.CD.bind(this.zone);this.CGJ=this.zone.CGJ.bind(this.zone);this.log=log_from_zone(this.zone);this.perrs=[];this.fdt_id=0;this.fallback_wrapper=create_fallback_wrapper(this);this.fallback_wrapper(function(){this.init(opt)},"init")();this.test_fallback=this.fallback_wrapper(function(){throw new Error("test_fallback")},"test_fallback");opt.zone.loader.bwsaver_active(!this.closed);if(util.is_webos||util.is_android_sdk||util.is_ios_sdk)this.CE("cdn.cache.urls.disable");return this}zutil.inherits(Bwsaver,events.EventEmitter);Bwsaver.prototype.get_perrs=function(){return this.perrs};Bwsaver.prototype.add_perr=function(data){this.perrs.push(data)};Bwsaver.prototype.abort=function(opt){opt=opt||{};if(this.parser)this.parser.emit("clear_buffers");this.buf_sec_last_ts=this.buf_sec_last=undefined;if(this.streams.length){var s=this.streams[0];this.stream_info={fullsize:s.fullsize,slice:s.slice,bitrate:s.bitrate,from:s.from,to:s.to,completed:s.completed,slice_sec:s.slice_sec,mem_cache_offset:this.CG("cdn.media.memory_cache_sec")&&this.method.sec2offset?this.method.sec2offset(s,this.get_pos()-this.CG("cdn.media.memory_cache_sec")):0}}this.streams.forEach(function(s){s.uninit()});this.streams=[];this.ids=0};Bwsaver.prototype.bps=function(){var bps=0;this.streams.forEach(function(s){bps+=s.bps()});return bps};Bwsaver.prototype.set_serving_state=function(first){var pos=this.player.get_pos(),buf_sec=this.buf_sec_total();var bitrate=0,i=0;for(;i.2||buf_sec>3||i==this.streams.length&&this.bps()*8>=bitrate;if(!allow_serve&&!this.denied_serve_start){this.stats.serve_if_fast.n++;this.denied_serve_start=date.monotonic();this.log.info("serving denied: pos "+pos+"-"+this.start_pos+" buffer "+buf_sec+" bps "+this.bps()+"*8>="+bitrate+" feature is "+(this.CG("cdn.media.serve_if_fast")?"enabled":"disabled"))}else if(allow_serve&&this.denied_serve_start){this.stats.serve_if_fast.wait_ms+=date.monotonic()-this.denied_serve_start[this.uid];this.denied_serve_start=undefined;this.log.info("serving allowed: pos "+pos+"-"+this.start_pos+" buffer "+buf_sec+" bps "+this.bps()+"*8>="+bitrate+" feature is "+(this.CG("cdn.media.serve_if_fast")?"enabled":"disabled"))}else if(first){this.log.info("serving "+(allow_serve?"allowed":"denied")+": pos "+pos+"-"+this.start_pos+" buffer "+buf_sec+" bps "+this.bps()+"*8>="+bitrate+" feature is "+(this.CG("cdn.media.serve_if_fast")?"enabled":"disabled"))}this.emit(allow_serve?"serving_allowed":"serving_denied")};Bwsaver.prototype.ofs2time=function(offset){return this.parser.ofs2time(offset)};Bwsaver.prototype.needed_sec=function(){if(this.CG("cdn.bwsaver.disable"))return this.slice_sec;var _bsec=this.buf_sec(),bsec=_bsec.buffered+_bsec.obtained;var watermark=this.CG("cdn.bwsaver.paused_start_needed_sec")||5;if(!this.is_paused()||this.get_pos()>0){var potent=[[2,10],[5,15],[10,30],[15,40]].find(function(elm){return bsec<=elm[0]});watermark=potent?Math.min(this.low_watermark_sec,potent[1]):this.low_watermark_sec}var sec=Math.max(watermark-bsec,0);var s="needed sec: watermark "+watermark+" - buffered "+bsec+" = "+sec;if(s!=this.needed_sec_s){this.log.debug(s+" bsec p"+_bsec.player+"|e"+_bsec.estimated+"|o"+_bsec.obtained+"|b"+_bsec.buffered)}this.needed_sec_s=s;return sec};Bwsaver.prototype.disable_cache=function(){this.CE("cdn.cache.disabled")};Bwsaver.prototype.enable_cache=function(){this.CD("cdn.cache.disabled")};Bwsaver.prototype.cancel_delayed_fb=function(){if(!this.fdt_id)return;clearTimeout(this.fdt_id);this.fdt_id=0;this.log.info("fallback cancelled")};Bwsaver.prototype.fallback_delayed=function(){return!!this.fdt_id};Bwsaver.prototype.delay_fallback=function(fn,ms){this.fdt_id=setTimeout(fn,ms)};Bwsaver.prototype.onerror_stream=function(s,err,opt){if(this.onerror_stream_ext)this.onerror_stream_ext(s);if(opt.fallback){var err_obj=new Error(err);err_obj.reason=opt.reason;throw err_obj}};Bwsaver.prototype.oncomplete_stream=function(s){array.rm_elm(this.streams,s);if(!this.streams.length)this.done=true;s.uninit()};Bwsaver.prototype.get_stream_by_uid=function(uid){return this.streams.find(function(s){return s.uid==uid})};Bwsaver.prototype.get_stream_by_id=function(id){var r=new RegExp(id||"video");return this.streams.find(function(s){return s.id.match(r)})};Bwsaver.prototype.stream_completed=function(id){var s;if(s=this.get_stream_by_id(id))return s.completed};Bwsaver.prototype.resume=function(id){if(!this.paused)return;this.emit("resume");this.log.info("bws resume "+(id||""));if(!id)this.paused=false;this.do_streams(id,"resume")};Bwsaver.prototype.pause=function(reason,id){if(this.paused)return;this.emit("pause");this.log.info("bws pause "+(id?id+" ":"")+reason);if(!id)this.paused=true;this.do_streams(id,"pause")};Bwsaver.prototype.do_streams=function(id,func){var s,_id=id,_func=func;try{var args=Array.prototype.slice.call(arguments,2);if(!_id){if(this.streams)this.streams.forEach(function(s){s[_func].apply(s,args)})}else if(s=this.get_stream_by_id(_id))s[_func].apply(s,args);else this.onerror("stream "+_id+" not found")}catch(err){this.onerror("do_streams apply func "+_func+" failed "+zerr.e2s(err),{fallback:true,reason:"do_streams"})}};Bwsaver.prototype.onerror=function(err,opt){opt=opt||{};err=err||opt.reason||"unknown";this.log.err('bws error "'+err+'"');if(opt.fallback)this.uninit({err:'err "'+err+'"',reason:opt.reason})};Bwsaver.prototype.get_logs=function(evt){var unittest=this.unittest.gen_test();var logs=this.log.concat(evt&&evt.data,true);unittest+="\n\n"+this.log.logs_to_str(logs,true);if(this.CG("cdn.bwsaver.graph")){unittest+="\n\n";var cdn_timeline=window.cdn_graph.tl_export();if(cdn_timeline)unittest+=cdn_timeline}return unittest};Bwsaver.prototype.create_stream=function(opt){load_perf.push("bwsaver_create_stream_start",this.zone);opt=zutil.clone_deep(opt||{});this.buf_sec_last_ts=this.buf_sec_last=undefined;this.onerror_stream_ext=opt.onerror;this.done=false;opt.bws=this;opt.onerror=this.fallback_wrapper(this.onerror_stream,"onerror_stream");opt.oncomplete=this.oncomplete_stream.bind(this);if(!opt.id)opt.id="video";opt.id+=this.ids||"";this.ids++;this.log.info("create_stream "+opt.id+" "+(opt.url||this.url_s));return new stream(opt)};Bwsaver.prototype.sec_in_buffer=function(pos,exact){var bsec=0;var buffered=this.player.get_buffered();for(var i=0;i50&&!this.est_sec_perr_sent){this.est_sec_perr_sent=true;zperr({id:"est_sec_vs_bsec_too_big",info:{est_sec:est_sec,bsec:bsec},add_log:true})}var res={player:bsec,obtained:this.method.obtained_sec(s),estimated:est_sec,buffered:max_sec,pos:pos};if(pos&&res.obtained>4&&bsec<2)this.stats.buf_stall=1;if(!this.buf_sec_last||max_sec!=this.buf_sec_last.buffered)this.emit("player_state",pos,res);this.buf_sec_last=res;this.buf_sec_last_ts=now;return this.buf_sec_last};Bwsaver.prototype.buf_sec_recalc=function(pos){this.buf_sec(pos,true)};Bwsaver.prototype.buf_sec_total=function(pos){var bsec=this.buf_sec(pos);return bsec.buffered+bsec.obtained};Bwsaver.prototype.urgent_policy=function(){return this.policy()=="urgent"};Bwsaver.prototype.lowcost_policy=function(){return this.policy()=="lowcost"};Bwsaver.prototype.fastest_policy=function(){return this.policy()!="lowcost"};Bwsaver.prototype.policy=function(){if(this.jtest_set_policy)return this.jtest_set_policy;var pos=this.player.get_pos();var is_paused=this.is_paused()&&(this.CG("cdn.paused_start")||pos>=1);var sec=this.buf_sec_total();var ret=!is_paused&&sec<=this.urgent_watermark_sec?"urgent":!is_paused&&sec<=this.lowcost_watermark_sec?"fastest":"lowcost";if(ret!=this.prev_policy){if(!this.prev_policy)this.log.info("policy inited to "+ret);else{this.log.info("policy switched "+this.prev_policy+" -> "+ret+" sec "+sec+" paused "+is_paused)}this.prev_policy=ret;this.emit("set_policy",ret)}return ret};Bwsaver.prototype.track_state=function(caller){if(this.done||this.suspended)return;var bsec=this.buf_sec();var buf_sec=bsec.buffered+bsec.obtained;this.stats.buf_sec+=buf_sec;this.stats.buf_n++;var s=bsec.buffered+"+"+bsec.obtained+"="+buf_sec;if(this.track_state_s!=s){var method=this.method;this.log.info("track state pos "+bsec.pos+" buf_sec+buffers "+s+" bsec p"+bsec.player+"|e"+bsec.estimated+"|o"+bsec.obtained+"|b"+bsec.buffered+" bps "+this.bps()+(method.type=="hola_adaptive"&&method.player.is_live_stream()&&method.qid!==undefined&&method.playlists[method.qid].segments?" live window "+method.playlists[method.qid].segments[0].media_index+"-"+method.playlists[method.qid].segments[method.playlists[method.qid].segments.length-1].media_index:"")+" called by "+caller)}this.track_state_s=s;if(bsec.obtained){this.stats.sec_obtained+=bsec.obtained;this.stats.sec_obtained_n++}if(!this.CG("cdn.bwsaver.disable")){var needed_sec=this.needed_sec();if(!needed_sec)this.pause("not needed sec "+needed_sec);else if(this.CG("cdn.bwsaver.pause_on_obtained")&&(bsec.obtained>10||bsec.obtained>5&&bsec.buffered<=5)){this.pause("large obtained queue "+bsec.obtained)}else if(needed_sec>=this.resume_sec)this.resume()}this.streams.forEach(function(s){if(s.allow_req("track_state"))s.send_reqs()});this.emit("track_state")};Bwsaver.prototype.onmetaready=function(){this.metadata_ready=true;this.pending_seek()};Bwsaver.prototype.pending_seek=function(){if(this.pending_seek_pos===undefined)return;this.onseek(this.pending_seek_pos);delete this.pending_seek_pos};Bwsaver.prototype.skip_seek=function(){return this.CG("cdn.bwsaver.skip_seek_to_same_pos")&&this.player.get_pos()==this.last_time_pos};Bwsaver.prototype.do_onseek=function(){var pos=this.player.get_pos();if(this.skip_seek())return this.log.info("skipped seek to same position");if(!this.metadata_ready||!this.cdns)return void(this.pending_seek_pos=pos);this.player.emit("seek_prepare");this.parser.emit("seek",pos,this.pending_seek_pos)};Bwsaver.prototype.onseek=function(e){if(this.player.is_ad_playing())return;var zperr=this.zone.perr_get();if(this.in_onseek){zperr({id:"seek_in_onseek",delay:true});return}this.in_onseek=true;try{this.do_onseek()}finally{this.in_onseek=false}};Bwsaver.prototype.fallback=function(err,reason){try{this.uninit({err:zerr.e2s(err),reason:err.reason||reason})}catch(err2){this.log.err("bws.uninit "+zerr.e2s(err2)+"\nwhile handling fallback "+zerr.e2s(err))}};Bwsaver.prototype.onseeked=function(e){this.start_pos=this.player.get_pos()};Bwsaver.prototype.ontimeupdate=function(e){this.emit("timeupdate");this.last_time_pos=this.player.get_pos();var now=date.monotonic();if(this.player.media_src&&this.player.media_src.duration-this.last_time_pos<2&&this.player.media_src.ended==this.player.media_src.seq&&this.player.media_src.readyState=="open"){this.player.media_src.endOfStream()}if(!zutil.is_mocha()&&now-this.track_ts<(this.CG("cdn.bwsaver.track_rate")||300)){return}this.track_ts=now;this.track_state("timeupdate")};Bwsaver.prototype.parser_uninit=function(){if(this.parser)this.parser.uninit();this.parser=undefined};Bwsaver.prototype.parser_init=function(parsers){var _this=this;if(zutil.is_mocha())this.log.info("jtest parser init");else if(parsers[this.media]){util.assert_enabled(parsers[this.media],this.media+" module is required but disabled");this.parser=new parsers[this.media].Parser(this.tech,this.fallback_wrapper,this)}else return this.log.err("no parser for media type "+this.media);this.emit("parser_init");this.parser.on("meta_info",function(info){_this.do_streams(null,"on_meta_data",info)});this.parser.on("open",this.create_stream.bind(this));this.parser.on("seek_player_set",this.player.seek.bind(this.player));this.parser.on("abort",this.abort.bind(this));this.parser.media_appender.on("onmetaready",this.onmetaready.bind(this));this.parser.on("seek_complete",this.seek_complete.bind(this));this.parser.init()};Bwsaver.prototype.parser_reopen=function(parsers){this.pause();this.abort();this.parser_uninit();this.parser_init(parsers);this.resume()};Bwsaver.prototype.seek_complete=function(seek_info){this.stats.seeks++;this.seek_ts=date.monotonic();var info=this.stream_info||{};if(this.streams.length){var s=this.streams[0];if(!this.CG("cdn.disable_skip_seek_to_same_offset")&&seek_info.offset==s.completed){return void this.log.info("skip seek to completed offset")}info={fullsize:s.fullsize,slice:s.slice,bitrate:s.bitrate,to:s.to,completed:s.completed,slice_sec:s.slice_sec,mem_cache_offset:this.CG("cdn.media.memory_cache_sec")&&this.method.sec2offset?this.method.sec2offset(s,this.get_pos()-this.CG("cdn.media.memory_cache_sec")):0}}info.from=seek_info.offset;info.to=seek_info.to||info.to;info.verify=true;this.abort();this.done=false;this.player.refresh_buffered();this.track_state("onseek");this.create_stream(info)};Bwsaver.prototype.media_src_uninit=function(){this.player.disable_data_mode();this.off("uninit",this.media_src_uninit);this.player_off("seeking",this._onseek);if(this._onadstart)this.player_off("ad_start",this._onadstart)};Bwsaver.prototype.media_src_init=function(parsers,allow_jtest){var _this=this;if(zutil.is_mocha()&&!allow_jtest)return void(this.player.media_src={});this.log.debug("media src init");this.player.enable_data_mode(this.fallback_wrapper(function(media_src){if(media_src&&media_src.readyState!==undefined&&media_src.readyState!="open"){return}media_src.seq=(media_src.seq||0)+1;_this.log.info("sourceopen seq:"+media_src.seq);if(_this.parser){_this.log.info("unexpected mediasource reopen");var zperr=_this.zone.perr_get();zperr({id:"bwsaver_unexpected_mediasource_reopen",add_log:_this.CG("util.log.report.msrc_reopen")});if(_this.CG("cdn.bwsaver.allow_parser_reopen"))return _this.parser_reopen(parsers)}if(zutil.is_mocha()||!_this.parser)_this.parser_init(parsers)},_this.media));this.on("uninit",this.media_src_uninit);this.player_on("seeking",this._onseek)};Bwsaver.prototype.is_playing=function(){return this.player.is_playing()};Bwsaver.prototype.is_paused=function(){return this.player.is_paused()};Bwsaver.prototype.get_pos=function(){return this.player.get_pos()};Bwsaver.prototype.reset_stats=function(){var s=this.stats,keys=Object.keys;this.reset_snapshot=util.data_snapshot(s,[].concat(keys(s).filter(function(k){var unresetable=["single_copy_rank","hdr_size"];return typeof s[k]=="number"&&!unresetable.includes(k)}),keys(s.cdn_switch).map(function(k){return"cdn_switch."+k}),keys(s.early_req).map(function(k){return"early_req."+k}),keys(s.buffering).map(function(k){return"buffering."+k}),keys(s.serve_if_fast).map(function(k){return"serve_if_fast."+k})));if(this.cdns)this.cdns.reset_stats()};Bwsaver.prototype.get_stats=function(){try{return this.final_stats||{buf:this.buf_sec(),saver:this.reset_snapshot?this.reset_snapshot.diff(this.stats):this.stats,cdns:this.cdns?this.cdns.stats():null,ws:this.cdns?this.cdns.ws_stats():null}}catch(err){return{bwsaver_stats_error:""+err}}};Bwsaver.prototype.delayed_perrs=function(){var perrs=this.zone.loader.get_perrs().concat(this.get_perrs());if(!perrs.length)return;this.zone.loader.clear_perrs();this.zone.perr_get()({id:"delayed_perrs",info:{only_stats:false},use_beacon:true,delayed_perrs:perrs})};Bwsaver.prototype.uninit=function(opt){opt=opt||{};if(this.closed)return;var zperr=this.zone.perr_get();if(!opt.err){this.log.info("bwsaver uninit");if(!zutil.is_mocha())this.final_stats=this.get_stats();zperr({id:"bwsaver_uninit"})}else{this.log.err("bw_saver fallback "+opt.err+(opt.reason?" "+opt.reason:"")+"\n"+util.get_external_help_msg("fallback-error"));var stat;try{stat=this.cdn_svc.attached_stats&&this.cdn_svc.attached_stats.get_stats_all()}catch(_err){this.log.err("error get_stats "+zerr.e2s(_err));stat={err:""+_err}}var info={};if(opt.reason)info.reason=opt.reason;info.err=""+opt.err;zperr({id:"bwsaver_err_fallback",err:""+opt.err,add_log:true,info:info,extra:stat,filehead:this.unittest?this.unittest.gen_test():undefined,bt:opt.err.stack||opt.err});this.cdn_svc.fallback=opt.err+" "+opt.reason;if(this.unittest&&_log.settings.console_log){window.hola_unittest=this.unittest.gen_test();this.log.debug("unittest generated at window.hola_unittest")}}this.emit("uninit");this.abort();this.closed=true;this.zone.loader.bwsaver_active(false);this.zone.info.bwsaver="disabled";if(this._onseeked)this.player_off("seeked",this._onseeked);this.player_off("seeking",this._onseek);this.player_off("timeupdate",this._ontimeupdate);clearInterval(this.stats_debug_interval);if(!this.opt.player_obj)this.player.uninit();if(this.cache)this.cache.save({close:true});if(this.cdns){this.cdns.save({close:true});this.cdns.uninit()}this.cdns=this.cache=undefined;if(this.parser)this.parser_uninit();if(this.method)this.method.uninit();this.delayed_perrs();this.cdn_svc.attached_bws=undefined;if(this.sp)this.sp.return(-1);if(!opt.err)return;this.events.emit("fallback",opt.err);if(this.player)this.player.emit("fallback",opt.err);this.player.bws=undefined};Bwsaver.prototype.dump_chunk=function(track_id,chunk,info){if(this.dump[track_id]===undefined)this.dump[track_id]={chunks:[],info:[]};this.dump[track_id].chunks.push(chunk);this.dump[track_id].info.push(info||"")};Bwsaver.prototype.save_dump=function(track_cb){function err_fn(){}function save_track_dump(fs,track_id,dump){var fname="dump"+track_id+"_"+(date()/1e3|0)+".bin";fs.root.getFile(fname,{create:true},function(file){file.createWriter(function(writer){var blob=new Blob(dump.chunks);writer.addEventListener("writeend",function(){track_cb(file.toURL(),dump.info)},false);writer.write(blob)},err_fn)},err_fn)}var _this=this;var request_fs=window.requestFileSystem||window.webkitRequestFileSystem;request_fs(window.TEMPORARY,50*MB,function(fs){for(var track_id in _this.dump)save_track_dump(fs,track_id,_this.dump[track_id])},err_fn)};Bwsaver.prototype.cdns_from_data=function(data){if(!data)return;this.cdns_cache.single_copy=zutil.clone_deep(data.single)||[];this.cdns_cache.popular=zutil.clone_deep(data.popular)||[];this.cdns_cache.fast=zutil.clone_deep(data.fast)||[];return this.cdns_cache.single_copy.length||this.cdns_cache.fast.length||this.cdns_cache.popular.length};Bwsaver.prototype.cdns_from_cache=function(){if(!this.cache)return;this.cdns_cache.single_copy=zutil.clone_deep(this.cache.get_single_copy_cdns());this.cdns_cache.popular=zutil.clone_deep(this.cache.get_popular_cdns());this.cdns_cache.fast=zutil.clone_deep(this.cache.get_fast_cdns());return this.cdns_cache.single_copy.length||this.cdns_cache.fast.length||this.cdns_cache.popular.length};Bwsaver.prototype.cdns_to_cache=function(data){if(!this.cache)return;this.cache.set_single_copy_cdns(data.single);this.cache.set_popular_cdns(data.popular);this.cache.set_fast_cdns(data.fast)};Bwsaver.prototype.add_cdns_from_list=function(list,num,role){var cdns=list.splice(0,num=="all"?list.length:num),new_cdns=[];var _this=this;cdns.forEach(function(cdn){cdn.role=role;cdn.owner="hola";cdn.cost=cdn.cost||(role=="fast"?5:1);new_cdns.push(cdn);if(_this.cache)_this.cache.add_filter_cdn(cdn.host)});if(this.cdns)this.cdns.add(new_cdns);return cdns};Bwsaver.prototype.next_single_copy_cdn=function(){var zperr=this.zone.perr_get();if(!this.cdns_cache.single_copy.length){zperr({id:"bwsaver_err_bootstrap_no_resources",add_log:true});return}this.add_cdns_from_list(this.cdns_cache.single_copy,this.CG("cdn.single_copy.in_parallel")||"all","single_copy");this.stats.single_copy_rank++;return true};Bwsaver.prototype.get_cdns=function(){if(this.CG("cdn.bootstrap.disabled")||this.cdns_cache.sent||!util.is_mode_cdn(this.zone)||this.cdns.some(function(cdn){return cdn.is_hola()})){this.log.info("bootstrapping disabled due "+(this.CG("cdn.bootstrap.disabled")?"config":this.cdns_cache.sent?"already sent":!util.is_mode_cdn(this.zone)?"not cdn mode":"using preconfigured cdns list"));return}this.log.info("get_cdns started");var _this=this;var zperr=this.zone.perr_get();this.cdns_cache.sent=date.monotonic();this.sp=etask({name:"bwsaver_bootstrap"},[function(){var have_cdns=_this.cdns_from_cache();var p=cdnlist.url2cdns(_this.url_s,null,_this.cdns,_this.zone);if(!_this.cdns.length&&cdnlist.bootstraps)_this.cdns.uid=cdnlist.bootstraps.uid;if(have_cdns){if(_this.cdns_cache.single_copy.length)_this.next_single_copy_cdn();_this.add_cdns_from_list(_this.cdns_cache.fast,"all","fast");_this.do_streams(null,"send_reqs")}return p},function(ret){if(!ret||!ret.data||ret.status!=200){throw new Error("bootstrap failed to receive cdns "+(!ret?"!ret":!ret.data?"!ret.data":"status "+ret.status))}_this.cdns_cache.received=date.monotonic();_this.emit("cdns_received",ret.data);if(_this.cache){_this.cdns_to_cache(ret.data);_this.cdns_from_cache()}else _this.cdns_from_data(ret.data);_this.next_single_copy_cdn();_this.add_cdns_from_list(_this.cdns_cache.fast,"all","fast");_this.cdns_cache.single_copy.forEach(function(c){var cdn;if((cdn=_this.cdns.get_by_host(c.host.toLowerCase()))&&cdn.is_fast()){cdn.role="single";cdn.cost=1}});_this.do_streams(null,"send_reqs");util.set_geoip(ret.data.geoip);_this.log.info("get_cdns success "+JSON.stringify(_this.cdns_cache));_this.stats.get_cdns_ms=_this.cdns_cache.received-_this.cdns_cache.sent;return this.wait()},function catch$(err){var s=err.message||err.statusText||""+err||"unknown error";zperr({id:"bwsaver_err_bootstrap_failed",err:s,add_log:true});_this.log.info("get_cdns failed with err "+s);if(!_this.cdns.length&&!_this.adaptive||_this.cdns.length&&!_this.cdns.has_usable()){_this.onerror(s,{fallback:true,reason:"get_cdns_failed_and_no_resources"})}},function finally$(){if(!_this.cdns_cache.received)_this.cdns_cache.received=date.monotonic()}])};Bwsaver.prototype.get_fake_cdn_bandwidth=function(){return this.method&&this.method.fake_cdn&&this.method.fake_cdn.get_progress_bw()};Bwsaver.prototype.add_origin_url=function(url,caller){return this.add_origin(zurl.parse(url).hostname,caller)};Bwsaver.prototype.add_origin=function(host,caller){if(this.CG("cdn.send_reqs.origin.disable")||this.CG("cdn.send_reqs.https")&&this.CG("cdn.send_reqs.origin_https_unsupported")){return}var origin=this.cdns.add_origin({host:host}),_this=this;if(this.cache)this.cache.add_filter_cdn(host);var on_origin_failed=function(){_this.origin_failed(this)};origin.on("failed",on_origin_failed.bind(origin));origin.on("disconnect",on_origin_failed.bind(origin));this.on("uninit",function(){origin.off("failed",on_origin_failed);origin.off("failed",on_origin_failed)})};Bwsaver.prototype.origin_failed=function(cdn){var s=this.get_stream_by_id("video");if(!this.origin_fallback.length||cdn.enabled&&cdn.fail<2&&cdn.disconnect<2&&this.cdns.can_get(s.slice,s.slice_sec,function(){return this!=cdn})){return}var host=this.origin_fallback.splice(0,1)[0];this.stats.origin_select_fallback++;this.add_origin(host,"origin_failed")};Bwsaver.prototype.origin_select=function(url){var zperr=this.zone.perr_get();var groups=this.CGJ("origin_control")||[],i=0;for(;is;s++)this[s]=o[s];return this}function i(t,e){return new r(t,e)}function u(t,e){for(var n=t.length,r=0;n>r&&e.call(t[r],t[r],r,t)!==!1;r++);}function o(t,e){var n=t&&(t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.msMatchesSelector||t.oMatchesSelector);return!!n&&n.call(t,e)}function s(t){return P(t)?o:t.cash?function(e){return t.is(e)}:function(t,e){return t===e}}function c(t){return i(B.call(t).filter(function(t,e,n){return n.indexOf(t)===e}))}function a(t){return t[F]=t[F]||{}}function f(t,e,n){return a(t)[e]=n}function h(t,e){var n=a(t);return void 0===n[e]&&(n[e]=t.dataset?t.dataset[e]:i(t).attr("data-"+e)),n[e]}function l(t,e){var n=a(t);n?delete n[e]:t.dataset?delete t.dataset[e]:i(t).removeAttr("data-"+name)}function d(t){return P(t)&&t.match(U)}function v(t,e){return t.classList?t.classList.contains(e):new RegExp("(^| )"+e+"( |$)","gi").test(t.className)}function p(t,e,n){t.classList?t.classList.add(e):n.indexOf(" "+e+" ")&&(t.className+=" "+e)}function m(t,e){t.classList?t.classList.remove(e):t.className=t.className.replace(e,"")}function g(t,e){return parseInt(S.getComputedStyle(t[0],null)[e],10)||0}function y(t,e,n){var r=h(t,"_cashEvents")||f(t,"_cashEvents",{});r[e]=r[e]||[],r[e].push(n),t.addEventListener(e,n)}function x(t,e,n){var r,i=h(t,"_cashEvents"),o=i&&i[e];o&&(n?(t.removeEventListener(e,n),r=o.indexOf(n),r>=0&&o.splice(r,1)):(u(o,function(n){t.removeEventListener(e,n)}),o=[]))}function b(t,e){return"&"+encodeURIComponent(t)+"="+encodeURIComponent(e).replace(/%20/g,"+")}function L(t){var e=[];return u(t.options,function(t){t.selected&&e.push(t.value)}),e.length?e:null}function N(t){var e=t.selectedIndex;return e>=0?t.options[e].value:null}function C(t){var e=t.type;if(!e)return null;switch(e.toLowerCase()){case"select-one":return N(t);case"select-multiple":return L(t);case"radio":return t.checked?t.value:null;case"checkbox":return t.checked?t.value:null;default:return t.value?t.value:null}}function E(t,e,n){if(n){var r=t.childNodes[0];t.insertBefore(e,r)}else t.appendChild(e)}function w(t,e,n){var r=P(e);return!r&&e.length?void u(e,function(e){return w(t,e,n)}):void u(t,r?function(t){return t.insertAdjacentHTML(n?"afterbegin":"beforeend",e)}:function(t,r){return E(t,0===r?e:e.cloneNode(!0),n)})}var A,T=document,S=window,M=Array.prototype,B=M.slice,H=M.filter,O=M.push,k=function(){},I=function(t){return typeof t==typeof k&&t.call},P=function(t){return"string"==typeof t},R=/^#[\w-]*$/,q=/^\.[\w-]*$/,D=/<.+>/,$=/^\w+$/,_=i.fn=i.prototype=r.prototype={cash:!0,length:0,push:O,splice:M.splice,map:M.map,init:r};Object.defineProperty(_,"constructor",{value:i}),i.parseHTML=e,i.noop=k,i.isFunction=I,i.isString=P,i.extend=_.extend=function(t){t=t||{};var e=B.call(arguments),n=e.length,r=1;for(1===e.length&&(t=this,r=0);n>r;r++)if(e[r])for(var i in e[r])e[r].hasOwnProperty(i)&&(t[i]=e[r][i]);return t},i.extend({merge:function(t,e){for(var n=+e.length,r=t.length,i=0;n>i;r++,i++)t[r]=e[i];return t.length=r,t},each:u,matches:o,unique:c,isArray:Array.isArray,isNumeric:function(t){return!isNaN(parseFloat(t))&&isFinite(t)}});var F=i.uid="_cash"+Date.now();_.extend({data:function(t,e){if(P(t))return void 0===e?h(this[0],t):this.each(function(n){return f(n,t,e)});for(var n in t)this.data(n,t[n]);return this},removeData:function(t){return this.each(function(e){return l(e,t)})}});var U=/\S+/g;_.extend({addClass:function(t){var e=d(t);return e?this.each(function(t){var n=" "+t.className+" ";u(e,function(e){p(t,e,n)})}):this},attr:function(t,e){if(t){if(P(t))return void 0===e?this[0]?this[0].getAttribute?this[0].getAttribute(t):this[0][t]:void 0:this.each(function(n){n.setAttribute?n.setAttribute(t,e):n[t]=e});for(var n in t)this.attr(n,t[n]);return this}},hasClass:function(t){var e=!1,n=d(t);return n&&n.length&&this.each(function(t){return e=v(t,n[0]),!e}),e},prop:function(t,e){if(P(t))return void 0===e?this[0][t]:this.each(function(n){n[t]=e});for(var n in t)this.prop(n,t[n]);return this},removeAttr:function(t){return this.each(function(e){e.removeAttribute?e.removeAttribute(t):delete e[t]})},removeClass:function(t){if(!arguments.length)return this.attr("class","");var e=d(t);return e?this.each(function(t){u(e,function(e){m(t,e)})}):this},removeProp:function(t){return this.each(function(e){delete e[t]})},toggleClass:function(t,e){if(void 0!==e)return this[e?"addClass":"removeClass"](t);var n=d(t);return n?this.each(function(t){var e=" "+t.className+" ";u(n,function(n){v(t,n)?m(t,n):p(t,n,e)})}):this}}),_.extend({add:function(t,e){return c(i.merge(this,i(t,e)))},each:function(t){return u(this,t),this},eq:function(t){return i(this.get(t))},filter:function(t){if(!t)return this;var e=I(t)?t:s(t);return i(H.call(this,function(n){return e(n,t)}))},first:function(){return this.eq(0)},get:function(t){return void 0===t?B.call(this):0>t?this[t+this.length]:this[t]},index:function(t){var e=t?i(t)[0]:this[0],n=t?this:i(e).parent().children();return B.call(n).indexOf(e)},last:function(){return this.eq(-1)}});var j=function(){var t=/(?:^\w|[A-Z]|\b\w)/g,e=/[\s-_]+/g;return function(n){return n.replace(t,function(t,e){return t[0===e?"toLowerCase":"toUpperCase"]()}).replace(e,"")}}(),z=function(){var t={},e=document,n=e.createElement("div"),r=n.style;return function(e){if(e=j(e),t[e])return t[e];var n=e.charAt(0).toUpperCase()+e.slice(1),i=["webkit","moz","ms","o"],o=(e+" "+i.join(n+" ")+n).split(" ");return u(o,function(n){return n in r?(t[n]=e=t[e]=n,!1):void 0}),t[e]}}();i.prefixedProp=z,i.camelCase=j,_.extend({css:function(t,e){if(P(t))return t=z(t),arguments.length>1?this.each(function(n){return n.style[t]=e}):S.getComputedStyle(this[0])[t];for(var n in t)this.css(n,t[n]);return this}}),u(["Width","Height"],function(t){var e=t.toLowerCase();_[e]=function(){return this[0].getBoundingClientRect()[e]},_["inner"+t]=function(){return this[0]["client"+t]},_["outer"+t]=function(e){return this[0]["offset"+t]+(e?g(this,"margin"+("Width"===t?"Left":"Top"))+g(this,"margin"+("Width"===t?"Right":"Bottom")):0)}}),_.extend({off:function(t,e){return this.each(function(n){return x(n,t,e)})},on:function(t,e,r,i){var u;if(!P(t)){for(var s in t)this.on(s,e,t[s]);return this}return I(e)&&(r=e,e=null),"ready"===t?(n(r),this):(e&&(u=r,r=function(t){for(var n=t.target;!o(n,e);){if(n===this)return n=!1;n=n.parentNode}n&&u.call(n,t)}),this.each(function(e){var n=r;i&&(n=function(){r.apply(this,arguments),x(e,t,n)}),y(e,t,n)}))},one:function(t,e,n){return this.on(t,e,n,!0)},ready:n,trigger:function(t,e){var n=T.createEvent("HTMLEvents");return n.data=e,n.initEvent(t,!0,!1),this.each(function(t){return t.dispatchEvent(n)})}}),_.extend({serialize:function(){var t="";return u(this[0].elements||this,function(e){if(!e.disabled&&"FIELDSET"!==e.tagName){var n=e.name;switch(e.type.toLowerCase()){case"file":case"reset":case"submit":case"button":break;case"select-multiple":var r=C(e);null!==r&&u(r,function(e){t+=b(n,e)});break;default:var i=C(e);null!==i&&(t+=b(n,i))}}}),t.substr(1)},val:function(t){return void 0===t?C(this[0]):this.each(function(e){return e.value=t})}}),_.extend({after:function(t){return i(t).insertAfter(this),this},append:function(t){return w(this,t),this},appendTo:function(t){return w(i(t),this),this},before:function(t){return i(t).insertBefore(this),this},clone:function(){return i(this.map(function(t){return t.cloneNode(!0)}))},empty:function(){return this.html(""),this},html:function(t){if(void 0===t)return this[0].innerHTML;var e=t.nodeType?t[0].outerHTML:t;return this.each(function(t){return t.innerHTML=e})},insertAfter:function(t){var e=this;return i(t).each(function(t,n){var r=t.parentNode,i=t.nextSibling;e.each(function(t){r.insertBefore(0===n?t:t.cloneNode(!0),i)})}),this},insertBefore:function(t){var e=this;return i(t).each(function(t,n){var r=t.parentNode;e.each(function(e){r.insertBefore(0===n?e:e.cloneNode(!0),t)})}),this},prepend:function(t){return w(this,t,!0),this},prependTo:function(t){return w(i(t),this,!0),this},remove:function(){return this.each(function(t){return t.parentNode.removeChild(t)})},text:function(t){return void 0===t?this[0].textContent:this.each(function(e){return e.textContent=t})}});var W=T.documentElement;return _.extend({position:function(){var t=this[0];return{left:t.offsetLeft,top:t.offsetTop}},offset:function(){var t=this[0].getBoundingClientRect();return{top:t.top+S.pageYOffset-W.clientTop,left:t.left+S.pageXOffset-W.clientLeft}},offsetParent:function(){return i(this[0].offsetParent)}}),_.extend({children:function(t){var e=[];return this.each(function(t){O.apply(e,t.children)}),e=c(e),t?e.filter(function(e){return o(e,t)}):e},closest:function(t){return!t||this.length<1?i():this.is(t)?this.filter(t):this.parent().closest(t)},is:function(t){if(!t)return!1;var e=!1,n=s(t);return this.each(function(r){return e=n(r,t),!e}),e},find:function(e){if(!e||e.nodeType)return i(e&&this.has(e).length?e:null);var n=[];return this.each(function(r){O.apply(n,t(e,r))}),c(n)},has:function(e){var n=P(e)?function(n){return 0!==t(e,n).length}:function(t){return t.contains(e)};return this.filter(n)},next:function(){return i(this[0].nextElementSibling)},not:function(t){if(!t)return this;var e=s(t);return this.filter(function(n){return!e(n,t)})},parent:function(){var t=[];return this.each(function(e){e&&e.parentNode&&t.push(e.parentNode)}),c(t)},parents:function(t){var e,n=[];return this.each(function(r){for(e=r;e&&e.parentNode&&e!==T.body.parentNode;)e=e.parentNode,(!t||t&&o(e,t))&&n.push(e)}),c(n)},prev:function(){return i(this[0].previousElementSibling)},siblings:function(){var t=this.parent().children(),e=this[0];return t.filter(function(t){return t!==e})}}),i}); define("/svc/cdn/pub/flashls.js",["/svc/cdn/pub/map.js","/util/util.js","/svc/cdn/pub/util.js","/svc/cdn/pub/jsurlstream.js","/util/version_util.js"],function(map,zutil,util,jsurlstream,version_util){var E={};var api=util.get_api();var version_cmp=version_util.cmp;function is_state_waiting(state){return/BUFFERING/.test(state)}function is_state_idle(state){return state=="IDLE"}function is_state_playing(state){return state=="PLAYING"||state=="PLAYING_BUFFERING"}function is_state_paused(state){return!is_state_idle(state)&&!is_state_playing(state)}var loading_e=[];util.on_window_message(function(e){if(e.data&&e.data.id=="flashls.hlsEventManifestLoading")loading_e.push(e)});function ensure_swf_init(swf,ready){var pver;if(!swf.hola_version||!(pver=swf.hola_version().patch_version)||version_cmp(pver,"1.0.17")>0&&version_cmp(pver,"2.0.0")<0||version_cmp(pver,"2.0.3")>0){return ready()}try{swf.hola_hls_get_state();ready()}catch(e){setTimeout(ready,0)}}E.Player=function(opt){var _this=this;this.player_id=opt.player_id||1;this.name="flashls";this.event_list=["error","timeupdate","state","waiting","play","pause","seeking","seeked","quality_level","ended","started","manifest_parsed","hlsNew","dispose","fragmentloaded","level_loaded","live_manifest"];this.swf=opt.flashls.flashObject||opt.flashls;var fapi=this.flash_api=util.build_flash_api(this);if(this.swf.hola_hls_version){fapi.version=fapi._call_api.bind(null,"hls_version",false);fapi.avail_version=fapi._call_api.bind(null,"hls_version",true);fapi.set_bandwidth=fapi._call_api.bind(null,"hls_setBandwidth",false)}ensure_swf_init(this.swf,function(){_this.swf_ready=true});this.flashls=opt.flashls;this.vjs=this.video=opt.vjs;this.tech="flash";this.level_url={};this.zone=opt.zone;this.log=this.zone.log_get().set_module("flashls");this.live_stream=undefined;this.events=new util.events;if(this.swf.hola_settings)this.swf.hola_settings({player_id:this.player_id});if(this.vjs){this.on("wrapper_attached",function(){_this.vjs.trigger("hola.wrapper_attached")});this.on("wrapper_detached",function(){_this.vjs.trigger("hola.wrapper_detached")})}this.segment_from_flash=function(level,segment){return{playlist_url:level.url,bitrate:level.bitrate,url:segment.url,duration:segment.duration,media_index:segment.seqnum}};this.add_level_from_flash_ex=function(level){var _level={url:level.url,bitrate:level.bitrate,segments:[],attributes:{bandwidth:level.bitrate,audio:level.audio},id:level.index};if(level.width!=undefined&&level.height!=undefined){_level.attributes.resolution={width:level.width,height:level.height}}level.fragments.forEach(function(s){var segment=this.segment_from_flash(level,s);_level.segments.push(segment);_level.segments["media_index_"+s.seqnum]=segment}.bind(this));this.levels[_level.url]=_level;this.level_url[level.index]=_level.url;return _level};this.get_levels_async=function(){if(!this.swf.hola_hls_get_levels_async||this.levels_waiting)return;this.swf.hola_hls_get_levels_async();this.levels_waiting=true};api.onFlashlsEvent=function(data){_this.on_msg({data:data})};this.on_msg=function(e){if(!e.data||e.data.player_id!==undefined&&e.data.player_id!=_this.player_id){return}var id=e.data.id,action=e.data.action;if(action=="mako_player.error"){_this.emit("error",{reason:"other",message:"waiting_over_10sec"});return}if(!id)return;if(e.data.mediatime){_this.position=e.data.mediatime.position||0;_this.live_sliding=e.data.mediatime.live_sliding||e.data.mediatime.live_sliding_main||0;_this.buffer=e.data.mediatime.buffer;_this.obtained=e.data.mediatime.obtained||0}var state=e.data.state;switch(id){case"flashls.hlsEventMediaTime":_this.emit("timeupdate",_this.position);return;case"flashls.hlsPlaybackState":_this.state=state;_this.emit("state",state);if(is_state_waiting(state))_this.emit("waiting");else if(state=="PLAYING")_this.emit("play");else if(state=="PAUSED")_this.emit("pause");return;case"flashls.hlsSeekState":if(e.data.seek_pos){_this.position=e.data.seek_pos;_this.buffer=e.data.buffer;_this.live_sliding=0}if(state=="SEEKING")_this.emit("seeking");else if(state=="SEEKED")_this.emit("seeked");return;case"flashls.hlsEventLevelSwitch":_this.level=e.data.level;_this.emit("quality_level");return;case"flashls.hlsEventPlayBackComplete":_this.log.notice("flashls.js ended");_this.emit("ended");return;case"flashls.hlsEventManifestLoading":_this.log.notice("flashls.js started");_this.emit("started",e.data.url||_this.get_url());return;case"flashls.hlsEventManifestParsed":return void _this.emit("manifest_parsed");case"flashls.hlsNew":return void _this.emit("hlsNew",e.data);case"flashls.hlsDispose":_this.log.notice("flashls.hlsDispose",e.data);_this.emit("dispose",e.data);return;case"flashls.error":var err=e.data.error||{};_this.log.err("flashls.error",err.msg);var list=["other","manifest_load","manifest_load","manifest_parse","media_load","media_load","media_decode","manifest_load","manifest_load","manifest_parse","media_decode"];_this.emit("error",{reason:list[err.code]||"other",message:err.msg||"unknown",url:err.url});return;case"flashls.hlsEventFragmentLoaded":var m=e.data.loadMetrics;_this.emit("fragmentloaded",{loadtime:m.frag_processing_time||m.processing_duration});_this.bandwidth=m.bandwidth;return;case"flashls.hlsEventLevelEndList":_this.live_stream=false;return;case"flashls.hlsEventStreamTypeDidChange":_this.live_stream=e.data.streamType=="LIVE";return;case"flashls.hlsPlayListDurationUpdated":_this.duration=e.data.duration;return;case"flashls.hlsAsyncMessage":if(e.data.type!="get_levels"||!e.data.msg)return;_this.levels=_this.levels||{};e.data.msg.forEach(function(level){_this.add_level_from_flash_ex(level)});_this.levels_waiting=false;_this.emit("level_loaded");return;case"flashls.hlsEventLevelLoaded":var _level;if(e.data.level){_this.levels=_this.levels||{};_level=_this.add_level_from_flash_ex(e.data.level)}else if(!_this.levels)_this.get_levels();if(_this.is_live_stream()){_this.emit("live_manifest",{url:_level?_level.url:_this.get_current_level(),format:"m3u8"})}_this.emit("level_loaded");return}};this.on_msg_reset=util.on_window_message(this.on_msg);for(var i=0;istart&&format1&&!_this.get_segment_info(request.url))return;e.set_handled();return method(request)});adaptive.on("uninit",hook.remove.bind(hook))}inject_hook(api,"new_http_request",new_request);inject_hook(window,"hola_cdn_new_http_request",new_request);adaptive.on("seg_complete",function(req){if(!req.error)util.update_fake_xhr(req)})};E.patch_dashjs=function(dash_obj){function transfer_props(new_func,old_func){for(var x in old_func)new_func[x]=old_func[x]}function patch_fragmentLoader(){var orig=window.MediaPlayer.dependencies.FragmentLoader;var s=orig.toString();var orig_s=s;s=s.replace("function (){","{");if(s==orig_s)s=s.replace("function () {","{");s=s.replace("new XMLHttpRequest()","new XMLHttpRequest");s=s.replace("new XMLHttpRequest","(window.hola_cdn_new_http_request && "+"window.hola_cdn_new_http_request(arguments[0]) || "+"new XMLHttpRequest)");var new_ldr=new Function(s);transfer_props(new_ldr,orig);new_ldr.hola_patched=true;window.MediaPlayer.dependencies.FragmentLoader=new_ldr;if(dash_obj)dash_obj.adapter.system._mappings.fragmentLoader.clazz=new_ldr}function patch_dashPlayer(dash_player){try{var prev=dash_player.attachSource;dash_player.attachSource=function(s){dash_player.currSource=s;return prev.apply(this,arguments)}}catch(e){}}function patch_mediaPlayer_1_6(){var MediaPlayer_orig=window.MediaPlayer;var notifier=new util.events;window.MediaPlayer=function(a){var dash_player=new MediaPlayer_orig(a);patch_dashPlayer(dash_player);notifier.emit("newplayer",dash_player);return dash_player};transfer_props(window.MediaPlayer,MediaPlayer_orig);return notifier}function patch_mediaPlayer_2_0(){var MediaPlayer_orig=window.dashjs.MediaPlayer;var notifier=new util.events;window.dashjs.MediaPlayer=function(){var instance=new MediaPlayer_orig;var orig_create=instance.create;instance.create=function(){var dash_player=orig_create.call(instance);patch_dashPlayer(dash_player);notifier.emit("newplayer",dash_player);return dash_player};return instance};transfer_props(window.dashjs.MediaPlayer,MediaPlayer_orig);window.dashjs.MediaPlayer.hola_patched=true;return notifier}if(window.MediaPlayer&&window.MediaPlayer.dependencies.FragmentLoader){if(window.MediaPlayer.dependencies.FragmentLoader.hola_patched)return;patch_fragmentLoader();return dash_obj?patch_dashPlayer(dash_obj):patch_mediaPlayer_1_6()}if(window.dashjs&&window.dashjs.MediaPlayer&&!window.dashjs.MediaPlayer.hola_patched){return dash_obj?patch_dashPlayer(dash_obj):patch_mediaPlayer_2_0()}};return E}); define("/svc/cdn/pub/dailymotion.js",["/util/util.js","/svc/cdn/pub/util.js","/util/date.js","/util/zerr.js","/util/version_util.js","/svc/cdn/pub/log.js"],function(zutil,util,date,zerr,version_util,log){var E={};var ERR=util.ERR;var assign=Object.assign;E.Module=function(opt){var _this=this;var zperr=opt.zone.perr_get();util.events.call(this);this.name="dailymotion";this.event_list=["started","error","quality_level","manifest_parsed","manifest_loaded","level_loaded","detached","seg_stats"];this.levels=undefined;this.bitrate={};this.level_url={};this.zone=opt.zone;this.log=this.zone.log_get().set_module("dailymotion");this.player_api=opt.player_api;this.dailymotion=opt.dailymotion;this.vjs=opt.vjs;this.hls=this.dailymotion.constructor;this.started_count=0;function on_started(e,d){if(e==_this.hls.Events.MANIFEST_LOADED){_this.emit("manifest_loaded");if(_this.started_count)return}_this.started_count++;_this.emit("started",d.url)}var events_fix=util.conf_get("loader.dm_events_fix");this.dm_handlers={};this.dm_handlers[this.hls.Events.MANIFEST_LOADING]=this.dm_handlers[this.hls.Events.MANIFEST_LOADED]=on_started;if(events_fix){this.dm_handlers[this.hls.Events.MANIFEST_LOADING]=function(e,d){_this.emit("started",d.url)};this.dm_handlers[this.hls.Events.MANIFEST_LOADED]=function(){_this.emit("manifest_loaded")}}this.dm_handlers[this.hls.Events.MEDIA_DETACHED]=function(){_this.emit("detached")};this.dm_handlers[this.hls.Events.LEVEL_LOADED]=function(e,lvl){_this.emit("level_loaded",lvl.level)};this.dm_handlers[this.hls.Events.ERROR]=function(e,d){var d_resp=d.response||{},d_err=d.err||{};var type=d.details,ed=_this.hls.ErrorDetails,r;var err={type:d.type,details:type,fatal:d.fatal,frag_url:d.frag&&d.frag.url,reason:d.reason||"",hls_err:d.err&&d.err.stack};_this.log[d.fatal?"err":"info"]("Dailymotion "+(d.fatal?"fatal error":"warn")+" "+d.type+" "+type+(err.frag_url?" "+err.frag_url:"")+(d.reason?" reason "+d.reason:"")+" level "+d.level+" frag "+d.frag+" "+zerr.json(d));if(err.hls_err)_this.log[d.fatal?"err":"info"](err.hls_err);zperr({id:"player_dm_error",info:{err:err},delay:!d.fatal});if(!d.fatal)return;var map={MANIFEST_LOAD_ERROR:{reason:"manifest_load",url:d.url,status:d_resp.status},MANIFEST_LOAD_TIMEOUT:{reason:"manifest_load",url:d.url},MANIFEST_PARSING_ERROR:{reason:"manifest_parse",url:d.url,message:d.reason},MANIFEST_INCOMPATIBLE_CODECS_ERROR:{reason:"manifest_parse",url:d.url,message:d.reason},LEVEL_LOAD_ERROR:{reason:"manifest_load",url:d.url,status:d_resp.status,level:d.level},LEVEL_LOAD_TIMEOUT:{reason:"manifest_load",url:d.url,level:d.level},LEVEL_SWITCH_ERROR:{reason:"other",level:d.level,message:d.reason},FRAG_LOAD_ERROR:{reason:"media_load",url:err.frag_url},FRAG_LOOP_LOADING_ERROR:{reason:"media_load"},FRAG_LOAD_TIMEOUT:{reason:"media_load"},FRAG_DECRYPT_ERROR:{reason:"media_decode",message:d.reason},FRAG_PARSING_ERROR:{reason:"media_decode",message:d.reason},KEY_LOAD_ERROR:{reason:"manifest_load",url:err.frag_url,status:(d_resp.currentTarget||d_resp).status},KEY_LOAD_TIMEOUT:{reason:"manifest_load",url:err.frag_url},BUFFER_ADD_CODEC_ERROR:{reason:"media_decode",message:d_err.message},BUFFER_APPEND_ERROR:{reason:"media_decode",url:err.frag_url},BUFFER_APPENDING_ERROR:{reason:"media_decode"},BUFFER_STALLED_ERROR:{reason:"other"},BUFFER_FULL_ERROR:{reason:"other"},BUFFER_SEEK_OVER_HOLE:{reason:"other"},unknown:{reason:"other",message:"unknown"}};if(r=zutil.find(map,function(v,k){return type==ed[k]}))_this.emit("error",assign({message:type},r));else _this.emit("error",map.unknown)};this.dm_handlers[this.hls.Events.LEVEL_UPDATED]=function(){if(!_this.levels)_this.get_levels()};if(this.hls.Events.FRAG_STATISTICS){this.dm_handlers[this.hls.Events.FRAG_STATISTICS]=function(e,d){_this.emit("seg_stats",d)}}var e;if(this.dailymotion.hola_events_cb){for(e in this.hls.Events){this.dailymotion.off(this.hls.Events[e],this.dailymotion.hola_events_cb)}}for(e in this.dm_handlers)this.dailymotion.on(e,this.dm_handlers[e]);zperr({id:"player_dm_lost_events",info:{events:(_this.dailymotion.hola_events||[]).map(function(e){return e.name}),fix:events_fix}});this.on("wrapper.zone_init",function(){var conf;_this.dailymotion.trigger("hlsHolaAttaching",{mode:_this.zone.CG("mode")});if(conf=_this.zone.CG("loader.dailymotion.config"))assign(_this.dailymotion.config,conf)});if(!events_fix)return;setTimeout(function(){(_this.dailymotion.hola_events||[]).forEach(function(e){if(_this.dm_handlers[e.name])_this.dm_handlers[e.name].apply(null,e.args)})},0)};zutil.inherits(E.Module,util.events);E.Module.prototype.get_url=function(){return this.dailymotion.url};E.Module.prototype.get_current_fragment=function(){var sc=util.get_hls_sc(this.dailymotion);if(!sc)return;var frag=sc.fragCurrent;return{index:frag.sn,qid:frag.level,url:frag.url,duration:frag.duration}};E.Module.prototype.is_live_stream=function(){var levels=this.dailymotion.levels;if(!levels)return;var loaded_lvl=levels.find(function(lvl){return lvl.details});return loaded_lvl&&!!loaded_lvl.details.live};E.Module.prototype.get_bitrate=function(){var level;try{level=this.dailymotion.currentLevel}catch(e){return 0}if(level<0){var frag=util.get_hls_sc(this.dailymotion).fragPrevious;if(!frag)return 0;level=frag.level}return this.dailymotion.levels[level].bitrate};E.Module.prototype.get_levels=function(cached){if(cached&&this.levels)return this.levels;var levels=this.dailymotion.levels;var ret={},_this=this;if(!levels||!levels.length)return ret;levels.forEach(function(level,idx){var url=level.url.length&&level.url[0];var fragments=level.details&&level.details.fragments;if(!url||ret[url]||!fragments)return;var _level=ret[url]={url:url,level_idx:idx,segments:[]};var bitrate=_this.bitrate[url]=_level.bitrate=level.bitrate;_this.level_url[idx]=url;fragments.forEach(function(frag){_level.segments.push({playlist_url:url,media_index:frag.sn,duration:frag.duration,url:frag.url,bitrate:bitrate})})});return this.levels=ret};E.Module.prototype.get_playlists=function(){var levels=this.dailymotion.levels;if(!levels||!levels.length)return;var ret=[];levels.forEach(function(level,idx){var p=this.get_playlist(idx,true);if(!p)return;ret.push(p)}.bind(this));if(!ret.length)return;ret.sort(function(a,b){return Math.sign(a.bitrate-b.bitrate)});return ret};E.Module.prototype.get_playlist=function(idx,with_segments){var levels=this.dailymotion.levels;if(!levels||!levels.length)return;var level=levels[idx];if(!level)return;var url=level.url.length&&level.url[0];var fragments=level.details&&level.details.fragments;if(!url)return;var p={playlist:url,url:url,level_idx:idx,attributes:{bandwidth:level.bitrate,audio:level.audioCodec,video:level.videoCodec}};var attr=p.attributes;var bitrate=p.bitrate=attr.bandwidth;attr.live=level.details&&level.details.live;if(level.width!=undefined&&level.height!=undefined)attr.resolution={width:level.width,height:level.height};if(!with_segments||!fragments||!fragments.length)return p;p.segments=[];fragments.forEach(function(frag,i){var o={playlist_url:url,media_index:frag.sn,duration:frag.duration,url:frag.url,bitrate:bitrate,from:frag.byteRangeStartOffset,to:frag.byteRangeEndOffset};p.segments.push(o);p.segments["media_index_"+frag.sn]=o});return p};E.Module.prototype.get_current_playlist=function(with_segments){if(!util.get_hls_sc(this.dailymotion).bufferRange)return;var idx=this.dailymotion.currentLevel;return this.get_playlist(idx,with_segments)};E.Module.prototype.get_segment_info=function(){};E.Module.prototype.get_current_level=function(){if(!util.get_hls_sc(this.dailymotion).bufferRange)return;var level=this.dailymotion.currentLevel;if(level===undefined)return;if(!this.level_url[level])this.get_levels();return this.level_url[level]};E.Module.prototype.is_idle=function(){var old_api_states={STARTING:-1};var state=util.get_hls_sc(this.dailymotion).state;return state===undefined||state=="STARTING"||state==old_api_states.STARTING};E.Module.prototype.play_url=function(url,pos,is_paused){var vjs;if(vjs=this.vjs){setTimeout(function(){vjs.src(url);if(pos)vjs.currentTime(pos);if(!is_paused)vjs.play()});return}var dm=this.dailymotion,media=dm.media||dm.saved_media;dm.detachMedia();dm.attachMedia(media);if(pos)media.currentTime=pos;if(!is_paused)media.play()};E.Module.prototype.enable_data_mode=function(on_sourceopen){};E.Module.prototype.init_adaptive=function(adaptive){var hls=this.dailymotion,_this=this;var hola_hls=util.is_hola_hls_js(hls);this.old_floader=hls.config.fLoader;hls.config.fLoader=function(){var hls_ver=!_this.hls.version?"0.6.0":_this.hls.version.split(/-|\./).join(".");var loader=version_util.cmp(hls_ver,"0.6.2")<0?Loader:LoaderNew;return new loader(_this.log,_this.zone,adaptive,hola_hls)};adaptive.on("uninit",function(){_this.dailymotion.config.fLoader=_this.old_floader});adaptive.on("seg_complete",function(req){util.update_fake_xhr(req)})};E.Module.prototype.uninit=function(){this.events.removeAllListeners();for(var e in this.dm_handlers)this.dailymotion.off(e,this.dm_handlers[e]);var sc=util.get_hls_sc(this.dailymotion);var zperr=this.zone.perr_get();if(sc.skipCount)zperr({id:"dm_skip_cnt",info:{skip:sc.skipCount}})};function Loader(log,zone,adaptive,hola_hls){this.log=log;this.zone=zone;this.adaptive=adaptive;this.hola_hls=hola_hls}Loader.prototype.destroy=function(){this.abort();this.fake_xhr=null};Loader.prototype.abort=function(){clearTimeout(this.timeoutHandle);if(!this.fake_xhr)return;this.stats.aborted=true;var req=this.fake_xhr.req;if(!req||req.error==ERR.aborted||req.info.rate)return;var other=req.info.overloaded||req.info.clone;req.abort();if(other&&other.error!=ERR.aborted)other.abort();this.adaptive.remove_segment(this.segment)};Loader.prototype.load=function(url,responseType,onSuccess,onError,onTimeout,timeout,maxRetry,retryDelay,onProgress,frag,on_chunk){this.log.info("load "+url);this.url=url;this.responseType=responseType;this.onSuccess=onSuccess;this.onProgress=this.hola_hls?function(ev,st){onProgress(st)}:onProgress;this.onTimeout=onTimeout;this.onError=onError;this.streaming=!this.zone.CG("cdn.send_reqs.disable_streaming")&&!!(this.on_chunk=on_chunk);this.maxRetry=Math.max(maxRetry,3);this.retryDelay=retryDelay;this.stats={trequest:window.performance.now(),retry:0};this.timeout=timeout;this.timeoutHandle=setTimeout(this.loadtimeout.bind(this),timeout);this.loadInternal()};Loader.prototype.loadInternal=function(){this.fake_xhr={onprogress:this.loadprogress.bind(this),onchunkdata:this.onchunkdata.bind(this)};var segment=this.segment={url:this.url,fake_xhr:this.fake_xhr,playlist_id:"def",streaming:this.streaming};this.adaptive.init_segment(segment);this.stats.tfirst=0;this.stats.loaded=0;this.stats.aborted=undefined};Loader.prototype.loadtimeout=function(event){this.log.info("timeout, req is "+this.fake_xhr.req.name);if(!this.zone.CG("player.dailymotion.no_timeout"))this.onTimeout(event,this.stats,this.context)};Loader.prototype.loadprogress=function(event){var stats=this.stats;if(stats.tfirst===0)stats.tfirst=Math.max(window.performance.now(),stats.trequest);stats.loaded=event.loaded;if(this.onProgress)this.onProgress(event,stats)};Loader.prototype.onchunkdata=function(chunk){var stats=this.stats;if(stats.aborted)return;var req=chunk.req;this.fake_xhr.req=req&&req.info.overloaded&&!req.info.overloaded.error?req.info.overloaded:req;var segment=req.info.segment;if(!chunk.data||req.error){if(stats.retrythis.position&&!this.html5.paused)change_state("PLAYING");this.position=pos;this.emit("timeupdate",pos)});if(this.zone.CG("player.html5.ext_control_logs")){this.seek_log_hook=util.inject_hook(this.html5,"currentTime",{set:function(e,args){_this.log.info("html5 currentTime="+args[0]+" "+_this.state+" "+html5_src_ext()+" stack "+(new Error).stack)}});this.load_log_hook=util.inject_hook(this.html5,"load",function(){_this.log.info("html5 load "+_this.state+" "+html5_src_ext()+" stack "+(new Error).stack)});this.src_change_log_uninit=E.hacks.on_source_change(this.html5,function(from,to,stack){_this.log.info("html5 sourcechange "+_this.state+" "+(from?from:"")+" >> "+(to?to:"")+(to!=_this.media_src_url?" stack "+stack:""))})}if(this.html5.networkState&&this.html5.networkState!=this.html5.NETWORK_NO_SOURCE){this.state=this.html5.paused?"PAUSED":"PLAYING"}this.do_pause=function(){this.paused=true;this.log.notice("html5 pause");change_state("PAUSED");this.emit("pause")};this.do_play=function(){this.paused=false;this.log.notice("html5 play "+this.state+" "+html5_src_ext());change_state("PLAYING");this.emit("play")};this.stash=function(){var stash={on_sourceopen:this.on_sourceopen};if(stash.on_sourceopen)this.disable_data_mode();return function(){if(stash.on_sourceopen)this.enable_data_mode(stash.on_sourceopen)}.bind(this)}};zutil.inherits(E.Player,util.events);E.Player.prototype.get_current_buffer=util.get_current_buf;E.Player.prototype.uninit=function(){if(this.events&&this.events.removeAllListeners)this.events.removeAllListeners();if(this.module&&this.module.uninit)this.module.uninit();for(var event in this.html5_events)this.off_html5(event);if(this.src_change_log_uninit)this.src_change_log_uninit();if(this.load_log_hook)this.load_log_hook.remove();if(this.seek_log_hook)this.seek_log_hook.remove()};E.Player.prototype.set_cdn_mode=function(on){};util.module_fn(E,function get_video_type(){return""});util.module_fn(E,function get_url(){var src=E.get_video_source(this.html5);return this.bws&&util.is_blob_url(src)?this.bws.url_s:this.blob2url[src]||src});E.Player.prototype.seek=function(ms){this.html5.currentTime=ms/1e3};E.Player.prototype.get_pos=function(){return this.html5.currentTime};E.Player.prototype.get_state=function(){return this.state};E.Player.prototype.refresh_buffered=function(){return this.html5.buffered};E.Player.prototype.get_buffered=function(){return this.html5.buffered};E.Player.prototype.get_duration=function(){return this.html5.duration};E.Player.prototype.get_resolution=function(){return util.get_elm_resolution(this.html5)};E.Player.prototype.discontinuity=function(sbuf){};E.play_url=function play_url(html5,url,pos,is_paused,video_type){if(pos){html5.addEventListener("loadedmetadata",function cb(){html5.removeEventListener("loadedmetadata",cb);if(pos)html5.currentTime=pos})}html5.src=url;if(!is_paused)html5.play()};util.module_fn(E,function play_url(url,pos,is_paused,video_type){return E.play_url(this.html5,url,pos,is_paused,video_type)});util.module_fn(E,function enable_data_mode(on_sourceopen){if(!this.media_src_api.MediaSource)throw new Error("MediaSource API not available");this.media_src=new this.media_src_api.MediaSource;this.pending_sourceopen=true;var played=!this.html5.paused;this.media_src_url=this.media_src_api.URL.createObjectURL(this.media_src);var current_url=E.get_video_source(this.html5);var original_url=this.blob2url[this.media_src_url]=this.blob2url[current_url]||current_url;this.html5.src=this.media_src_url;this.src_unlock=E.hacks.hide_source_change(this.html5,original_url,this.media_src_url,{zone:this.zone});this.load_unlock=E.hacks.lock_reload_request(this.html5,{zone:this.zone});if(played)this.html5.play();var _this=this;if(!this.zone.CG("player.disable_ended_fallback")){this.schedule_end_of_stream_check=function(){var html5=_this.html5;_this.end_of_stream_timer=clearTimeout(_this.end_of_stream_timer);if(html5.duration-html5.currentTime>.25)return;_this.end_of_stream_timer=setTimeout(function(){if(!html5.duration||!html5.currentTime||html5.ended)return;if(html5.duration-html5.currentTime>.25)return;perr({id:"html5_ended_fallback",add_log:true});html5.dispatchEvent(new Event("ended"));html5.removeEventListener("timeupdate",_this.schedule_end_of_stream_check)},500)};this.html5.addEventListener("timeupdate",this.schedule_end_of_stream_check)}this.on_sourceopen=function(){_this.pending_sourceopen=false;return on_sourceopen(this.media_src)}.bind(this);this.media_src.addEventListener("sourceopen",this.on_sourceopen);if(this.media_src.readyState=="open")this.on_sourceopen(this.media_src)});E.Player.prototype.disable_data_mode=function(){if(!this.media_src)return;if(this.src_unlock)this.src_unlock();if(this.load_unlock)this.load_unlock();this.media_src.removeEventListener("sourceopen",this.on_sourceopen);if(this.schedule_end_of_stream_check){this.end_of_stream_timer=clearTimeout(this.end_of_stream_timer);this.html5.removeEventListener("timeupdate",this.schedule_end_of_stream_check)}this.media_src=this.media_src_url=this.pending_sourceopen=this.schedule_end_of_stream_check=this.on_sourceopen=this.src_unlock=this.load_unlock=undefined};E.Player.prototype.is_playing=function(){if(this.is_idle())return false;return!this.html5.paused};E.Player.prototype.is_paused=function(){if(this.is_idle())return false;if(zutil.is_mocha())return this.html5.paused;return this.paused};E.Player.prototype.get_decoded_frames=function(){return E.get_decoded_frames(this.html5)};util.module_fn(E,function is_idle(){return this.state=="IDLE"});E.Player.prototype.is_ad_playing=function(){return false};util.module_fn(E,function get_container(){return this.html5});util.module_fn(E,function get_levels(){});util.module_fn(E,function get_playlists(){});util.module_fn(E,function get_current_playlist(){});util.module_fn(E,function get_segment_info(){});util.module_fn(E,function get_bitrate(){return 0});util.module_fn(E,function init_adaptive(){});util.module_fn(E,function is_live_stream(){return Infinity==this.html5.duration});util.module_fn(E,function get_current_level(){});util.module_fn(E,function ondata_adaptive(){});util.module_fn(E,function get_current_fragment(){});E.Player.prototype.get_bandwidth=function(){return 0};E.get_decoded_frames=function(video){video=video||{};return video.webkitDecodedFrameCount||video.mozDecodedFrames||0};E.get_video_source=function(video){var video_url=video.src||video.currentSrc,prev_video_url=video_url;var video_location=location.href!="about:blank"?location.href:window.parent.location.href;var location_wout_hash=video_location.replace(/^(.*?)#.*/,"$1");if(video_url==location_wout_hash||video_url==location_wout_hash+"#"){var src_elem=video.hasAttribute("src")?video:video.querySelector("source")||video;if(video_url!=src_elem.getAttribute("src"))video_url=""}return video_url};E.get_hola_video_source=function(video){return video.hola_src||E.get_video_source(video)};E.dump_buffered=function(video){var str="",b=video.buffered,len=b.length;for(var i=0;i=0&&version_util.cmp(fapi_version.jwplayer_version,"7.0")>=0){var on_dm_enabled=multiplayer_aware(opt.player_id,function(){window.jwplayer.hola.off("data_mode_enabled",on_dm_enabled);media_src.emit("sourceopen")});window.jwplayer.hola.on("data_mode_enabled",on_dm_enabled);media_src.once("hola.uninit",function(){window.jwplayer.hola.off("data_mode_enabled",on_dm_enabled)})}else setTimeout(function(){media_src.emit("sourceopen")},0);return media_src};E.Player=function(opt){var _this=this;var zperr=this.zperr=opt.zone.perr_get();this.zone=opt.zone;this.log=opt.zone.log_get().set_module("zjwplayer3");this.attach_slave=function(video,hls){this.slave=create_html5_instance(this,{html5:video,dailymotion:hls});this.slave.dm_error=function(e){_this.emit("error",e)};this.slave.dm_quality_level=function(e){_this.emit("quality_level")};this.slave.dm_manifest_parsed=function(e){_this.emit("manifest_parsed")};this.slave.dm_manifest_loaded=function(e){_this.emit("manifest_loaded")};this.slave.dm_level_loaded=function(lvl){_this.emit("level_loaded",lvl)};this.slave.dm_detached=function(e){_this.emit("detached")};this.slave.on("error",this.slave.dm_error);this.slave.on("quality_level",this.slave.dm_quality_level);this.slave.on("manifest_parsed",this.slave.dm_manifest_parsed);this.slave.on("manifest_loaded",this.slave.dm_manifest_loaded);this.slave.on("level_loaded",this.slave.dm_level_loaded);this.slave.on("detached",this.slave.dm_detached)};this.detach_slave=function(){this.slave.off("error",this.slave.dm_error);this.slave.off("quality_level",this.slave.dm_quality_level);this.slave.off("manifest_parsed",this.slave.dm_manifest_parsed);this.slave.off("manifest_loaded",this.slave.dm_manifest_loaded);this.slave.off("level_loaded",this.slave.dm_level_loaded);this.slave.off("detached",this.slave.dm_detached);this.slave.dm_error=undefined;this.slave.dm_quality_level=undefined;this.slave.dm_manifest_parsed=undefined;this.slave.dm_level_loaded=undefined;this.slave.dm_detached=undefined;if(this.slave.uninit)this.slave.uninit();this.slave=undefined};util.events.call(this);this.jwplayer=opt.jwplayer;var is_progressive=this.zone.is_progressive_link(this.get_url());this.tech=E.jw_getTech(this.jwplayer);this.media_src_api=zutil.is_mocha()?{}:this.tech=="html5"?window:E;this.container=E.jw_getContainer(this.jwplayer);if(this.swf=E.jw_getSwf(this.jwplayer)){var fapi=this.flash_api=util.build_flash_api(this);var flash_fns=["set_data_mode","appendBuffer","appendBytesAction","set_end_of_stream"];flash_fns.forEach(function(name){fapi[name]=fapi._call_api.bind(null,name,false)})}this.html5=!this.swf&&this.container&&this.container.querySelector("video");if(E.jw_isV7(this.jwplayer)&&this.jwplayer.getProvider().name=="dm/hls")this.attach_slave(this.html5,this.jwplayer.hls);var pid=this.player_id=opt.player_id||this.swf&&this.swf.id||1;if(this.swf&&this.swf.hola_settings)this.swf.hola_settings({player_id:pid});if(this.html5&&is_progressive)this.html5_inst=create_html5_instance(this);this.name="jwplayer";this.bitrate={};this.segment_from_flash=function(level,segment){return{playlist_url:level.url,bitrate:level.bitrate,url:segment.url,duration:segment.duration,media_index:segment.seqnum}};this.add_level_from_flash_ex=function(level){var _level={url:level.url,bitrate:level.bitrate,segments:[]};level.fragments.forEach(function(s){_level.segments.push(this.segment_from_flash(level,s))}.bind(this));this.levels[_level.url]=_level;return _level};this.get_levels_async=function(){if(this.swf&&this.swf.hola_get_levels_async&&!this.levels_waiting){this.swf.hola_get_levels_async();this.levels_waiting=true}};var jw_state=E.jw_getState(this.jwplayer);this.state=!jw_state||jw_state=="IDLE"?"IDLE":jw_state=="PAUSED"?"PAUSED":"PLAYING";this.jwevents=new util.events;this.use_load_stream=!this.zone.is_adaptive_link(this.get_url())&&this.swf&&window.jwplayer&&window.jwplayer.hola;var onquality=function(e){this.emit("quality_level");if(this.html5_inst){this.emit("interrupted");this.html5_inst.once("started",function(){_this.emit("started")})}};var onbuffer_change=function(e){if(!this.swf)return;this.position=e.position||0;this.duration=e.duration>>0==-1?0:e.duration>>0;var buffer=e.bufferPercent||0;var from=this.position;var to=Math.max(from,buffer*this.duration/100);this.last_buffer=!this.duration?{from:0,to:0}:{from:from,to:to};this.refresh_buffered();this.emit("timeupdate",this.position)};var onseeking=function(e){if(e.hola_ignore)return;this.seeking_to=e.offset;this.prev_position=this.position;this.position=e.offset||0;this.emit("seeking",this.prev_position,this.position)};var onseeked=function(){if(_this.seeking_to===undefined)return;_this.emit("seeked");_this.seeking_to=undefined};var ontimeupdate=function(e){if(this.swf||!this.html5_inst){this.position=e.position;var dur=Math.trunc(e.duration);this.duration=dur==-1?0:dur}else this.position=this.html5_inst.get_pos();if(this.is_live_stream())this.refresh_buffered();this.emit("timeupdate",this.position)};var onended=function(e){this.emit("ended",{full_complete:true})};this.ontimeupdate_cb=ontimeupdate.bind(this);this.onbuffer_change_cb=onbuffer_change.bind(this);this.onseeking_cb=onseeking.bind(this);this.onseeked_cb=onseeked.bind(this);this.onquality_cb=onquality.bind(this);this.onended_cb=onended.bind(this);if(this.use_load_stream){this.on_load_stream_cb=multiplayer_aware(pid,function(data){if(data&&data.item&&data.item.vastAd){_this.playing_ad=true;return}_this.emit("started",data.url)});window.jwplayer.hola.on("load_stream",this.on_load_stream_cb);api.on_load_stream=window.hola_jwplayer_on_load_stream=this.on_load_stream_cb}this.onbeforeplay_cb=function(e){if(e&&e.hola_ignore)return;var scrubbing=$(E.jw_getContainer(_this.jwplayer)).hasClass("jw-flag-dragging");if(_this.is_idle()){var state_changed,url=_this.get_url();if(!scrubbing&&!_this.use_load_stream&&(_this.saved_url!=url||!_this.zone.is_adaptive_link(url)||!_this.ad_played||!_this.zone.CG("player.jwplayer.unite_ad_and_main_stream"))){_this.saved_url=url;if(_this.state=="IDLE"){_this.state="PLAYING";state_changed=true}_this.emit("started",url);if(state_changed)_this.emit("state",_this.state)}}else zperr({id:"jwplayer_before_play_for_non_idle",delay:true})};this.onstatebuffering_cb=function(e){_this.emit("waiting");var prev=_this.state;if(prev=="PLAYING")return;_this.state="PLAYING";_this.emit("state",_this.state);_this.emit("play")};this.onstateplaying_cb=function(e){if(e&&e.hola_ignore)return;var prev=_this.state;onseeked();if(prev=="PLAYING")return;_this.state="PLAYING";_this.emit("state",_this.state);_this.emit("play")};this.onstatepaused_cb=function(e){if(e&&e.hola_ignore)return;var prev=_this.state;if(prev=="PAUSED")return;_this.state="PAUSED";_this.emit("state",_this.state);_this.emit("pause")};this.onstateidle_cb=function(e){var prev=_this.state;if(prev=="IDLE")return;if(_this.html5&&_this.html5.error)return;_this.state="IDLE";if(E.jw_isV7(_this.jwplayer)){if(e&&e.reason=="complete")_this.emit("ended",{full_complete:true})}else if(_this.get_pos()>=_this.get_duration()-3)_this.emit("ended",{full_complete:true});_this.emit("state",_this.state)};this.jwevents.on("jwplayerMediaBuffer",this.onbuffer_change_cb);this.jwevents.on("jwplayerMediaTime",this.ontimeupdate_cb);this.jwevents.on("jwplayerMediaSeek",this.onseeking_cb);this.jwevents.on("jwplayerMediaSeeked",this.onseeked_cb);this.jwevents.on("jwplayerMediaLevelChanged",this.onquality_cb);this.jwevents.on("jwplayerMediaComplete",this.onended_cb);this.jwevents.on("jwplayerMediaBeforePlay",this.onbeforeplay_cb);this.jwevents.on("jwStateBuffering",this.onstatebuffering_cb);this.jwevents.on("jwStatePlaying",this.onstateplaying_cb);this.jwevents.on("jwStatePaused",this.onstatepaused_cb);this.jwevents.on("jwStateIdle",this.onstateidle_cb);if(zutil.is_mocha())return;this.schedule_emit=function(e,o,is_ext){var target=is_ext?this:this.jwevents;if(this.tech=="flash")setTimeout(function(){target.emit(e,o)});else target.emit(e,o)};this.jwplayer.onBufferChange(function(e){_this.schedule_emit("jwplayerMediaBuffer",e)});this.jwplayer.onTime(function(e){_this.schedule_emit("jwplayerMediaTime",e)});this.jwplayer.onSeek(function(e){_this.schedule_emit("jwplayerMediaSeek",e)});this.has_seeked=E.jw_isV7(this.jwplayer)&&(!/^7\.1\.[0-9]+/.test(this.jwplayer.version)||this.tech!="flash");if(this.has_seeked){this.jwplayer.on("seeked",function(e){_this.schedule_emit("jwplayerMediaSeeked",e)})}this.jwplayer.onQualityChange(function(e){_this.schedule_emit("jwplayerMediaLevelChanged",e)});this.jwplayer.onComplete(function(e){_this.schedule_emit("jwplayerMediaComplete",e)});if(this.jwplayer._events&&this.jwplayer._events.beforePlay){var old=this.jwplayer._events.beforePlay;this.jwplayer._events.beforePlay=[];this.jwplayer.onBeforePlay(function(e){_this.schedule_emit("jwplayerMediaBeforePlay",e)});[].push.apply(this.jwplayer._events.beforePlay,old)}else{this.jwplayer.onBeforePlay(function(e){_this.schedule_emit("jwplayerMediaBeforePlay",e)})}this.jwplayer.onError(function(e){function emit(msg,reason,ext){_this.emit("error",assign({message:msg,reason:reason},ext))}var video_err_map={1:{message:"download was cancelled",reason:"other"},2:{message:"network error",reason:"media_load"},3:{message:"decode error",reason:"media_decode"},4:{message:"source not supported",reason:"media_support"},5:{message:"encryption error",reason:"media_decode"}};var info,msg;if(_this.html5&&_this.html5.error&&(info=video_err_map[_this.html5.error.code])){var details="unknown reason of unsupported video";if(!window.MediaSource)details="media source is not supported";else{var type='video/mp4; codecs="avc1.4D401E, mp4a.40.2"';if(!_this.html5.canPlayType(type))details="html5 video does not support necessary codecs";else if(!window.MediaSource.isTypeSupported(type))details="MSE does not support necessary codecs"}var _info={src:_this.html5.src,current_src:_this.html5.currentSrc,hola_src:_this.html5.hola_src,network_state:_this.html5.networkState,preload:_this.html5.preload,ready_state:_this.html5.readyState,buffered:html5.dump_buffered(_this.html5),media_source_state:_this.html5_inst&&_this.html5_inst.media_src&&_this.html5_inst.media_src.readyState,details:details};return emit(info.message,info.reason,{info:_info})}if(!(msg=e.message))return emit("Unknown error","other");var list={"Flash plugin failed to load":"other","Click to run Flash":"other","Not a valid RSS":"other","Playlist load error":"other","Error loading file":"other","Error loading media: File not found":"media_load","Error loading media: File could not be played":"media_decode","no playable source":"manifest_parse","Unsupported media":"media_support","AES decryption not supported in":"media_support","Network Error: http status":"media_load","Bad Request:":"media_load"};var r;if(r=zutil.find(list,function(v,k){return msg.startsWith(k)}))return emit(msg,r);if(!msg.startsWith("Cannot load M3U8: "))return emit(msg,"media_load");var smsg=msg.substr(18),m;var smap={"File is empty":"manifest_load","crossdomain access denied":"manifest_load","404 not found":{reason:"manifest_load",status:404},"uri cannot be null":"manifest_load","data cannot be null":"manifest_load","requestTime cannot be null":"manifest_load","responseTime cannot be null":"manifest_load","unable to parse URI":"manifest_parse","No levels to play":"manifest_parse","No levels in manifest":"manifest_parse","Unsupported byte-range":"manifest_parse","Empty manifest":"manifest_parse","unsupported encryption method SAMPLE-AES":"media_decode","Missing audio track URL":"manifest_parse","Missing subtitles track URL":"manifest_parse"};if(r=zutil.find(smap,function(v,k){return smsg.startsWith(k)}))return typeof r=="string"?emit(msg,r):emit(msg,"",r);if(m=smsg.match(/^(\d+) status code/))return emit(msg,"manifest_load",{status:m[1]});emit(msg,"manifest_load")});this.jwplayer.onBuffer(function(e){_this.schedule_emit("jwStateBuffering",e)});this.jwplayer.onPlay(function(e){_this.schedule_emit("jwStatePlaying",e)});this.jwplayer.onPause(function(e){_this.schedule_emit("jwStatePaused",e)});this.jwplayer.onIdle(function(e){_this.schedule_emit("jwStateIdle",e)});this.on_msg=multiplayer_aware(pid,function(e){if(!e.data)return;var id=e.data.id;if(id=="jwplayer.hola.hlsEventLevelSwitch"){_this.level=e.data.level&&e.data.level.url||e.data.level;_this.emit("quality_level")}},true);window.addEventListener("message",this.on_msg);if(window.jwplayer&&window.jwplayer.hola){this.on_manifestloaded_cb=multiplayer_aware(pid,function(data){if(data.level){_this.levels=_this.levels||{};_this.add_level_from_flash_ex(data.level)}if(data.type=="LIVE"||data.type=="DVR")_this.emit("live_manifest",{url:data.url,format:"m3u8"})});this.on_async_cb=multiplayer_aware(pid,function(data){_this.levels=_this.levels||{};data.msg.forEach(function(l){_this.add_level_from_flash_ex(l)})});window.jwplayer.hola.on("manifestloaded",this.on_manifestloaded_cb);window.jwplayer.hola.on("async",this.on_async_cb)}this.refresh_buffered();this.stash=function(){var _this=this,hp;if(this.html5_inst){stash={data_mode:this.data_mode,html5_restore:this.html5_inst.stash()};this.data_mode=this.media_src=undefined;return function(){_this.refresh_buffered();_this.data_mode=stash.data_mode;stash.html5_restore()}}if(!E.is_hls_provider_registered||!(hp=this.jwplayer.provider))return function(){};var stash={pos:Math.max(this.get_pos()-this.zone.CG("player.midroll_rewind_sec",0),0)};hp.hls_queued.rw_sec=this.zone.CG("player.midroll_rewind_sec",0);return function(){_this.refresh_buffered()}};var ad_opts={client:E.jw_getAdClient(this.jwplayer),tech:this.swf?"flash":"html5",type:is_progressive?"progressive":"adaptive"};if(ad_opts.client){var ad_handler_name;if(ad_handler_name=Object.keys(E.ad_handlers).find(function(n){return E.ad_handlers[n].is_enabled(ad_opts)})){this.ad_handler=new E.ad_handlers[ad_handler_name](this);this.ad_handler.init()}}this.wrapper_check_skip_video=function(e){if(_this.zone.is_adaptive_link(_this.get_url())&&util.is_mode_cdn(_this.zone)){if(!_this.slave&&!_this.swf)e.skip="adaptive not supported"}};this.on("wrapper.check_skip_video",this.wrapper_check_skip_video)};zutil.inherits(E.Player,util.events);function set_managed(on){on=!!on;if(on)window.jwplayer.hola=window.jwplayer.hola||new events;else{this.disable_data_mode();this.set_cdn_mode(false)}if(util.is_beforeunload||!this.swf||!document.body.contains(this.swf))return;if(this.swf.hola_settings)this.swf.hola_settings({managed:on});else if(on)throw new Error("cannot set managed mode");else this.log.err("cannot set managed mode")}E.Player.prototype.set_cdn_mode=function(on,managed){on=!!on;if(managed)return set_managed.call(this,on);if(on==!!this.hls_mode)return;this.hls_mode=on;if(util.is_beforeunload)return;if(this.slave)return this.slave.set_hls_mode(on);try{if(this.swf.hola_settings){this.swf.hola_settings({hls_mode:!!on,mode:on?"adaptive":"native"})}else this.log.err("cannot set hls mode")}catch(err){this.log.err("cannot set hls mode",err)}};E.Player.prototype.get_pos=function(){return this.ad_attached?this.ad_attached.position:this.xxx_html5?this.html5.currentTime:this.swf?this.position||0:this.seeking_to||this.jwplayer.getPosition()};E.Player.prototype.get_state=function(){return this.ad_attached?this.ad_attached.state:this.state};E.Player.prototype.uninit=function(){this.jwevents.off("jwplayerMediaBuffer",this.onbuffer_change_cb);this.jwevents.off("jwplayerMediaTime",this.ontimeupdate_cb);this.jwevents.off("jwplayerMediaSeek",this.onseeking_cb);this.jwevents.off("jwplayerMediaSeeked",this.onseeked_cb);this.jwevents.off("jwplayerMediaLevelChanged",this.onquality_cb);this.jwevents.off("jwplayerMediaComplete",this.onended_cb);this.jwevents.off("jwplayerMediaBeforePlay",this.onbeforeplay_cb);this.jwevents.off("jwStateBuffering",this.onstatebuffering_cb);this.jwevents.off("jwStatePlaying",this.onstateplaying_cb);this.jwevents.off("jwStatePaused",this.onstatepaused_cb);this.jwevents.off("jwStateIdle",this.onstateidle_cb);this.off("wrapper.check_skip_video",this.wrapper_check_skip_video);if(window.jwplayer&&window.jwplayer.hola){window.jwplayer.hola.removeAllListeners();window.jwplayer.hola=undefined}if(this.use_load_stream)api.on_load_stream=window.hola_jwplayer_on_load_stream=undefined;window.removeEventListener("message",this.on_msg);if(this.html5_inst)this.html5_inst.uninit();if(this.slave)this.detach_slave();if(this.ad_handler)this.ad_handler.uninit()};E.Player.prototype.get_video_type=function(){return""};E.Player.prototype.get_url=function(){var s;if(this.ad_attached)return this.ad_attached.url;if(this.html5&&(s=html5.get_video_source(this.html5))&&!util.is_blob_url(s)){return s}return E.jw_getPlaylistUrl(this.jwplayer,this.log)};E.Player.prototype.seek=function(ms){if(this.slave)return void this.slave.seek(ms);if(!this.swf&&this.html5_inst){var _this=this;this.html5_inst.on("seeking",function on_seek(){_this.onseeking_cb({offset:ms/1e3});_this.html5_inst.off("seeking",on_seek)});return void this.html5_inst.seek(ms)}this.swf.hola_seek(ms/1e3);this.swf.hola_appendBytesAction("resetSeek")};E.Player.prototype.refresh_buffered=function(){if(!this.slave&&!this.html5_inst&&!this.swf)return this.buffered={length:0};if(!this.swf){return this.buffered=this.slave?this.slave.refresh_buffered():this.html5_inst.refresh_buffered()}var from=0,to=0,ret={};if(this.swf.hola_get_buffer_sec){from=this.get_pos();to=from+this.swf.hola_get_buffer_sec()}if(this.last_buffer&&(!to&&!from||this.last_buffer.to>to)){from=this.last_buffer.from;to=this.last_buffer.to}ret.length=from==to?0:1;ret.start=function(i){return from};ret.end=function(i){return to};return this.buffered=ret};E.Player.prototype.get_buffered=function(){if(this.slave)return this.slave.get_buffered();if(this.swf)return this.buffered||this.refresh_buffered();if(!this.is_ad_playing()){var b=this.html5.buffered;var a=[];for(var i=0;i10&&l.height>10)p.attributes.resolution={width:l.width,height:l.height};ret.push(p)});ret.sort(function(a,b){return a.bitrate-b.bitrate});ret.forEach(function(p,i){p.level_idx=i});return ret};E.Player.prototype.get_current_playlist=function(with_segments){if(this.slave)return this.slave.get_current_playlist(with_segments);if(!this.jwplayer.getQualityLevels)return;var levels=this.jwplayer.getQualityLevels();if(!levels||!levels.length)return;if(!this.jwplayer.getVisualQuality)return;var l=(this.jwplayer.getVisualQuality()||{}).level;if(!l)return;var playlists=this.get_playlists();if(!playlists)return;for(var i=0;imain switch",player.ad_attached?"ad":"init");player.ad_attached=undefined;_this.pending_play=false}else{_this.log.info("%s>ad switch",player.ad_attached?"ad":"main");ad_init();if(!player.ad_attached.url)return _this.log.info("no ad url - ignored")}player.emit("started");player.emit("state")};this.on_html5_waiting=function(){player.emit("waiting")};this.on_html5_error=function(e){player.emit("error",e)};this.on_html5_timeupdate=function(position){player.ad_attached.position=position;if(!player.ad_attached.duration)player.ad_attached.duration=_this.html5_inst.get_duration();player.emit("timeupdate",position)};this.on_html5_seeking=function(){if(!_this.pending_seek)return;player.onseeking_cb(_this.pending_seek);_this.pending_seek=false};this.on_html5_interrupted=function(){if(!player.ad_attached){if(!is_playlist_url())player.emit("interrupted");return}ad_uninit({ad_skipped:true})};this.on_html5_ended=function(){if(player.ad_attached)ad_uninit();else{player.emit("ended",{full_complete:true})}};this.on_jwplayer_seek=function(e){if(player.ad_attached&&is_playlist_url()){_this.pending_seek=zutil.clone(e);e.hola_ignore=true}};this.on_jwplayer_beforeplay=function(e){if(!player.html5.src)e.hola_ignore=_this.pending_play=true};this.on_jwplayer_ad_state=function(state){if(!ad_in_progress()||player.ad_attached.state==state)return;player.ad_attached.state=state;player.emit(state=="PLAYING"?"play":"pause");player.emit("state")};this.on_jwplayer_ad_play=this.on_jwplayer_ad_state.bind(this,"PLAYING");this.on_jwplayer_ad_pause=this.on_jwplayer_ad_state.bind(this,"PAUSED");this.on_player_complete=function(e){if(!e||!e.full_complete)return;ad_uninit({ad_skipped:true});player.ad_attached=undefined};if(!(this.html5_inst=player.html5_inst)){this.html5_inst=create_html5_instance(player);this.html5_inst.created_by_vast=true;this.html5_inst.log=this.html5_inst.log.mute()}player.on("pre-wrapper.zone_init",this.on_wrapper_zone_init);player.on("pre-ended",this.on_player_complete);this.html5_inst.on("started",this.on_html5_started);this.html5_inst.on("seeking",this.on_html5_seeking);this.html5_inst.on("interrupted",this.on_html5_interrupted);this.html5_inst.on("ended",this.on_html5_ended);player.jwevents.on("pre-jwplayerMediaSeek",this.on_jwplayer_seek);player.jwevents.on("pre-jwplayerMediaBeforePlay",this.on_jwplayer_beforeplay);player.jwplayer.onAdPlay(this.on_jwplayer_ad_play);player.jwplayer.onAdPause(this.on_jwplayer_ad_pause);this.on_wrapper_zone_init();if(!is_playlist_url())ad_init()};E.ad_handlers.Html5VastClient.prototype.uninit=function(){var player=this.player;player.off("pre-wrapper.zone_init",this.on_wrapper_zone_init);player.off("pre-ended",this.on_player_complete);this.html5_inst.off("started",this.on_html5_started);this.html5_inst.off("waiting",this.on_html5_waiting);this.html5_inst.off("interrupted",this.on_html5_interrupted);this.html5_inst.off("ended",this.on_html5_ended);if(this.html5_inst.created_by_vast)this.html5_inst=this.html5_inst.uninit();player.jwevents.off("pre-jwplayerMediaBeforePlay",this.on_jwplayer_beforeplay);player.ad_attached=undefined};E.ad_handlers.Html5GoogimaAdaptiveHandler=function(player){this.player=player;this.log=player.log.set_module("googima")};E.ad_handlers.Html5GoogimaAdaptiveHandler.is_enabled=function(opt){return opt.tech=="html5"&&opt.client=="googima"&&opt.type=="adaptive"; };E.ad_handlers.Html5GoogimaAdaptiveHandler.prototype.init=function(){var _this=this,player=this.player,jw=player.jwplayer;this.ad_depth=0;this.on_ad_started=function(e){_this.log.info("ad_impression depth="+_this.ad_depth+" data="+JSON.stringify(e));if(e&&e.linear=="nonlinear")return _this.log.info("ad banner displayed - not interrupting");if(_this.ad_depth++)return;if(!_this.ad_detection_by_class)player.emit("interrupted")};this.on_ad_finished=function(e){_this.log.info("ad_finished depth="+_this.ad_depth+" data="+JSON.stringify(e));if(!_this.ad_depth||--_this.ad_depth)return;if(!_this.ad_detection_by_class)player.emit("resumed")};this.on_force_ad_finished=function(e){_this.log.info("ad_check_finished depth="+_this.ad_depth+" data="+JSON.stringify(e));if(!_this.ad_depth)return;_this.ad_depth=0;if(!_this.ad_detection_by_class)player.emit("resumed")};if(E.jw_isV7(jw)){this.jw_class_unwatch=util.attr_watch(jw.getContainer(),{attr:"class",watch_fn:function(from,to){var ad_flag_re=/(^|\s)jw-flag-ads(\s|$)/;var ad_started=ad_flag_re.test(to)-ad_flag_re.test(from);if(ad_started>0){_this.log.info("ad mode started: jw-flag-ads detected");if(_this.ad_detection_by_class)player.emit("interrupted")}else if(ad_started<0){_this.log.info("ad mode finished: jw-flag-ads removed");if(_this.ad_detection_by_class)player.emit("resumed")}}});this.on_zone_init=function(){_this.ad_detection_by_class=_this.jw_class_unwatch&&!player.zone.CG("player.jwplayer.ad_detection_by_events")};player.on("pre-wrapper.zone_init",this.on_zone_init);this.on_zone_init()}jw.onAdImpression(this.on_ad_started);jw.onAdSkipped(this.on_ad_finished);jw.onAdClick(this.on_ad_finished);jw.onAdComplete(this.on_ad_finished);jw.onAdError(this.on_force_ad_finished);if(jw.on)jw.on("playAttempt",this.on_force_ad_finished)};E.ad_handlers.Html5GoogimaAdaptiveHandler.prototype.uninit=function(){var player=this.player;if(this.on_zone_init)player.off("pre-wrapper.zone_init",this.on_zone_init);if(player.jwplayer.on)player.jwplayer.off("playAttempt",this.on_force_ad_finished);if(this.jw_class_unwatch)this.jw_class_unwatch()};E.ad_handlers.Html5GoogimaProgressiveHandler=function(player){this.player=player};E.ad_handlers.Html5GoogimaProgressiveHandler.is_enabled=function(opt){return opt.tech=="html5"&&opt.client=="googima"&&opt.type=="progressive"};E.ad_handlers.Html5GoogimaProgressiveHandler.prototype.init=function(){var player=this.player;this.cancel_protection=util.protect_video_src(player.html5,{ignore:function(from,to){return player.data_mode&&to==from+"?"},mock_next_load_attempt:true});this.fix_jwloaded_attrib=function(e){if(!player.data_mode||!player.html5.hasAttribute("jw-loaded"))return;var e2a={loadedmetadata:"meta",loadeddata:"data"};player.html5.setAttribute("jw-loaded",e2a[e.type])};player.html5.addEventListener("loadedmetadata",this.fix_jwloaded_attrib);player.html5.addEventListener("loadeddata",this.fix_jwloaded_attrib);this.default_handler=new E.ad_handlers.DefaultHandler(player);this.default_handler.init()};E.ad_handlers.Html5GoogimaProgressiveHandler.prototype.uninit=function(){var player=this.player;this.default_handler.uninit();player.html5.removeEventListener("loadeddata",this.fix_jwloaded_attrib);player.html5.removeEventListener("loadedmetadata",this.fix_jwloaded_attrib);this.cancel_protection()};E.ad_handlers.DefaultHandler=function(player){this.player=player};E.ad_handlers.DefaultHandler.is_enabled=function(opt){return opt.tech=="flash"};E.ad_handlers.DefaultHandler.prototype.init=function(){var _this=this,player=this.player,pending_play_st1,pending_play_st2;function schedule_emit_ext(e,o){player.schedule_emit(e,o,true)}this.jwplayer_play_in_ad_hook=function(e){if(!player.is_ad_playing())return void(player.ad_played=false);pending_play_st1=true;e.hola_ignore=true};this.ad_finished=function(){if(!player.playing_ad)return;player.playing_ad=false;player.ad_played=true;if(pending_play_st1){pending_play_st1=false;setTimeout(function(){pending_play_st2=true;player.jwplayer.pause()},0)}};this.jwplayer_pause_in_ad_hook=function(e){if(!pending_play_st2)return;pending_play_st2=false;player.jwplayer.play();e.hola_ignore=true};player.jwevents.on("pre-jwStatePlaying",this.jwplayer_play_in_ad_hook);player.jwevents.on("pre-jwStatePaused",this.jwplayer_pause_in_ad_hook);player.jwplayer.onTime(function(e){player.ad_played=false});player.jwplayer.onAdError(function(e){_this.ad_finished();schedule_emit_ext("ad_error",e.message||"Unknown error")});player.jwplayer.onAdImpression(function(e){schedule_emit_ext("ad_impression")});player.jwplayer.onAdPause(function(e){schedule_emit_ext("ad_pause")});player.jwplayer.onAdPlay(function(e){player.playing_ad=true;schedule_emit_ext("ad_play")});player.jwplayer.onAdSkipped(function(e){schedule_emit_ext("ad_skipped");_this.ad_finished()});player.jwplayer.onAdClick(function(e){schedule_emit_ext("ad_skipped");_this.ad_finished()});player.jwplayer.onAdComplete(function(){schedule_emit_ext("ad_complete");_this.ad_finished()});player.jwplayer.onAdTime(function(e){schedule_emit_ext("ad_time",{duration:e.duration,position:e.position})})};E.ad_handlers.DefaultHandler.prototype.uninit=function(){var player=this.player;player.jwevents.off("pre-jwStatePlaying",this.jwplayer_play_in_ad_hook);player.jwevents.off("pre-jwStatePaused",this.jwplayer_pause_in_ad_hook)};E.hacks={};E.hacks.lock_reload_request=function(video){if(!video.hasAttribute("jw-loaded"))return;var lock_url=html5.get_hola_video_source(video);var lock_states=["none","started"];var hook=util.inject_hook(video,"load",function(e){if(html5.get_hola_video_source(video)==lock_url&&lock_states.includes(video.getAttribute("jw-loaded"))){e.set_handled()}});return hook.remove.bind(hook)};E.hacks.preload_none=function(player){if(player.html5&&player.html5.preload=="none")player.html5.load()};E.jw_getPlayerInstances=function(){if(!window.jwplayer)return[];var i=0,res=[],jw;while((jw=window.jwplayer(i++))&&Object.keys(jw).length>1)res.push(jw);return res};E.jw_isV7=function(jw){return!!jw.getProvider};E.jw_isFlash=function(jw){if(E.jw_isV7(jw)){var p=jw.getProvider();return p?/^flash/.test(p.name):!jw.getContainer().querySelector("video")}return jw.getRenderingMode()=="flash"||!window.jwplayer.html5};E.jw_getPlaylistUrl=function(jw,log){try{var item=E.jw_getPlaylistItem(jw);var quality=Math.max(jw.getCurrentQuality(),0);if(item.sources[quality])item=item.sources[quality];return item.hola?item.hola.file:item.file}catch(err){if(log)log.err("get_playlist_url failed "+err)}};E.jw_getConfigUrl=function(jw){var item;if(item=util.try_wrapper_silent(E.jw_getPlaylistItem)(jw))return item.file;var jwconfig=E.jw_getConfig(jw);if(!jwconfig)return;if(jwconfig.file)return jwconfig.file;var i,src=jwconfig.sources;if(!src||!src.length)return;for(i=0;i=0}function is_vjs5_new_hls(){return version_util.cmp(vjs_version,"5.9.2")>=0}function is_vjs4(){return version_util.cmp(vjs_version,"4.1.0")>=0}E.get_players=function(){var vjs=window.videojs;var players=vjs&&(vjs.getPlayers?vjs.getPlayers():vjs.players)||{};var keys=Object.keys(players);if(!keys.length){$(".video-js").each(function(){var el=this;if(el.player&&el.id)players[el.id]=el.player});keys=Object.keys(players)}return{length:keys.length,players:players,first:players[keys[0]||""]}};E.Player=function(opt){var videojs=window.videojs;vjs_version=videojs&&videojs.VERSION;util.call_super(E,this);var _this=this;var hola_version=/-\d+$/.test(vjs_version)||videojs.HOLA_VERSION;this.player_id=opt.player_id||1;this.vjs=this.video=opt.video;this.tech=opt.tech;this.name=hola_version?"hola":"vjs";this.is_vjs5_new_hls=is_vjs5_new_hls();this.is_vjs4_dm_compat=is_vjs4()&&this.vjs.tech&&this.vjs.tech.hls_;this.zone=opt.zone;this.zperr=this.zone.perr_get();this.log=this.zone.log_get().set_module("vjs");this.on("wrapper_attached",function(){_this.vjs.trigger("hola.wrapper_attached")});this.on("wrapper_detached",function(){_this.vjs.trigger("hola.wrapper_detached")});if(this.swf=this.vjs&&this.vjs.osmf&&this.vjs.osmf.el_){this.flash_api=util.build_flash_api(this);if(this.swf.hola_settings)this.swf.hola_settings({player_id:this.player_id})}if(opt.tech=="hlsjs"&&window.Hls&&!this.is_vjs4_dm_compat){this.on("wrapper_attached",function cb(){this.off("wrapper_attached",cb);_this.log.err("hola does not support this combination");this.emit("error",{reason:"other",message:"hola does not support this combination"})});return}this.media_src_api=opt.tech=="html5"&&window.MediaSource?window:videojs;this.blob2url={};this.type=opt.type;this.position=0;this.vjs_handlers={};this.module_handlers={shaka:function(){if(opt.tech!="shaka")return;util.assert_enabled(shaka,"shaka module is required but disabled");var vjs_shaka_get=function(vjs){return vjs.tech_.shakaPlayer||vjs.tech_.shakaPlayer_};var shaka_obj=vjs_shaka_get(_this.vjs);_this.module=new shaka.Module({html5:opt.html5||vjs_getElement(_this.vjs),zone:_this.zone,shaka:shaka_obj});return{changed:function(){return shaka_obj!=vjs_shaka_get(_this.vjs)},uninit:function(){_this.module.uninit();_this.module=undefined}}},dash:function(){var adaptive=_this.zone.get_adaptive_type(_this.get_url());if(adaptive!="dash"||!videojs.Html5DashJS)return;util.assert_enabled(dash,"dash module is required but disabled");var vjs_dashjs_get=function(vjs){return opt.slave&&opt.slave.dashjs||vjs.tech_.sourceHandler_.mediaPlayer_};var dash_obj=vjs_dashjs_get(_this.vjs);dash.patch_dashjs(dash_obj);_this.module=new dash.Module({html5:opt.html5||vjs_getElement(_this.vjs),zone:_this.zone,dashjs:dash_obj,vjs:_this.vjs});return{changed:function(){return dash_obj!=vjs_dashjs_get(_this.vjs)},uninit:function(){_this.module.uninit();_this.module=undefined}}},hls:function(){var adaptive=_this.zone.get_adaptive_type(_this.get_url());if(adaptive!="hls"||!videojs.HolaProviderHLS)return;util.assert_enabled(dailymotion,"dailymotion module is required but disabled");var vjs_hls_get=function(vjs){return vjs.tech_.hls_obj};var hls_obj;if(hls_obj=vjs_hls_get(_this.vjs)){_this.module=new dailymotion.Module({html5:opt.html5||vjs_getElement(_this.vjs),zone:_this.zone,dailymotion:hls_obj,vjs:_this.vjs});_this.module.on("level_loaded",_this.hls_level_loaded=function(lvl){_this.emit("level_loaded",lvl)})}return{changed:function(){return hls_obj!=vjs_hls_get(_this.vjs)},uninit:function(){if(!_this.module)return;_this.module.off("level_loaded",_this.hls_level_loaded);_this.module.uninit();_this.module=_this.hls_level_loaded=undefined}}},hls_vjs4:function(){var adaptive=_this.zone.get_adaptive_type(_this.get_url());if(adaptive!="hls"||!window.Hls||!_this.is_vjs4_dm_compat)return;util.assert_enabled(dailymotion,"dailymotion module is required but disabled");var vjs_hls_get=function(vjs){return vjs.tech.hls_};var hls_obj=vjs_hls_get(_this.vjs);_this.module=new dailymotion.Module({html5:opt.html5||vjs_getElement(_this.vjs),zone:_this.zone,dailymotion:hls_obj,vjs:_this.vjs});_this.module.on("level_loaded",_this.hls_level_loaded=function(lvl){_this.emit("level_loaded",lvl)});return{changed:function(){return hls_obj!=vjs_hls_get(_this.vjs)},uninit:function(){_this.module.off("level_loaded",_this.hls_level_loaded);_this.module.uninit();_this.module=_this.hls_level_loaded=undefined}}},hls_native_no_play:function(){var skip_native_hls=function(){var adaptive=_this.zone.get_adaptive_type(_this.get_url());return adaptive=="hls"&&videojs.Hls&&videojs.Hls.supportsNativeHls&&videojs.HlsSourceHandler&&!videojs.HlsSourceHandler.canPlayType("application/x-mpegurl")};if(!skip_native_hls())return;var on_check_skip_video=function(e){if(util.is_mode_cdn_or_bwsaver(_this.zone))e.skip="native hls is used"};_this.on("wrapper.check_skip_video",on_check_skip_video);return{changed:function(){return!skip_native_hls()},uninit:function(){_this.off("wrapper.check_skip_video",on_check_skip_video)}}}};this.on("wrapper.zone_init",this.module_reconf=function(){if(_this.module_ops){if(!_this.module_ops.changed())return;_this.module_ops.uninit()}Object.keys(_this.module_handlers).find(function(h){return _this.module_ops=_this.module_handlers[h]()})});this.module_reconf();player_set_initial_state(this);var tgt=this.vjs.tech_&&this.vjs.tech_.setSrc&&this.zone.CG("player.vjs.use_tech_src_api")?[this.vjs.tech_,"setSrc"]:[this.vjs,"src"];this.src_hook=util.inject_hook(tgt[0],tgt[1],{log:this.log,exec:function(e,args){var src=args[0];if(!src)return;if(typeof src!="string")src=Array.isArray(src)?src[0].src:src.src;if(_this.blob2url[src]||src==_this.get_url())return;_this.zperr({id:"source_change",delay:true});_this.emit("src_change",{from:_this.get_url(),to:src});if(!_this.is_idle()){_this.emit("interrupted");_this.seeking=false;_this.state="IDLE";_this.emit("state",_this.state)}_this.src_hook.original_handlers.exec.apply(this,args);e.set_handled();_this.vjs.ready(function(){if(_this.state!="IDLE")return;_this.state=_this.vjs.paused()?"PAUSED":"PLAYING";_this.emit("started")})}});this.on_vjs=function(events,handler){var wrapper=function(e){if(this.ready)handler.call(this,e)}.bind(this);events=typeof events=="string"?[events]:events;events.forEach(function(event){_this.vjs_handlers[event]=[].concat(_this.vjs_handlers[event]||[],wrapper);_this.vjs.on(event,wrapper)})};this.on_vjs("seeked",function(a){this.seeking=false;this.emit("seeked")});this.on_vjs("ended",function(a){if(this.is_ad_playing())return;this.state="IDLE";this.emit("ended")});this.on_vjs("abort",function(){if(this.pending_mse_start)return;this.state="IDLE";this.emit("state",this.state)});this.on_vjs("seeking",function(a){this.seeking=true;this.prev_position=this.position;this.position=this.vjs.currentTime();this.emit("seeking",this.prev_position,this.position)});this.on_vjs("pause",function(a){if(this.seeking)return;if(this.state=="IDLE")return;if(this.is_ad_playing())return;this.state="PAUSED";this.emit("state",this.state);this.emit("pause")});this.on_vjs("play",function(a){if(this.pending_mse_start)delete this.pending_mse_start;if(this.seeking)return;if(this.is_ad_playing())return;if(this.state=="IDLE")this.emit("started",this.get_url());this.state="PLAYING";this.emit("state",this.state);this.emit("play")});this.on_vjs("waiting",function(a){this.emit("waiting")});this.on_vjs("error",function(a){var err_map={1:{message:"download was cancelled",reason:"other"},2:{message:"network error",reason:"media_load"},3:{message:"decode error",reason:"media_decode"},4:{message:"source not supported",reason:"media_support"},5:{message:"ecnryption error",reason:"media_decode"},unknown:{message:"unknown",reason:"other"},"-1":{message:"no video was loaded",reason:"other"},"-2":{message:"timeout",reason:"media_load"}};var code,msg;if(this.vjs.error){var error=this.vjs.error();code=error.code;msg=error.message}code=code||a.target&&a.target.error&&a.target.error.code||a.code;var info=err_map[code]||err_map.unknown;msg=msg||a.message||info.message;this.emit("error",{reason:info.reason,message:msg})});this.on_vjs("timeupdate",function(a){if(this.is_ad_playing()){this.emit("ad_time",{duration:this.vjs.duration(),position:this.vjs.currentTime()})}else{this.buffered=this.vjs.buffered();var pos=this.vjs.currentTime();if(pos>this.position&&!this.vjs.paused()&&this.state!="PLAYING"){this.state="PLAYING";this.emit("state",this.state);perr({id:"vjs_missing_play_event",add_log:true,delay:true,throttle:1})}this.position=pos;this.emit("timeupdate",pos)}});this.on_vjs("mediachange",function(a){this.emit("quality_level")});this.on_vjs("beforeresolutionchange",function(e){this.emit("beforeresolutionchange")});this.on_vjs("resolutionchange",function(){this.emit("resolutionchange")});this.on_vjs("problem_report",function(e){this.emit("problem_report",e&&e.data?{data:e.data}:undefined)});this.on_vjs("save_logs",function(e){this.emit("save_logs",e&&e.data?{data:e.data}:undefined)});this.vjs.hola_logs=function(){return _this.bws?_this.bws.get_logs():_this.log.get_logs()};this.stash=function(){var stash={on_sourceopen:this.on_sourceopen};if(stash.on_sourceopen)this.disable_data_mode();return function(){if(stash.on_sourceopen)this.enable_data_mode(stash.on_sourceopen)}.bind(this)};this.is_enc_key=function(url){this.get_levels(true);return this.enc_keys&&this.enc_keys[url]};var handler;if(handler=Object.keys(E.ad_handlers).find(function(h){return E.ad_handlers[h].is_enabled({vjs:_this.vjs})})){this.ad_handler=new E.ad_handlers[handler](this);this.ad_handler.init()}};zutil.inherits(E.Player,util.events);E.Player.prototype.get_current_buffer=util.get_current_buf;E.Player.prototype.uninit=function(){if(this.module_ops)this.module_ops=this.module_ops.uninit();if(this.ad_handler)this.ad_handler=this.ad_handler.uninit();this.events.removeAllListeners();for(var event in this.vjs_handlers){for(var i=0;i.25)return;_this.end_of_stream_timer=setTimeout(function(){var cur=_this.vjs.currentTime();var dur=_this.vjs.duration();if(!dur||!cur||_this.vjs.ended())return;if(Math.floor(dur)-Math.round(cur)>.25)return;if(window.hola_cdn&&window.hola_cdn.CG("loader.disable_vjs_ended_hack")){if(dur<120)return}_this.log.notice("schedule_end_of_stream_check fake ended "+"%s %s",cur,dur);perr({id:"vjs_ended_fallback",add_log:true,info:"previous: "+prev+" current: "+cur+" duration: "+dur});_this.vjs.trigger(new Event("ended"));_this.vjs.off("timeupdate",_this.schedule_end_of_stream_check)},500)};this.vjs.on("timeupdate",this.schedule_end_of_stream_check)}this.on_sourceopen=function(){return on_sourceopen(this.media_src)}.bind(this);this.media_src.addEventListener("sourceopen",this.on_sourceopen);if(this.media_src.readyState=="open")on_sourceopen(this.media_src)};E.Player.prototype.disable_data_mode=function(){if(!this.media_src)return;this.media_src.removeEventListener("sourceopen",this.on_sourceopen);if(this.schedule_end_of_stream_check){this.vjs.off("timeupdate",this.schedule_end_of_stream_check);this.end_of_stream_timer=clearTimeout(this.end_of_stream_timer)}this.media_src=this.pending_mse_start=this.on_sourceopen=this.schedule_end_of_stream_check=undefined};E.Player.prototype.is_playing=function(){return this.state=="PLAYING"};E.Player.prototype.is_paused=function(){return this.state=="PAUSED"};E.Player.prototype.is_idle=function(){return this.state=="IDLE"};E.Player.prototype.is_ad_playing=function(){return this.ad_handler&&this.ad_handler.is_ad_playing()};function process_osmf_levels(levels){var ret={};if(!levels||!levels.length)return ret;for(var i=0;i1&&!_this.get_segment_info(url))return;if(_this.is_enc_key(url))return void _this.log.info("skip key file "+url);e.set_handled();if(typeof callback!="function")callback=function(){};var fake_xhr={abort:function(){if(!this.req||this.req.error===ERR.aborted)return;this.req.abort();adaptive.remove_segment(segment);_this.log.notice("req aborted",this.req)},requestTime:Date.now()};var segment={callback:callback,url:url,fake_xhr:fake_xhr,playlist_id:"def",dur:10,streaming:zutil.is_mocha()?_this.zone.CG("cdn.send_reqs.disable_streaming"):false&&opt.streaming};adaptive.init_segment(segment);return fake_xhr}));adaptive.on("uninit",hook.remove.bind(hook));if(adaptive.adaptive=="hls"){adaptive.on("seg_complete",function(req){if(req.error||!req.opt.streaming||!req.served)return;var segment=req.info.segment,fake_xhr=segment.fake_xhr;fake_xhr.status=200;fake_xhr.response=null;fake_xhr.responseTime=Date.now();fake_xhr.roundTripTime=fake_xhr.responseTime-fake_xhr.requestTime;fake_xhr.bytesReceived=req.res.size;var bw=Math.floor(fake_xhr.bytesReceived/fake_xhr.roundTripTime*8*1e3);if(adaptive.bw_src&&adaptive.bw_src.bw>bw)bw=adaptive.bw_src.bw;fake_xhr.bandwidth=bw;fake_xhr.type="final";segment.callback.call(fake_xhr,undefined,is_vjs5()?fake_xhr:segment.url)})}};E.Player.prototype.ondata_adaptive=function(chunk,adaptive){if(adaptive.adaptive=="hds"){util.assert_enabled(jsurlstream,"jsurlstream module is required but disabled");return void jsurlstream.ondata_adaptive(chunk,this,adaptive)}if(this.module){if(this.module.ondata_adaptive)this.module.ondata_adaptive(chunk,adaptive);return}var segment=chunk.req.info.segment;var callback=segment.callback,url=segment.url;var fake_xhr=segment.fake_xhr;if(!chunk.data||chunk.req.error){return void callback.call(fake_xhr,chunk.req.error||true,is_vjs5()?fake_xhr:url)}adaptive.indexer[segment.playlist_id].completed=segment.index;fake_xhr.status=200;fake_xhr.response=chunk.data;fake_xhr.responseTime=Date.now();fake_xhr.roundTripTime=fake_xhr.responseTime-fake_xhr.requestTime;fake_xhr.bytesReceived=fake_xhr.response.byteLength||fake_xhr.response.length;var bw=Math.floor(fake_xhr.bytesReceived/fake_xhr.roundTripTime*8*1e3);if(adaptive.bw_src&&adaptive.bw_src.bw>bw)bw=adaptive.bw_src.bw;fake_xhr.bandwidth=bw;if(chunk.req.opt.streaming)fake_xhr.type="progress";return callback.call(fake_xhr,false,is_vjs5()?fake_xhr:url)};util.module_fn(E,function get_decoded_frames(){var el=vjs_getElement(this.vjs);if(!el)return 0;if(el.tagName&&el.tagName.toLowerCase()=="video"){util.assert_enabled(html5,"html5 module is required but disabled");return html5.get_decoded_frames(el)||0}return el.vjs_getProperty&&el.vjs_getProperty("decodedFrames")||0});function map_ad_events(vjs,player,map){Object.keys(map).forEach(function(ad_event){if(typeof map[ad_event]!="function"){var player_event=map[ad_event];map[ad_event]=function(){player.emit(player_event)}}vjs.on(ad_event,map[ad_event])});return function(){Object.keys(map).forEach(function(ad_event){vjs.off(ad_event,map[ad_event])})}}E.ad_handlers={};E.ad_handlers.Contrib=function(player){this.player=player};E.ad_handlers.Contrib.is_enabled=function(opt){return opt.vjs.ads&&opt.vjs.ima3};E.ad_handlers.Contrib.prototype.init=function(){var player=this.player,vjs=player.vjs;var ima3_fix_state=function(target_state){player.log.notice("vjs ima3_fix_state target_state %s ad_state %s",target_state,vjs.ads.state);if(player.state==target_state)return;player.state=target_state;player.emit("state",player.state);player.emit(target_state=="PAUSED"?"pause":"play")};var ad_info={};var vjs_contrib_ads_map={ima3:{adstart:function(){ad_info={};ima3_fix_state("PAUSED");player.emit("ad_start");player.emit("ad_play")},adtimeupdate:"ad_time","ads-first-quartile":"ad_time","ads-midpoint":"ad_time","ads-third-quartile":"ad_time","ima3-resumed":"ad_play","ima3-paused":"ad_pause","ima3-skipped":function(){ad_info.skipped=true},adserror:"ad_error",adend:function(){player.emit(ad_info.skipped?"ad_skipped":"ad_complete");ima3_fix_state("PLAYING")}}};this.contrib_ad_map_uninit=map_ad_events(vjs,player,vjs_contrib_ads_map.ima3)};E.ad_handlers.Contrib.prototype.is_ad_playing=function(){return this.player.vjs.ads.state=="ad-playback"};E.ad_handlers.Contrib.prototype.uninit=function(){this.contrib_ad_map_uninit()};E.ad_handlers.VastVpaid=function(player){this.player=player};E.ad_handlers.VastVpaid.is_enabled=function(opt){return opt.vjs.vast};E.ad_handlers.VastVpaid.prototype.init=function(){var _this=this,player=this.player,vjs=player.vjs;var ad_info=null;this.disable_ad_stats=function(){player.zone.CE("stats.disable_ad_stats")};this.detect_ad_inplace=function(e){if(!vjs.vast.adUnit||(vjs.vast.adUnit.getSrc()||{}).src!=e.to)return;player.off("src_change",_this.detect_ad_inplace);player.on("pre-wrapper.zone_init",_this.disable_ad_stats);_this.disable_ad_stats();_this.ads_attachable=true};this.vast_ad_start=function(){if(ad_info)return ad_info.skipped=false;ad_info={};player.emit("ad_start");player.emit("ad_play")};this.vast_ad_error=function(e){if(!ad_info)return;ad_info=null;player.emit("ad_error",e&&e.error&&e.error.message||"Unknown error")};this.vxxx_ad_skip=function(){if(ad_info)ad_info.skipped=true};this.vast_ad_complete=function(){player.log.notice("vjs vast.adEnd/vast.adCancel ad_info "+!!ad_info);if(!ad_info)return;player.emit(ad_info.skipped?"ad_skipped":"ad_complete");ad_info=null};this.vast_ad_map_uninit=map_ad_events(vjs,player,{"vast.adStart":this.vast_ad_start,"vast.adSkip":this.vxxx_ad_skip,"vast.adError":this.vast_ad_error,"vast.adEnd":this.vast_ad_complete,"vast.adsCancel":this.vast_ad_complete,"vpaid.AdImpression":"ad_impression","vpaid.AdSkipped":this.vxxx_ad_skip,"vpaid.pauseAd":"ad_pause","vpaid.resumeAd":"ad_play","hola.adConfigReqSending":"ad_config","hola.adDownload":"ad_download"});player.on("src_change",this.detect_ad_inplace);this.detect_ad_inplace({to:player.get_url()})};E.ad_handlers.VastVpaid.prototype.is_ad_playing=function(){var vjs=this.player.vjs;return!this.ads_attachable&&!!(vjs.vastClient&&vjs.controlBar.getChild("AdsLabel"))};E.ad_handlers.VastVpaid.prototype.uninit=function(){var player=this.player;player.off("src_change",this.detect_ad_inplace);player.off("pre-wrapper.zone_init",this.disable_ad_stats);this.vast_ad_map_uninit()};function resolve_url(src_url,playlist_url,segment_url){if(playlist_url==src_url)return util.resolve_url(src_url,segment_url);return util.resolve_url(util.resolve_url(src_url,playlist_url||""),segment_url)}function player_set_initial_state(player){var vjs=player.vjs;var sync=!player.zone.CG("player.vjs.async_init");player.state="IDLE";player.ready=false;player.is_late_attach=function(){return player.is_playing()||player.is_ad_playing()||!vjs_atInitPosition(vjs)};vjs.ready(function vjs_ready(){var src=player.get_url();if(!src)return setTimeout(vjs_ready,100);player.ready=true;player.state=vjs.paused()?"PAUSED":"PLAYING";player.emit("started",src)},sync)}function vjs_change_src(vjs,src){var was_playing=!vjs.paused();vjs.src({src:src});if(was_playing)vjs.ready(vjs.play.bind(vjs))}E.vjs_getTechName=function(vjs){return vjs.techName||vjs.techName_||""};function vjs_atInitPosition(vjs){var el=vjs_getElement(vjs);if(!el||!el.tagName||el.tagName.toLowerCase()!="video")return!vjs.currentTime();return html5.at_init_position(el)}function vjs_getElement(vjs){var tech=vjs.tech_||vjs.tech,el=tech&&(tech.el_||tech.el);if(!el&&typeof vjs.el=="function")el=vjs.el().getElementsByClassName("vjs-tech")[0];return typeof el=="function"&&!(el instanceof Node)?el():el}return E}); define("/svc/cdn/pub/osmf.js",["/svc/cdn/pub/map.js","/svc/cdn/pub/util.js","/svc/cdn/pub/jsurlstream.js"],function(map,util,jsurlstream){var E={};var api=util.get_api();function is_state_waiting(state){return/BUFFERING/.test(state)}E.Player=function(opt){var _this=this;this.player_id=opt.player_id||1;this.name="osmf";if(this.swf=opt.osmf.flashObject||opt.osmf)this.flash_api=util.build_flash_api(this);this.osmf=opt.osmf;this.tech="flash";this.zone=opt.zone;this.log=this.zone.log_get().set_module("osmf");this.bitrate={};this.level_url={};this.events=new util.events;if(this.swf.hola_settings)this.swf.hola_settings({player_id:this.player_id});var started_sent=false;api.onOsmfEvent=function(data){_this.on_msg({data:data})};this.on_msg=function(e){if(!e.data||(e.data.player_id||1)!=_this.player_id)return;var id=e.data.id;if(!id)return;var state=e.data.state;switch(id){case"osmf.mediaTime":_this.refresh_buffered();_this.emit("timeupdate",_this.get_pos());return;case"osmf.playbackState":if(!started_sent){_this.emit("started",_this.get_url());started_sent=true}_this.emit("state",state);if(is_state_waiting(state))_this.emit("waiting");else if(state=="PLAYING")_this.emit("play");else if(state=="PAUSED")_this.emit("pause");return;case"osmf.seekState":if(state=="SEEKING")_this.emit("seeking");else if(state=="SEEKED")_this.emit("seeked");return;case"osmf.levelSwitch":_this.level=e.data.level;_this.emit("quality_level");return;case"osmf.playBackComplete":_this.log.notice("osmf.js ended");_this.emit("ended");return;case"osmf.manifestLoading":_this.log.notice("osmf.js started");if(!started_sent){_this.emit("started",_this.get_url());started_sent=true}return;case"osmf.manifestParsed":_this.emit("manifest_parsed");return;case"osmf.error":_this.emit("error",{reason:"other",message:"unknown"});return;case"osmf.fragmentLoaded":_this.bandwidth=e.data.loadMetrics.bandwidth;return}};window.addEventListener("message",this.on_msg)};E.Player.prototype.uninit=function(){window.removeEventListener("message",this.on_msg)};E.Player.prototype.emit=function(e,o){this.events.emit(e,o)};E.Player.prototype.set_cdn_mode=function(on){this.swf.hola_settings({hls_mode:!!on,mode:on?"adaptive":"native"})};E.Player.prototype.get_video_type=function(){return""};E.Player.prototype.get_url=function(){return this.swf.hola_osmf_get_video_url()};E.Player.prototype.seek=function(ms){this.log.warn("XXX osmf stub")};E.Player.prototype.get_pos=function(){return this.swf.hola_osmf_get_position()||0};E.Player.prototype.refresh_buffered=function(){var from=this.get_pos(),ret={};var to=from+(this.swf.hola_osmf_get_buffer_sec()||0);ret.length=from==to?0:1;ret.start=function(i){return from};ret.end=function(i){return to};return this.buffered=ret};E.Player.prototype.get_buffered=function(){return this.buffered||this.refresh_buffered()};E.Player.prototype.get_current_buffer=util.get_current_buf;E.Player.prototype.get_duration=function(){return this.swf.hola_osmf_get_duration()};E.Player.prototype.is_live_stream=function(){var type=this.swf.hola_osmf_get_stream_type();return type=="live"||type=="dvr"};E.Player.prototype.on=function(event,handler,ctx){this.events.on(event,handler,ctx)};E.Player.prototype.once=function once(event,fn,context){this.events.once(event,fn,context)};E.Player.prototype.one=E.Player.prototype.once;E.Player.prototype.off=function(event,handler){this.events.off(event,handler)};E.Player.prototype.discontinuity=function(sbuf){this.log.warn("XXX osmf stub")};E.Player.prototype.play_url=function(url,pos,is_paused,video_type){this.log.warn("XXX play_url stub")};E.Player.prototype.enable_data_mode=function(on_sourceopen){this.log.warn("XXX osmf stub")};E.Player.prototype.disable_data_mode=function(){};E.Player.prototype.get_state=function(){return this.swf.hola_osmf_get_state()};E.Player.prototype.is_playing=function(){var state=this.swf.hola_osmf_get_state();return state=="PLAYING"||state=="PLAYING_BUFFERING"};E.Player.prototype.is_paused=function(){return!this.is_idle()&&!this.is_playing()};E.Player.prototype.is_idle=function(){return!this.swf.hola_osmf_get_state||this.swf.hola_osmf_get_state()=="IDLE"};E.Player.prototype.is_ad_playing=function(){return false};E.Player.prototype.get_container=function(){return this.swf};E.Player.prototype.get_levels=function(){var levels=this.swf.hola_osmf_get_levels();var ret={};if(!levels||!levels.length)return ret;for(var i=0;i=date_from&¤t_date=42?"*":"fl"},ie:function(p){var bv=p.browser_version;return bv>=11&&p.os_version>=8?"*":bv>=10?"fl":""}}},linux:{"*":{chrome:{"*":"*"},opera:{"*":"fl"},firefox:{"*":"fl"}}},macos:{"*":{chrome:{"*":"*"},opera:{"*":"fl"},firefox:{"*":"fl"}}}};var flv_holavjs_jw=function(p){return p.browser=="ie"&&(p.browser_version==9||p.browser_version==10&&p.os_version==8)?"":"fl"};var h5_if_ms=function(){return window.MediaSource?"h5":""};return{mp4:{hola_vjs:mp4_holavjs_jw,hola_vjs5:mp4_holavjs_jw,flowplayer6:mp4_holavjs_jw,clappr:mp4_holavjs_jw,vjs:function(p){return p.browser=="firefox"||p.browser=="ie"||p.os=="linux"&&p.browser=="opera"?"":"h5"},jw:mp4_holavjs_jw,html5:function(p){if(p.browser=="firefox"&&p.os_version=="xp")return"";return h5_if_ms()}},flv:{hola_vjs:flv_holavjs_jw,hola_vjs5:flv_holavjs_jw,jw:flv_holavjs_jw},hds:{hola_vjs:flv_holavjs_jw,hola_vjs5:flv_holavjs_jw},hls:{hola_vjs:function(p){return p.browser=="ie"&&p.browser_version==9?"":"fl"},hola_vjs5:function(p){return p.browser=="ie"&&p.browser_version==9?"":"*"},vjs4:function(p){return p.browser=="ie"&&p.browser_version==9?"":"*"},flowplayer6:function(){return"*"},clappr:function(p){return p.browser=="ie"&&p.browser_version==9?"":"h5"},jw:function(p){return p.browser=="ie"&&p.browser_version==9||p.os=="windows"&&(p.os_version=="8"||p.os_version=="8.1")&&p.browser=="firefox"?"":"*"},dailymotion:function(p){return p.browser=="ie"&&p.browser_version==9?"":"h5"}},dash:{dashjs:h5_if_ms,shaka:h5_if_ms,hola_vjs5:h5_if_ms,flowplayer6:h5_if_ms},webm:{"*":function(p){return p.browser=="chrome"?"h5":""}}}}();function check_obj_path(obj,path,order){var part=path[order.shift()];if((obj=obj[part]||obj["*"])===undefined)return false;return order.length?typeof obj=="function"?obj(path):check_obj_path(obj,path,order):obj}function get_format(url){var ext=/(?:\.([^.\/?#]+))?([?#].*)?$/.exec(url)[1];return ext?formats[ext]:url}E.get_available_tech_by_env=function(path,order){return check_obj_path(matrix,path,order)};E.get_available_tech=function(url,player){function is_flash_enabled(){try{return!!new ActiveXObject("ShockwaveFlash.ShockwaveFlash")}catch(e){var mime="application/x-shockwave-flash";return!!(navigator.mimeTypes&&navigator.mimeTypes[mime]&&navigator.mimeTypes[mime].enabledPlugin)}}var guess=user_agent.guess();var browser=user_agent.guess_browser();var path={format:get_format(url),player:player,os:guess.os,os_version:guess.version,browser:browser.opera?"opera":browser.browser,browser_version:browser.version};var order=["format","player","os","os_version","browser","browser_version"];var tech=E.get_available_tech_by_env(path,order.slice());log.notice("Available tech for ["+order.map(function(o){return path[o]}).join(", ")+"] is "+tech);switch(tech){case"fl":return{flash:is_flash_enabled(),html5:false};case"h5":return{flash:false,html5:true};case"*":return{flash:is_flash_enabled(),html5:true};default:return{flash:false,html5:false}}};E.is_browser_supported=function(opt){opt=opt||{};var version=util.browser.version;if(!util.is_android&&!util.is_windows&&!util.is_linux&&!util.is_ios&&!util.is_mac&&!util.is_webos){return false}if(util.is_android&&util.guess.version<4.4)return false;if(util.conf_get("customer")=="hc_9e6cd09b"&&util.is_android&&(util.guess.version<4.5||version<48)){return false}if(util.is_firefox&&util.is_windows&&get_format(opt.video_url)=="mp4"&&user_agent.guess().version=="xp"){return false}if(util.is_webos&&version_util.cmp(version,"38")<0)return false;if(util.is_ie&&version>=(util.is_mobile?11:8))return true;if(util.is_chrome&&version>=(util.is_mobile?30:23))return true;if(util.is_firefox&&!util.is_mobile&&version>=37)return true;if(util.is_opera&&version>=(util.is_mobile?30:15))return true;if(typeof version=="string")version=version.replace(/_/g,".");return util.is_safari&&version_util.cmp(version,"8")>=0};E.select_mode=function(opt){function storage_mode(){try{return window.sessionStorage.getItem("hola_mode")||localStorage.getItem("hola_mode")}catch(err){}}function debug_compatible_mode(){var debug_compatible;try{debug_compatible=localStorage.hola_debug_compatible_browser}catch(err){}if(debug_compatible!=undefined)debug_compatible=debug_compatible||"disabled";return debug_compatible}function browser_rule_mode(r){if(r.browser&&r.browser!=util.browser_rule_s||r.os&&r.os!=util.guess.os){return false}var rand=util.get_random("mode");var p=r.cdn||0;if(rand.25)return;_this.end_of_stream_timer=setTimeout(function(){var cur=_this.vjs.currentTime();var dur=_this.vjs.duration();if(!dur||!cur||_this.vjs.ended())return;if(Math.floor(dur)-Math.round(cur)>.25)return;_this.log.notice("schedule_end_of_stream_check fake ended "+"%s %s",cur,dur);perr({id:"hola_vjs_ended_fallback",add_log:true,info:"previous: "+prev+" current: "+cur+" duration: "+dur});_this.vjs.trigger(new Event("ended"));_this.vjs.off("timeupdate",_this.schedule_end_of_stream_check)},500)};this.vjs.on("timeupdate",this.schedule_end_of_stream_check)}this.on_sourceopen=function(){return on_sourceopen(this.media_src)}.bind(this);this.media_src.addEventListener("sourceopen",this.on_sourceopen);if(this.media_src.readyState=="open")on_sourceopen(this.media_src)};E.Player.prototype.disable_data_mode=function(){if(!this.media_src)return;this.media_src.removeEventListener("sourceopen",this.on_sourceopen);if(this.schedule_end_of_stream_check){this.vjs.off("timeupdate",this.schedule_end_of_stream_check);this.end_of_stream_timer=clearTimeout(this.end_of_stream_timer);this.schedule_end_of_stream_check=undefined}this.media_src=this.on_sourceopen=undefined};E.Player.prototype.is_playing=function(){return this.state=="PLAYING"};E.Player.prototype.is_paused=function(){return this.state=="PAUSED"};E.Player.prototype.is_idle=function(){return this.state=="IDLE"};E.Player.prototype.is_ad_playing=function(){return!!this.vjs.ads&&this.vjs.ads.state=="ad-playback"};util.module_fn(E,function get_container(){return vjs_getElement(this.vjs)});["get_levels","get_playlists","get_current_playlist","get_segment_info","get_bitrate","get_current_level","get_bandwidth","init_adaptive","ondata_adaptive"].forEach(function(name){util.module_fn(E,name)});util.module_fn(E,function get_current_fragment(){});util.module_fn(E,function get_decoded_frames(){var el=vjs_getElement(this.vjs);if(!el)return 0;if(el.tagName&&el.tagName.toLowerCase()=="video"){util.assert_enabled(html5,"html5 module is required but disabled");return html5.get_decoded_frames(el)||0}return el.vjs_getProperty&&el.vjs_getProperty("decodedFrames")||0});function player_set_initial_state(player){var vjs=player.vjs;player.state="IDLE";player.ready=false;vjs.ready(function(){player.ready=true;player.state=vjs.paused()?"PAUSED":"PLAYING";player.emit("started",player.get_url())})}function vjs_getElement(vjs){return vjs.tech_&&vjs.tech_.el_}return E}); define("/svc/cdn/pub/buffer_monitor.js",["/svc/cdn/pub/util.js"],function(util){var E={};var defaults={buffer_threshold:20,poll_period:500};E.PlayerExtension=function(player,opt){if(!(this instanceof E.PlayerExtension))return new E.PlayerExtension(player,opt);opt=Object.assign(defaults,opt);this.player=player;this.enabled=0;this.buffer_poll=this.try_wrapper(function(){var duration;if(!(duration=this.player.get_duration()))return;var last_state=this.state;var buf=this.player.get_current_buffer();if(duration-buf.to>0){var buffer_len=buf.to-this.player.get_pos();this.state=buffer_len>=opt.buffer_threshold?"buffer_full":buffer_len<=opt.buffer_threshold-5?"buffer_low":last_state=="buffer_full"?"buffer_full":"buffer_low"}else this.state="buffer_loaded";if(this.state!=last_state)this.player.emit("buffer_monitor",this.state)});this.on_player_state=this.try_wrapper(function(){this.run(!this.player.is_idle())});this.on_zone_init=this.try_wrapper(function(){var conf;if(!(conf=this.player.zone.CGJ("player.extension.buffer_monitor")))conf=defaults;if(this.running&&conf.poll_period!=opt.poll_period){clearInterval(this.buffer_poll_interval);this.buffer_poll_interval=setInterval(this.buffer_poll,conf.poll_period)}Object.assign(opt,conf)});this.run=function(run){if(!(run^this.running))return;this.state=undefined;this.running=run;if(run){this.buffer_poll_interval=setInterval(this.buffer_poll,opt.poll_period);this.buffer_poll()}else{this.buffer_poll_interval=clearInterval(this.buffer_poll_interval)}}};E.PlayerExtension.prototype.enable=function(){if(this.enabled++)return;this.player.on("state",this.on_player_state);this.player.on("wrapper.zone_init",this.on_zone_init);this.on_zone_init();if(!this.player.is_idle())this.run(true)};E.PlayerExtension.prototype.disable=function(force_close){if(!force_close&&(!this.enabled||--this.enabled))return;this.run(false);this.player.off("wrapper.zone_init",this.on_zone_init);this.player.off("state",this.on_player_state)};E.PlayerExtension.prototype.try_wrapper=function(func){return util.try_wrapper({prefix:"buffer_monitor"},func.bind(this))};E.PlayerExtension.prototype.uninit=function(){this.disable(true)};return E}); if(!window.define){window.define=function(name,dep,cb){if(typeof name=="object"){cb=dep;dep=name}window.jwplayer_hls_provider=cb()}}define("/svc/cdn/pub/jwplayer_hls_provider.js",[],function(){var util={events:function(){function EventEmitter(){this._events={}}EventEmitter.prototype.listeners=function listeners(event){return Array.apply(this,this._events[event]||[])};EventEmitter.prototype.emit=function emit(event,a1,a2,a3,a4,a5){if(!this._events||!this._events[event])return false;var listeners=this._events[event],length=listeners.length,len=arguments.length,fn=listeners[0],args,i;if(1===length){switch(len){case 1:fn.call(fn.__EE3_context||this);break;case 2:fn.call(fn.__EE3_context||this,a1);break;case 3:fn.call(fn.__EE3_context||this,a1,a2);break;case 4:fn.call(fn.__EE3_context||this,a1,a2,a3);break;case 5:fn.call(fn.__EE3_context||this,a1,a2,a3,a4);break;case 6:fn.call(fn.__EE3_context||this,a1,a2,a3,a4,a5);break;default:for(i=1,args=new Array(len-1);i120)duration=-seekable_dur}return duration}function get_buffered(){var buf=video.buffered,dur=video.duration;if(!buf||buf.length==0||dur<=0||dur==Infinity)return 0;return Math.min(buf.end(buf.length-1)/dur,1)}function set_buffered(buffered,pos,duration){if(buffered==_buffered&&duration==_duration)return;_buffered=buffered;_this.trigger(jwe.JWPLAYER_MEDIA_BUFFER,{bufferPercent:buffered*100,position:pos,duration:duration})}var video_listeners={durationchange:function(){_duration=get_duration();set_buffered(get_buffered(),_position,_duration)},ended:function(){if(_this.state=="idle"||_this.state=="complete")return;_this.completed=true;_this.trigger(jwe.JWPLAYER_MEDIA_BEFORECOMPLETE);_this.setState("complete");_this.completed=false;_this.trigger(jwe.JWPLAYER_MEDIA_COMPLETE)},error:function(){_this.trigger(jwe.JWPLAYER_MEDIA_ERROR,{message:"Error loading media: File could not be played"})},loadstart:function(){video.setAttribute("jw-loaded","started")},loadeddata:function(){video.setAttribute("jw-loaded","data")},loadedmetadata:function(){if(video.muted){video.muted=false;video.muted=true}video.setAttribute("jw-loaded","meta");var duration=get_duration();_this.trigger(jwe.JWPLAYER_MEDIA_META,{duration:duration,height:video.videoHeight,width:video.videoWidth});_duration=duration},canplay:function(){_this.trigger(jwe.JWPLAYER_MEDIA_BUFFER_FULL)},playing:function(){_this.setState("playing");if(!video.hasAttribute("jw-played"))video.setAttribute("jw-played","");_this.trigger(jwe.JWPLAYER_PROVIDER_FIRST_FRAME,{})},pause:function(){if(_this.state=="complete"||video.currentTime==video.duration)return;_this.setState("paused")},seeking:function(){if(!_this._in_seek){_this._in_seek=true;_this.trigger(jwe.JWPLAYER_MEDIA_SEEK,{position:_position,offset:video.currentTime})}},seeked:function(){_this._in_seek=false;_this.trigger(jwe.JWPLAYER_MEDIA_SEEKED)},progress:function(){set_buffered(get_buffered(),_position,_duration)},timeupdate:function(){_duration=get_duration();_position=_duration<0?-(get_seekable_end()-video.currentTime):video.currentTime;set_buffered(get_buffered(),_position,_duration);if(_this.state=="playing"){_this.trigger(jwe.JWPLAYER_MEDIA_TIME,{position:_position,duration:_duration})}}};function wrap_gen(e){return function(){if(!_this.attached)return;video_listeners[e]()}}for(var e in video_listeners)video.addEventListener(e,wrap_gen(e),false);function get_levels(){var levels=[{bitrate:1,width:1,height:1,label:"Auto"}];hls.levels.forEach(function(level){levels.push({bitrate:level.bitrate,height:level.height,label:level.height+"p",width:level.width})});return levels}hls.on(window.Hls.Events.MANIFEST_LOADED,function(){if(hls.hola_adaptive)return;_this.trigger(jwe.JWPLAYER_MEDIA_LEVELS,{currentQuality:hls.autoLevelEnabled?0:hls.currentLevel+1,levels:get_levels()})});hls.on(window.Hls.Events.LEVEL_SWITCH,function(e,data){if(hls.hola_adaptive)return;_this.trigger(jwe.JWPLAYER_MEDIA_LEVEL_CHANGED,{currentQuality:hls.autoLevelEnabled?0:data.level+1,levels:get_levels()})});this.init=function(item){video.setAttribute("jw-loaded","init")};this.load=function(item){if(!this.attached)return;var newsource=get_default_src(item.sources).file;var video_state=video.getAttribute("jw-loaded");var hq=this.hls_queued;this.setState("loading");hq.seek=Math.max(item.starttime-(hq.rw_sec||0),0);if(this.hls_state!="ready"||(this.source||"")!=newsource||["init","started"].includes(video_state)){video.load();hls.stopLoad();hls_load(this.source=newsource);video.setAttribute("jw-loaded","init")}else hls_play()};this.play=function(){hls_play()};this.pause=function(){video.pause();_this.setState("paused")};this.stop=function(){hls.stopLoad();_this.setState("idle")};this.volume=function(vol){video.volume=Math.min(vol/100,1)};this.mute=function(state){video.muted=!!state};this.seek=function(pos){this._in_seek=true;if(this.hls_state=="ready"){var sv=video.currentTime;video.currentTime=pos;this.trigger(jwe.JWPLAYER_MEDIA_SEEK,{position:sv,offset:pos})}else this.hls_queued.seek=pos};this.resize=function(width,height,stretching){};this.remove=function(){this.in_container=false;hls.stopLoad();this.source=undefined;if(container===video.parentNode)container.removeChild(video)};this.destroy=function(){for(var e in video_listeners)video.removeEventListener(e,video_listeners[e],false);this.removeAllListeners()};this.setVisibility=function(state){container.style.visibility=state?"visible":"";container.style.opacity=state?1:0};this.setFullscreen=function(){return false};this.getFullscreen=empty_fn("getFullscreen");this.getContainer=function(){return container};this.setContainer=function(element){container=element;container.appendChild(video);this.in_container=true};this.setCurrentQuality=function(level){if(level==hls.currentLevel+1)return;hls.currentLevel=level-1;_this.trigger(jwe.JWPLAYER_MEDIA_LEVEL_CHANGED,{currentQuality:level,levels:get_levels()});this.setState("loading")};this.getName=function(){return{name:"dm/hls"}};this.get_position=function(){return video.currentTime};this.getQualityLevels=function(){return get_levels()};this.getCurrentQuality=function(){return hls.currentLevel+1};this.getAudioTracks=empty_fn("getAudioTracks");this.getCurrentAudioTrack=empty_fn("getCurrentAudioTrack");this.setCurrentAudioTrack=empty_fn("setCurrentAudioTrack");this.checkComplete=function(){return!!this.completed};this.setControls=empty_fn("setControls");this.attachMedia=function(){if(this.ad_count&&hls_params.debug)hls_params.debug.log("jwprovider attach inside ad "+this.ad_count);this.attached=true;hls.attachMedia(video);var video_state=video.getAttribute("jw-loaded");if(video_state&&!["init","started"].includes(video_state))this.setState("ready")};this.detachMedia=function(){hls.trigger(window.Hls.Events.BUFFER_RESET);hls.detachMedia();if(this.level_cb){hls.off(window.Hls.Events.LEVEL_LOADED,this.level_cb);this.level_cb=undefined}delete hls.bufferController.segments;this.attached=false;this.setState("paused");return video};this.setState=function(state){var oldState=this.state||"idle";this.state=state;if(state==oldState)return;this.trigger(jwe.JWPLAYER_PLAYER_STATE,{newstate:state})};this.sendMediaType=function(levels){var is_audio=["oga","aac","mp3","mpeg","vorbis"].includes(levels[0].type);this.trigger(jwe.JWPLAYER_MEDIA_TYPE,{mediaType:is_audio?"audio":"video"})}}E.getName=function(){return{name:"dm/hls"}};E.supports=function(src){return!E.disabled&&src.type=="hls"&&window.Hls&&window.Hls.isSupported()};E.register_cb=function(cb){callback=cb};return E}); define("/svc/cdn/pub/flv.js",["/util/string.js","/util/events.js","/util/util.js"],function(string,events,zutil){var E={};var tag_type={audio:8,video:9,script_data:18};var data_type={num:0,str:2,ecma_arr_len:8};E.frame_type={keyframe:1,interframe:2};E.codec_id={vp6:4,avc:7};E.avc_packet_type={seq_header:0,nalu:1,end:2};var aac_packet_type={seq_header:0,aac_raw:1};E.snd_format={mp3:2,aac:10};var snd_rate={"44khz":3};var snd_size={"16bit":1};var snd_type={stereo:1};var SCRIPTDATAOBJECTEND=9;function hex(c){return c.charCodeAt(0)}E.file_header=new Uint8Array([hex("F"),hex("L"),hex("V"),1,1,0,0,0,9,0,0,0,0]);function Encoder(){this.arrbufs=[]}function sbuf_source(sbuf){return sbuf.source||sbuf.mediaSource}Encoder.prototype.get_total_len=function(){var ret=0;this.arrbufs.forEach(function(arrbuf){ret+=arrbuf.byteLength});return ret};Encoder.prototype.get_arrbuf=function(){var ret,offset=0;ret=new Uint8Array(this.get_total_len());this.arrbufs.forEach(function(arrbuf){ret.set(arrbuf instanceof ArrayBuffer?new Uint8Array(arrbuf):arrbuf,offset);offset+=arrbuf.byteLength});return ret};Encoder.prototype.write=function(o){if(o instanceof Uint8Array||o instanceof ArrayBuffer){this.arrbufs.push(o);return}this.write_u16(o.length);this.arrbufs.push(new Uint8Array(string.to_array_buffer(o)))};Encoder.prototype.write_u8=function(val){this.write(new Uint8Array([val]))};Encoder.prototype.write_u16=function(val){var ab=new ArrayBuffer(2);var dv=new DataView(ab);dv.setUint16(0,val);this.write(ab)};Encoder.prototype.write_u24=function(val){var ab=new ArrayBuffer(3);var dv=new DataView(ab);dv.setUint8(0,(val&16711680)>>16);dv.setUint16(1,val&65535);this.write(ab)};Encoder.prototype.write_u32=function(val){var ab=new ArrayBuffer(4);var dv=new DataView(ab);dv.setUint32(0,val);this.write(ab)};Encoder.prototype.write_double=function(val){var ab=new ArrayBuffer(8);var dv=new DataView(ab);dv.setFloat64(0,val);this.write(ab)};Encoder.prototype.write_tag_head=function(opt){this.write_u8(opt.type);this.write_u24(opt.data_size);this.write_u24(opt.ts);this.write_u8(opt.ts_extended);this.write_u24(0)};var scriptdata_objs={onMetaData:data_type.ecma_arr_len,duration:data_type.num,width:data_type.num,height:data_type.num,videodatarate:data_type.num,framerate:data_type.num,audiocodecid:data_type.num,videocodecid:data_type.num,major_brand:data_type.str,minor_version:data_type.str,compatible_brands:data_type.str,encoder:data_type.str,filesize:data_type.num};E.build_scriptdata_tag=function(opt){var encoder=new Encoder;var data_size=1+3;var field,type;for(field in opt){type=scriptdata_objs[field];data_size+=2+field.length;data_size+=1;switch(type){case data_type.ecma_arr_len:data_size+=4;break;case data_type.num:data_size+=8;break;case data_type.str:data_size+=2+opt[field].length;break}}encoder.write_tag_head({type:tag_type.script_data,ts:0,ts_extended:0,data_size:data_size});encoder.write(new Uint8Array([2]));for(field in opt){type=scriptdata_objs[field];encoder.write(field);encoder.write_u8(type);switch(type){case data_type.ecma_arr_len:encoder.write_u32(opt[field]);break;case data_type.num:encoder.write_double(opt[field]);break;case data_type.str:encoder.write(opt[field]);break}}encoder.write_u24(SCRIPTDATAOBJECTEND);encoder.write_u32(encoder.get_total_len());return encoder.get_arrbuf()};E.build_media_tag=function(opt){var encoder=new Encoder;var data_size;var codec_id=opt.video?opt.video.codec_id:opt.audio.codec_id;if(opt.video)data_size=codec_id==E.codec_id.avc?5:1;else data_size=codec_id==E.snd_format.aac?2:1;if(opt.data instanceof Array)opt.data.forEach(function(arrbuf){data_size+=arrbuf.byteLength});else if(opt.data)data_size+=opt.data.byteLength;encoder.write_tag_head({type:opt.video?tag_type.video:tag_type.audio,ts:opt.ts,ts_extended:0,data_size:data_size});if(opt.video){encoder.write_u8((opt.video.frame_type<<4)+codec_id);if(codec_id==E.codec_id.avc){encoder.write_u8(opt.video.avc_packet_type);encoder.write_u24(opt.video.avc_composition_time)}}else{encoder.write_u8((codec_id<<4)+(snd_rate["44khz"]<<2)+(snd_size["16bit"]<<1)+snd_type.stereo);if(codec_id==E.snd_format.aac)encoder.write_u8(opt.audio.aac_packet_type)}if(opt.data){if(opt.data instanceof Array)opt.data.forEach(encoder.write.bind(encoder));else encoder.write(opt.data)}encoder.write_u32(encoder.get_total_len());return encoder.get_arrbuf()};function log_from_zone(zone){return zone.log_get().set_module("flv")}E.Appender=function(opt){this.bws=opt.bws;this.log=log_from_zone(this.bws.zone);this.samples_per_segment=opt.samples_per_segment;this.tracks_finish=0;this.parser=opt.parser};zutil.inherits(E.Appender,events.EventEmitter);E.Appender.prototype.serve=function(sbuf,data){if(this.flash_ms)return this.serve_flash_mediasource(sbuf,data);sbuf.appendBuffer(data)};E.Appender.prototype.serve_flash_mediasource=function(sbuf,data){if(!sbuf.buffer_.length)setTimeout(sbuf.processBuffer_.bind(sbuf),2);if(!data)return;sbuf.buffer_.push(data);sbuf.bufferSize_+=data.byteLength};E.Appender.prototype.serve_flv_header=function(sbuf){this.bws.player.discontinuity(sbuf);if(!this.bws.player.media_src.swfObj||!this.bws.player.media_src.swfObj.vjs_discontinuity){this.serve(sbuf,E.file_header)}};E.Appender.prototype.init_media=function(meta){if(this.inited)return;this.inited=true;this.src_bufs_map={};if(meta.audiocodecid!==undefined){this.on_src_track("audio",meta.audiocodecid==E.snd_format.mp3?"mp3":"mp4a")}if(meta.videocodecid!==undefined){this.on_src_track("video",meta.videocodecid==E.codec_id.vp6?"vp6":"avc1")}this.serve_flv_header(this.sbuf);this.serve(this.sbuf,E.build_scriptdata_tag({onMetaData:5,duration:meta.duration,width:meta.width,height:meta.height,audiocodecid:meta.audiocodecid,videocodecid:meta.videocodecid}));this._schedule_metaready()};E.Appender.prototype.append_sample_flv=function(e){var data=e.data,u8,codec_specific_data,data_offset;var dv=new DataView(data.buffer,data.byteOffset,data.byteLength);if(e.type==tag_type.audio){u8=dv.getUint8(0);var audio={fmt:(u8&240)>>4,rate:(u8&12)>>2,size:(u8&2)>>1,type:(u8&1)>>0};data_offset=audio.fmt==E.snd_format.aac?2:1;if(audio.fmt==E.snd_format.aac){if(audio.rate!=snd_rate["44khz"]||audio.size!=snd_size["16bit"]||audio.type!=snd_type.stereo){throw new Error("unexpected aac data")}var aac_pkt_type=dv.getUint8(1);if(aac_pkt_type==aac_packet_type.seq_header){codec_specific_data=data.subarray(data_offset);this.on_init_segment("audio",codec_specific_data,audio.fmt)}else{var raw_aac=data.subarray(data_offset);this.append_sample("audio",raw_aac,e.time,audio.fmt)}}else{var audio_data=data.subarray(data_offset);this.append_sample("audio",audio_data,e.time,audio.fmt)}}else if(e.type==tag_type.video){u8=dv.getUint8(0);var video={frame_type:(u8&240)>>4,codec_id:(u8&15)>>0};data_offset=video.codec_id==E.codec_id.avc?5:1;var is_keyframe=video.frame_type==E.frame_type.keyframe;if(video.codec_id==E.codec_id.avc){var avc_pkt_type=dv.getUint8(1);if(avc_pkt_type!=E.avc_packet_type.end){var composition_time=dv.getUint8(2)<<16|dv.getUint8(3)<<8|dv.getUint8(4);if(composition_time&1<<23)composition_time-=16777216;if(avc_pkt_type==E.avc_packet_type.seq_header){codec_specific_data=data.subarray(data_offset);this.on_init_segment("video",codec_specific_data,video.codec_id)}else{var avc_nals=data.subarray(data_offset);this.append_sample("video",avc_nals,e.time,video.codec_id,composition_time,is_keyframe)}}}else{var video_data=data.subarray(data_offset);this.append_sample("video",video_data,e.time,video.codec_id,0,is_keyframe)}}};E.Appender.prototype.init=function(mp4_info,mp4_init_segs,mp4_tracks){var _this=this;this.src_bufs_map={};this.mp4_tracks=mp4_tracks;var info=mp4_info;["audio","video"].forEach(function(type){if(!info[type+"Tracks"].length)return;info[type+"Tracks"].forEach(function(track){_this.on_src_track(track.id,track.codec,track.nb_samples)});if(!zutil.find(_this.src_bufs_map,function(v){return v.type===type})){throw new Error("cannot play "+type+" track")}});this.serve_flv_header(this.sbuf);this.serve(this.sbuf,E.build_scriptdata_tag({onMetaData:8,duration:info.duration/info.timescale,width:info.videoTracks[0].track_width,height:info.videoTracks[0].track_height,major_brand:info.brands[0],compatible_brands:info.brands.join(""),encoder:info.videoTracks[0].codec,audiocodecid:E.snd_format.aac,videocodecid:E.codec_id.avc}));this._schedule_metaready();mp4_init_segs.forEach(function(segment){var tr_id=segment.id;var tr_rec=_this.src_bufs_map[tr_id];if(!tr_rec)return;var codec=tr_rec.type=="video"?E.codec_id.avc:E.snd_format.aac;_this.on_init_segment(tr_id,_this.parser.get_spec_info(tr_id),codec)})};E.Appender.prototype.on_src_track=function(track_id,track_codec,track_nb_samples){var _this=this;var type="";if(track_codec.match(/^mp4a|mp3/))type="audio";else if(track_codec.match(/^avc|vp6/))type="video";if(!type)throw new Error('unsupported codec: "'+track_codec+'"');if(zutil.find(this.src_bufs_map,function(v){return v.type===type})){throw new Error("cannot have multiple "+type+" streams in flv")}var sbuf=this.sbuf;var player=this.bws.player;var flash_ms=player.media_src_api.FlashMediaSource;this.flash_ms=player.is_vjs5_new_hls&&player.tech=="flash"||flash_ms&&player.media_src instanceof flash_ms;if(!sbuf){sbuf=player.media_src.addSourceBuffer(this.flash_ms?"video/mp2t":"video/flv");sbuf.addEventListener("updateend",this.bws.fallback_wrapper(function(){if(window.debug_bw_saver)_this.log.debug("updateend");_this.bws.track_state()},"flv"));sbuf.addEventListener("error",function(err){var type=Object.prototype.toString.call(err).slice(8,-1);_this.bws.fallback("sourceBuffer error, type = "+type+" json = "+JSON.stringify(err),"flv")});sbuf.addEventListener("abort",function(){_this.log.debug("abort")});this.sbuf=sbuf}this.src_bufs_map[track_id]={id:track_id,sbuf:sbuf,codec:track_codec,type:type,nb_samples:track_nb_samples}};E.Appender.prototype.on_init_segment=function(track_id,codec_data,codec){var track_rec=this.src_bufs_map[track_id];if(!track_rec)return;var sbuf=track_rec.sbuf;var is_video_track=track_rec.type=="video";var tag={ts:0,data:codec_data};if(window.debug_bw_saver)this.log.debug("pushing init_seg");if(is_video_track){tag.video={avc_packet_type:E.avc_packet_type.seq_header,avc_composition_time:0,frame_type:E.frame_type.keyframe,codec_id:codec}}else{tag.audio={aac_packet_type:aac_packet_type.seq_header,codec_id:codec}}this.serve(sbuf,E.build_media_tag(tag))};E.Appender.prototype.append_sample=function(track_id,sample_data,sample_ts,codec,avc_composition_time,keyframe){var track_rec=this.src_bufs_map[track_id];if(!track_rec)return;var sbuf=track_rec.sbuf;var is_video_track=track_rec.type=="video";if(this.bws.pending_seek_sec){if(sample_ts=r.end){ext_log.notice("implicit obj_end assumed");break}var key=r_str(r),val=r_var(r);if(key==""&&val===obj_end)break;ret[key]=val}return ret}function r_ecma_array(r){r.pos+=4;return r_obj(r)}function r_strict_array(r){var len=r.b.getUint32(r.pos),ret=new Array(len);r.pos+=4;for(var i=0;i0&&completed>=fullsize)sbuf_source(this.media_appender.sbuf).readyState="ended";return completed};E.Parser.prototype.read=function(sz){if(!this._data.length||sz==0)return null;return this._data.shift()};E.Parser.prototype.write=function(buf){var _this=this;this._transform(buf,null,function(err,data){if(data)_this.push(data);if(err)throw err;_this.readable()})};E.Parser.prototype.push=function(data){this._data.push(data)};E.Parser.prototype._transform=function(input,encoding,done){var buf=new Uint8Array(this._buffer.byteLength+input.byteLength);buf.set(this._buffer,0);buf.set(new Uint8Array(input),this._buffer.byteLength);this._buffer=buf;var b=new DataView(buf.buffer,buf.byteOffset,buf.byteLength);var data,packet,footer;if(!this._got_header){if(b.byteLength<9)return done();this.version=b.getUint8(3);this.flags=b.getUint8(4);this.header_size=b.getUint32(5);var header={version:this.version,flags:this.flags,header_size:this.header_size};this.push({header:header});this._buffer=buf=buf.subarray(9);b=new DataView(buf.buffer,buf.byteOffset,buf.byteLength);this._next_footer=0;this._got_header=true}for(var o=0;o=0){if(b.byteLength0&×[index]>pos)index--;this._buffer=new Uint8Array(0);this._next_footer=-1;this.media_appender.seek();this.emit("seek_complete",{offset:this.keyframes.filepositions[index],time:times[index]})};E.Parser.prototype.init=function(){this.emit("open")};E.Parser.prototype.uninit=function(){this.media_appender.uninit()};E.Parser.prototype.readable=function(){for(var e;e=this.read();){if(!(e=e.packet))continue;if(e.type==18&&e.parsed&&e.parsed.onMetaData){this.media_appender.init_media(e.parsed.onMetaData);if(!this.meta_duration){this.meta_duration=e.parsed.onMetaData.duration;this.emit("meta_info",{start_hdr_sz:this.header_size,dur:this.meta_duration})}}else if(e.type==8||e.type==9)this.media_appender.append_sample_flv(e)}};E.t={Encoder:Encoder};return E}); define("/svc/cdn/pub/mp4.js",["/svc/cdn/pub/util.js","/util/util.js","/util/user_agent.js","/util/events.js","/svc/cdn/pub/log.js","/svc/cdn/pub/flv.js","mp4box","muxjs"],function(util,zutil,ua,events,_log,flv,mp4box,muxjs){var E={};function log_from_zone(zone){return zone.log_get().set_module("mp4")}E.Appender=function(opt){var _this=this;this.bws=opt.bws;this.log=log_from_zone(opt.bws.zone);this.CG=this.bws.zone.CG.bind(this.bws.zone);if((this.cache=this.CG("cdn.media.memory_cache_sec")>>0)&&!this.bws.memcache&&!opt.parser.use_mp4box){this.bws.memcache={data:[]}}this._on_serving_denied=function(){_this.serve_suspended=true};this._on_serving_allowed=function(){if(!_this.serve_suspended)return;_this.serve_suspended=false;if(_this.CG("cdn.media.serve_if_fast")){for(var map in _this.src_bufs_map)_this.serve(_this.src_bufs_map[map].sbuf,"serving_allowed")}};this.bws.on("serving_denied",this._on_serving_denied);this.bws.on("serving_allowed",this._on_serving_allowed)};zutil.inherits(E.Appender,events.EventEmitter);E.Appender.prototype.init=function(mp4_info,mp4_init_segs,mp4_tracks){var _this=this;var zperr=this.bws.zone.perr_get();this.avsync=[];this.save_dump=_log.settings.save_dump;this.src_bufs=[];this.threshold=this.CG("cdn.mse.threshold")>>0;this.src_bufs_map={};var tracks=mp4_info.tracks;tracks.forEach(function(track){_this.on_src_track(track.id,track.codec,track.nb_samples)});this._on_remove_sb=function(){_this.log.info("remove sb from MediaSource")};this.bws.player.media_src.sourceBuffers.addEventListener("removesourcebuffer",this._on_remove_sb);mp4_init_segs.forEach(function(segment){_this.on_init_segment(segment.id,segment.buffer)});this.emit("onmetaready");zperr({id:"bwsaver_all_codecs_supported_2"})};E.Appender.prototype.on_src_track=function(track_id,track_codec,track_nb_samples){var _this=this;var zperr=this.bws.zone.perr_get();var media_type=track_codec.startsWith("mp4a")?"audio":"video";var mime=media_type+'/mp4; codecs="'+track_codec+'"',sbuf;if(this.bws.player.media_src_api.isTypeSupported&&!this.bws.player.media_src_api.isTypeSupported(mime)){throw new Error("unsupported "+mime+" track")}var filter=this.CG("cdn_opts.mse.filter");if(filter&&!new RegExp(filter,"i").test(track_codec)){zperr({id:"mse_codec_unsupported",info:{codec:track_codec}});throw new Error("unsupported "+track_codec+" codec")}var media_src=this.bws.player.media_src;sbuf=media_src.addSourceBuffer(mime);sbuf.media_src=media_src;this.src_bufs.push(sbuf);this.src_bufs_map[track_id]={id:track_id,sbuf:sbuf,codec:track_codec,type:media_type};sbuf.chunkq=[];sbuf.track_id=track_id;sbuf.track_codec=track_codec;sbuf.addEventListener("updatestart",function(){_this.log.debug("["+track_id+", "+track_codec+"] updatestart")});var on_updateend=this.bws.fallback_wrapper(function(){_this.log.debug("["+track_id+", "+track_codec+"] updateend, "+"queue size = "+sbuf.chunkq.length);if(sbuf.sn==track_nb_samples-1)return void _this.check_ended(sbuf);_this.serve(sbuf,"updateend");_this.bws.track_state("updateend")},"html5");sbuf.addEventListener("updateend",on_updateend);sbuf.addEventListener("error",function(err){if(_this.bws.parser&&_this.bws.parser.req_hist){zperr({id:"sourcebuffer_error",info:{reqhist:_this.bws.parser.req_hist},add_log:true})}_this.bws.fallback("sourceBuffer error, codec = "+err.target.track_codec,"mp4")});sbuf.addEventListener("abort",function(){_this.log.debug("abort")});this.serve(sbuf,"on_src_track")};E.Appender.prototype.on_init_segment=function(track_id,mp4_buf){this.append_samples(track_id,mp4_buf,true,{init:true})};E.Appender.prototype.append_samples=function(track_id,buf,wait,opt){opt=opt||{};var cache=this.cache&&this.bws.memcache&&this.bws.memcache.data;if(cache&&(opt.init||opt.time<=this.cache))cache.push({id:track_id,buffer:buf,init:opt.init});var track_rec=this.src_bufs_map[track_id];if(!track_rec)return;var sbuf=track_rec.sbuf;this.log.debug("["+track_id+", "+sbuf.track_codec+"] append_segment, "+"size = "+buf.byteLength);if(this.save_dump=="network")this.bws.dump_chunk(track_id,buf,buf.byteLength);sbuf.chunkq.push(buf);if(opt.time){this["last_"+this.src_bufs_map[track_id].type]=opt.time;if(this.last_video&&this.last_audio)this.avsync.push(Math.abs(this.last_video-this.last_audio))}if(!wait)this.serve(sbuf,"append_samples")};E.Appender.prototype.clear_buffers=function(){this.log.debug("clear_buffers");if(this.src_bufs)this.src_bufs.forEach(function(sbuf){sbuf.chunkq=[]})};E.Appender.prototype.calc_chunkq_bytes=function(){if(!this.src_bufs)return 0;var bytes=0;this.src_bufs.forEach(function(sbuf){sbuf.chunkq.forEach(function(chunk){bytes+=chunk.byteLength})});return bytes};E.Appender.prototype.check_ended=function(sbuf){var media_src=sbuf.media_src,seq=media_src.seq;var map=this.src_bufs_map;sbuf.ended=seq;if(!Object.keys(map).every(function(track_id){var track=map[track_id];return track.type!="audio"&&track.type!="video"||track.sbuf.ended==seq&&!track.sbuf.updating})){return}media_src.ended=seq};E.Appender.prototype.serve=function(sbuf,caller){if(sbuf.updating||sbuf.media_src.readyState=="closed"||this.serve_suspended&&this.CG("cdn.media.serve_if_fast")||sbuf.media_src.sourceBuffers&&!sbuf.media_src.sourceBuffers.length){return}for(;;){var chunks=[],total_len=0,i;for(i=0;i.01;i++)seek_info=this._parser.seek(seek_info.time-.01,false);_seek_sec=seek_info.time}else _seek_sec=seek_info.time+this.s_delay;this.emit("abort");if(this._seek_timer!==undefined)clearTimeout(this._seek_timer);this._seek_timer=setTimeout(function(){_this._seek_timer=undefined;_this._seek_sec=_seek_sec;_this.emit("seek_player_set",_seek_sec*1e3)},10)};E.Parser.prototype.ofs2time=function(offset){var t_i=this.t_info&&this.t_info[this.v_id];if(!t_i)return(offset-this.start_hdr_sz)*8/this.meta_bitrate;var l=0,r=t_i.offset.length;while(l>1;if(t_i.offset[m]>1;if(t_i.time[m]>16;var flags=b[p+2],key=(flags&128)>>7,lace=(flags&6)>>1;if(lace)unsupported("lacing");return{id:t_num[0],key:key,tc:tc,tc_pos:t_num[1],flags:flags}}function ebml_read_num(b,pos){if(b.byteLength<=pos)return;var b0=b[pos],n=b0>=128?1:b0>=64?2:b0>=32?3:b0>=16?4:b0>=8?5:b0>=4?6:b0>=2?7:b0>=1?8:9;if(b.byteLength16777215?4:id>65535?3:id>255?2:1}function get_sz_size(sz){for(var i=1;sz>Math.pow(2,7*i)-2;i++);if(i>4)unsupported("sz>4");return i}function get_u_size(u){for(var i=1;u>=Math.pow(2,8*i);i++);if(i>4)unsupported("sz>4");return i}function r_create(b,o,e){return{b:b,o:o||0,e:Math.min(b.byteLength,e||b.byteLength)}}function r_dup(r){return r&&{b:r.b,o:r.o,e:r.e}}function r_read_id(r){var id=ebml_read_num(r.b,r.o);return id?(r.o+=id[1],id[0]|1<<7*id[1]):0}function r_read_sz(r){var s=ebml_read_num(r.b,r.o);return s?(r.o+=s[1],s[0]==Math.pow(2,7*s[1])-1?-1:s[0]):0}function r_seek_to(r,id){if(!r)return;for(var sz,o=r.o;;){if(r_read_id(r)==id)return r.o;if((sz=r_read_sz(r))<=0||(r.o+=sz)>r.e)break}r.o=o}function r_get_next(r,id){for(;r&&r.o0&&e<=r.e){if(!id||i==id)return{b:r.b,o:r.o,e:r.o=e,o0:o,id:i};r.o=e}else{r.o=o;break}}}function r_get(r,id){return r_get_next(r_dup(r),id)}function r_read_u(r){return read_uint(r.b,r.o,r.e-r.o)}function r_read_f(r){return read_float(r.b,r.o,r.e-r.o)}function r_read_s(r){return read_str(r.b,r.o,r.e-r.o)}function r_read_b(r){return r.b.subarray(r.o,r.e)}function r_write_id(r,id){for(var i=24;!(id>>i);i-=8);for(;i>=0;i-=8)r.b[r.o++]=id>>i&255}function r_write_sz(r,sz){var len=get_sz_size(sz)-1;r.b[r.o++]=1<<7-len|sz>>len*8&255;for(var i=len-1;i>=0;i--)r.b[r.o++]=sz>>i*8&255}function r_write_u(r,el){for(var i=el_data_sz(el)-1,u=el.v;i>=0;i--)r.b[r.o++]=u>>i*8&255}function r_write_f(r,el){var v=new DataView(r.b.buffer,r.o,8);v.setFloat64(0,el.v);r.o+=8}function r_write_s(r,el){for(var s=el.v,i=0;i>8&255;r.b[r.o+el.tc_pos+1]=el.sb_tc&255;r.o+=el.v.byteLength}function el_serialize(el){var r=r_create(new Uint8Array(el_size(el)));r_write_el(r,el);return r.b}var T_u=0,T_s=1,T_f=2,T_b=3,T_m=4,T_sb=5;var r_write_ff=[r_write_u,r_write_s,r_write_f,r_write_b,r_write_m,r_write_sb];function r_write_data(r,el){r_write_ff[el.t](r,el)}function r_write_el(r,el){r_write_id(r,el.id);r_write_sz(r,el_data_sz(el));r_write_data(r,el)}function el_u(id,v){return{id:id,v:v,t:T_u}}function el_s(id,v){return{id:id,v:v,t:T_s}}function el_f(id,v){return{id:id,v:v,t:T_f}}function el_b(id,v){return{id:id,v:v,t:T_b}}function el_m(id,v){return{id:id,v:v,t:T_m}}function el_size(el){return el.sz||(el.sz=el_id_sz(el)+el_data_sz(el)+get_sz_size(el.v_sz))}function el_id_sz(el){return el.id_sz||(el.id_sz=get_id_size(el.id))}var r_size_ff=[get_u_size,function(s){return s.length},function(){return 8},function(b){return b.byteLength},function(m){for(var i=0,sz=0;i0)seg.end=seg.pos0+seg.sz;var r_tracks=r_get(r,TRACKS_ID),r_info=r_get(r,INFO_ID);if(!r_tracks||!r_info)unsupported("tracks or info after clusters");var rtcs=r_get(r_info,TCS_ID),rdur=r_get(r_info,DUR_ID);var tcs=rtcs?r_read_u(rtcs):1e6,dur=rdur?r_read_f(rdur):0;var info=[el_u(TCS_ID,tcs)],media_info=[],media_init_segs=[];if(dur>0)info.push(el_f(DUR_ID,dur));seg.tcs=tcs;seg.dur=dur;var app="h-cdn.com",MUX_ID=19840,APP_ID=22337;info.push(el_s(MUX_ID,app),el_s(APP_ID,app));info=el_m(INFO_ID,info);ebml=el_b(EBML_ID,r_read_b(ebml));for(var r_track;r_track=r_get_next(r_tracks,174);){var track=el_b(174,r_read_b(r_track));var num=r_read_u(r_get(r_track,215));var type=r_read_u(r_get(r_track,131));var codec_id=r_read_s(r_get(r_track,134));var header={id:num,duration:this.to_sec(dur),codec:codec_id.match(/[A-Z]_([ -~]+)/)[1].toLowerCase()};if(type==1){if(this.video)unsupported("multiple video");this.video={id:num,info:header};var video=r_get(r_track,224);header.type="video";header.width=r_read_u(r_get(video,176));header.height=r_read_u(r_get(video,186))}else if(type==2){if(this.audio)unsupported("multiple audio");this.audio={id:num,info:header};var audio=r_get(r_track,225);header.type="audio";header.freq=r_read_f(r_get(audio,181));header.chans=r_read_u(r_get(audio,159))}else unsupported("type="+type);var s1=el_m(SEG_ID,[info,el_m(TRACKS_ID,[track])]);var r1=r_create(new Uint8Array(el_size(ebml)+5+el_data_sz(s1)));r_write_el(r1,ebml);r_write_id(r1,s1.id);r_write_sz(r1,-1);r_write_data(r1,s1);header.init_seg=r1.b;media_info.push(header);media_init_segs.push({id:header.id,duration:0,timestamp:0,data:r1.b,init_seg:1})}r=r_create(r.b,seg.pos0);this._read_seekhead(r_get(r,SEEKHEAD_ID));this._read_cues(r_get(r,CUES_ID));this.push({info:media_info});for(var i=0;i0&&this.to_sec(Math.abs(end_time-dur))this.cluster_end)r.e=this.cluster_end;for(var el,sb,r_sb;r_sb=r_get_next(r);el=0){if(r_sb.id==160){for(var r_b;r_b=r_get_next(r_sb);){if(r_b.id==142)unsupported("slices");else if(r_b.id==161&&el)unsupported("2+ blocks");else if(r_b.id==161)el=el_b(163,r_read_b(r_b))}}else if(r_sb.id==163)el=el_b(163,r_read_b(r_sb));else continue;sb=read_simpleblock2(el.v);sb.el=el;sb.t=this.cluster_tc+sb.tc;this._handle_block(sb)}this.cluster_pos=r.o;if(r.e=this.segment.end-this._buffer_offset)this._eos();break}this.cluster_pos=next_cluster_pos;this.cluster_end=undefined}};E.Parser.prototype._dup_blocks=function(){for(var n=0,b=this._buffer_x.buffer;n<2;n++){var m=n?this.audio:this.video,c=m&&m.cluster;for(var i=0;c&&i4){buf=buf.subarray(this.cluster_pos-4);if(this.cluster_end)this.cluster_end-=this.cluster_pos-4;this._buffer_offset=this._buffer_offset+this.cluster_pos-4;this.cluster_pos=4}var new_sz=buf.byteLength+input.byteLength,buf_off;if(new_sz>x_sz)this._buffer_x=x=new Uint8Array((new_sz>>23)+1<<23);else if(buf.byteOffset+new_sz>x_sz)this._dup_blocks();else buf_off=buf.byteOffset;if(buf_off===undefined)x.set(buf,buf_off=0);x.set(new Uint8Array(input),buf_off+buf.byteLength);this._buffer=x.subarray(buf_off,buf_off+new_sz)};E.Parser.prototype._transform=function(input,encoding,done){if(!input){this._eos();return done()}this._append_buf(input);if(this.seek_cues){this._read_cues(r_get(r_create(this._buffer),CUES_ID));if(this.segment.cues.index.length){this.seek_cues=false;var seek_info=this.get_seek_info(this.seek_pos);if(seek_info.time!=this.seek_pos)this.emit("seek_player_set",seek_info.time*1e3)}return}if(this.cluster_pos===undefined){this._read_header();if(this.cluster_pos!==undefined){if(!this.audio||!this.video)unsupported("audio+video required");done()}}if(this.cluster_pos!==undefined)this._read_blocks();return done()};E.Parser.prototype.seek=function(pos){this.media_appender.seek();this.emit("seek_complete",this.get_seek_info(pos))};E.Parser.prototype.get_seek_info=function(pos){var seg=this.segment;this._buffer=new Uint8Array(0);this._data=[];this.audio.cluster=this.video.cluster=this.audio_flush=null;if(!seg.cues.index.length){this.log.info("segment cues should be before clusters");var cues_pos=seg.seekhead[CUES_ID];if(cues_pos===undefined)throw new Error("cannot seek to pos:"+pos);this.seek_pos=pos;this.seek_cues=true;this._buffer_offset=seg.pos0+cues_pos;return{time:pos,offset:seg.pos0+cues_pos}}var t=this.from_sec(pos),cue=sorted_index(seg.cues.index,t);if(cue==seg.cues.index.length)cue--;var cue_time=seg.cues.index[cue];if(cue>0&&this.to_sec(cue_time-t)>.1)cue_time=seg.cues.index[--cue];var new_pos=this.to_sec(cue_time);cue=seg.cues[cue_time];this._buffer_offset=cue[this.video.id].cluster+seg.pos0;this.cluster_pos=4;this.cluster_end=0;return{time:new_pos,offset:this._buffer_offset}};E.Parser.prototype.readable=function(){if(this.cluster_0>0)this.vid_hdr_sz=this.cluster_0;for(var e;e=this.read();){if(e.info){this.meta_duration=e.info[0].duration;this.media_appender.init(e.info)}else this.media_appender.append_samples(e.id,e.data,false,e)}if(!this.meta_info_sent&&this.vid_hdr_sz&&this.meta_duration){this.emit("meta_info",{start_hdr_sz:this.vid_hdr_sz,dur:this.meta_duration});this.meta_info_sent=true}};E.Parser.prototype.append_buffer=function(data){this.write(new Uint8Array(data));return data.fileStart+data.byteLength};return E}); define("/svc/cdn/pub/wrapper.js",["cash","/util/es6_shim.js","/util/util.js","/svc/cdn/pub/util.js","/svc/cdn/pub/flashls.js","/svc/cdn/pub/zjwplayer3.js","/util/url.js","/svc/cdn/pub/vjs.js","/svc/cdn/pub/html5.js","/svc/cdn/pub/osmf.js","/svc/cdn/pub/android.js","/svc/cdn/pub/dailymotion.js","/util/rand.js","/svc/cdn/pub/dash.js","/svc/cdn/pub/youtube.js","/svc/cdn/pub/zone.js","/util/events.js","/svc/cdn/pub/shaka.js","/util/zerr.js","filesaver","/svc/cdn/pub/flowplayer.js","/svc/cdn/pub/mode.js","/svc/cdn/pub/load_perf.js","/svc/cdn/pub/hola_adaptive.js","/svc/cdn/pub/ios.js","/svc/cdn/pub/hola_vjs.js","/svc/cdn/pub/buffer_monitor.js","/svc/cdn/pub/jwplayer_hls_provider.js","/svc/cdn/pub/flv.js","/svc/cdn/pub/mp4.js","/svc/cdn/pub/webm.js"],function($,shim,zutil,util,flashls,zjwplayer,zurl,vjs,html5,osmf,android,dailymotion,rand,dash,youtube,_zone,events,shaka,zerr,filesaver,flowplayer,mode,load_perf,hola_adaptive,ios,hola_vjs,buffer_monitor,jwplayer_hls_provider,flv,mp4,webm){var assign=Object.assign;var try_wrapper_n=0,try_wrapper_err;function try_wrapper(opt,func,ctx){opt=opt||{};if(typeof opt=="function"){ctx=func;func=opt;opt={}}var perr_id=opt.report?"bwsaver_report_sent_err":"wrapper_typeerror";var _this=ctx||this;var wrapped_func=function(){try{try_wrapper_n++;return func.apply(this,arguments)}catch(err){var zperr=this.zone.perr_get();try{var need_perr=!try_wrapper_err&&!err.try_wrapper;try_wrapper_err=true;if(need_perr){zperr({id:perr_id,err:""+err.message,bt:err.stack,use_beacon:true});this.log.err("detach, wrapper typeerror "+(err.stack||err));if(this.attached)this.detach({err:"typeerror",restore:true});err.try_wrapper=true}}catch(err2){console.error("try_wrapper first err",err);console.error("try_wrapper second err",err2);zperr({id:"wrapper_try_"+perr_id,err:""+err2.message,bt:err2.stack})}if(opt.can_throw)throw err}finally{try_wrapper_n--;if(!try_wrapper_n)try_wrapper_err=false}};return opt.method?wrapped_func:wrapped_func.bind(_this)}function copy_opt_fields(target,src,fields){if(!src)return;fields.forEach(function(name){if(src[name]!==undefined)target[name]=src[name]})}function define_ext(name,obj){if(!obj||require.specified(name))return;this.log.notice("reusing external library "+name);define(name,function(){return obj})}zutil.inherits(Wrapper,events.EventEmitter);Wrapper.prototype.send_report=try_wrapper({report:true,method:true},function(opt){opt=opt||{};var zperr=this.zone.perr_get(),cdn=opt.cdn||this.cdn,info;var bws=cdn.attached_bws;if(!bws&&!cdn.attached_stats)return;this.loader.emit("wrapper_send_report");if(bws)bws.emit("wrapper_send_report");if(zutil.is_mocha())return;cdn.send_stats_debug();var stats=cdn.attached_stats.get_stats_all();this.log.notice("sending stats attached_bws "+!!bws);this.last_stats=bws?{stats:stats,stats_debug:bws.stats_debug_sent}:{stats:stats};info={only_stats:!bws||this.in_fallback,err:opt.err};if(this.CG("kw.ads_only")&&this.stash.length){info.context_mode=this.stash[0].mode;info.context_attached=!!this.stash[0].cdn.attached_stats}if(bws&&bws.player&&bws.player.flash_api&&bws.player.flash_api.avail_version()){info.swf_version=bws.player.flash_api.version()}if(bws&&bws.player&&bws.player.name=="hola"&&window.videojs)info.hola_player_version=window.videojs.VERSION;if(bws&&bws.method)info.bws_method=bws.method.type;var extra=zutil.clone_deep(stats);delete extra.player.stat;zperr({id:"bwsaver_report",info:info,extra:extra,use_beacon:true});if(bws){util.log_report({id:"log",cdn:cdn,stats:stats,add_unittest:bws.CG("util.log.report.end.unittest"),add_log:bws.CG("util.log.report.end.add_log"),load_perf:this.CG("util.log.report.load_perf")&&load_perf.enabled()&&load_perf.timeline_to_str(bws.zone)})}});Wrapper.prototype.uninit_prev=function(opt){opt=opt||{};opt.cdn=opt.cdn||this.cdn;if(!opt.cdn.attached_bws&&!opt.cdn.attached_stats)return;var zperr=this.zone.perr_get();this.send_report(opt);if(opt.cdn.attached_bws)opt.cdn.detach_bw_saver();if(opt.cdn.attached_problem_reporter)opt.cdn.detach_problem_reporter();if(opt.cdn.attached_stats){opt.cdn.attached_stats.uninit();opt.cdn.attached_stats=undefined}if(opt.err){zperr({id:"wrapper_uninit_prev_error",info:{attached_bws:1,error:""+opt.err}})}else zperr({id:"wrapper_uninit_prev",info:{attached_bws:1}})};Wrapper.prototype.verify_attached=function(is_attached){if(!!this.attached!=!!is_attached)return false;var zperr=this.zone.perr_get();var s=is_attached?"already":"not";this.log.err("wrapper.js "+s+" attached to player");zperr({id:"wrapper_"+s+"_attached"});return-1};Wrapper.prototype.is_proxy=function(){return this.CG("cdn.video_proxy")||this.fallback_to_proxy};Wrapper.prototype.check_skip_video=function(opt){opt=opt||{};var _this=this;if(util.is_blob_url(this.video_url)){this.log.err("media source url found instead of real video url: "+"probably html5 module not detected");return"video url not detected"}if(!util.video_format_is_enabled(this.zone,this.video_url))return"video format unsupported";if(/BingPreview\/\d+\.\d+/.test(navigator.userAgent||""))return"bing preview";if(!util.origin_is_allowed_url(this.video_url,this.CG("agent.origins")))return"origin is not allowed";if(this.player.tech=="html5"&&!window.MediaSource&&!this.is_proxy())return"mse unavailable";var e={};this.player.emit("wrapper.check_skip_video",e);return e.skip};Wrapper.prototype.zone_init=function(opt){function init_zone_info(){_this.adaptive=_this.zone.get_adaptive_type(_this.video_url);_this.method=!_this.adaptive?"progressive":_this.adaptive=="hls"&&hola_adaptive.supported(_this.player)?"hap_hls":_this.adaptive;_this.zone.info.video_url=_this.video_url;_this.zone.info.video_type=_this.video_type;_this.zone.info.method=_this.method}var _this=this;var zperr=this.zone.perr_get();opt=opt||{};opt.video_url=opt.video_url?util.absolute_uri(opt.video_url):this.video_url;function early_init_check(){if(opt.is_early)_this.early_init_done={video_url:opt.video_url};else if(_this.early_init_done){var url_changed;if(url_changed=_this.early_init_done.video_url!=_this.video_url)zperr({id:"zone_early_init_failure",delay:true});delete _this.early_init_done;return url_changed}return true}init_zone_info();if(!early_init_check())return;this.zone.uninit();this.video_check_n=(this.video_check_n||0)+1;if(this.video_check_n>1)this.log.reset_logs();this.zone.zone_init({video_url:opt.video_url,force_zone:this.fallback_to_proxy,player_n:this.player_n,video_check_n:this.video_check_n,player:this.player||{tech:undefined}});if(this.player)this.zone.info.player_info=this.player.name+"/"+this.player.tech;init_zone_info();var m=mode.select_mode({location:this.loader.jtest.location,video_url:opt.video_url,CG:this.CG.bind(this.zone)});this.CS("mode",m.mode);this.log.notice("using zone "+this.zone.name+" mode "+m.mode+(m.disabled_reason?" ("+m.disabled_reason+")":""));zperr({id:"zone_init",delay:this.loader.init_delay,info:{disabled_reason:m.disabled_reason,video_url:opt.video_url}})};Wrapper.prototype.replace_cdn=function(to){var cdn_index=this.loader.cdn.indexOf(this.cdn);this.cdn=this.loader.cdn[cdn_index]=to};Wrapper.prototype.save_context=function(){if(!this.video_url||this.CG("kw.ads_only")||this.player.tech!="html5"||!this.zone.is_progressive_link(this.player.get_url())&&!(this.method=="hap_hls"&&this.player.name=="jwplayer")){return}this.log.notice("saving interrupted context for "+this.video_url);this.cdn.suspend(true);this.stash.push({mode:this.zone.CG("mode"),video_url:this.video_url,cdn:this.cdn,zone_restore:this.zone.stash(),player_restore:this.player.stash&&this.player.stash(),log_restore:this.log.stash()});if(0)this.zone.uninit();var new_cdn=new this.loader.cdn_svc({zone:this.zone});if(this.CG("send_suspends_info")&&this.cdn.attached_stats){this.cdn.attached_stats.stats.suspends.push({suspended_by:{id:new_cdn.id,url:"unknown"},pos:this.player.get_pos()})}this.replace_cdn(new_cdn)};Wrapper.prototype.restore_context=function(){var stash,url=this.video_url;if(!(stash=this.stash.find(function(s){return s.video_url==url})))return;this.stash.splice(this.stash.indexOf(stash),1);stash.log_restore();stash.zone_restore();if(stash.player_restore)stash.player_restore();this.replace_cdn(stash.cdn);this.player.emit("wrapper.zone_init");this.cdn.suspend(false);this.log.notice("using zone "+this.zone.name+" mode "+this.CG("mode"));this.log.notice("restoring context for "+this.video_url);return true};Wrapper.prototype.uninit_saved_context=function(){this.stash.forEach(function(s){if(!s.cdn.attached_bws&&!s.cdn.attached_stats)return;s.log_restore();this.log.notice("shutting down suspended context for "+s.video_url);s.zone_restore();this.uninit_prev({cdn:s.cdn})},this);this.stash=[]};function set_player_info(player,o){try{var container=player.get_container();if(!container)return;container.hola_info=o}catch(err){}}Wrapper.prototype.attach=try_wrapper({method:true},function(_loader,_opt){load_perf.push("wrapper_attach_start",this.zone);var _this=this;var zperr=this.zone.perr_get();this.loader=_loader;this.cdn=new _loader.cdn_svc({zone:this.zone});this.stash=[];this.loader.cdn.push(this.cdn);this.zstats=this.loader.stats;var opt={player_obj:_opt.player_obj,graph:_opt.cdn_opts.graph,cdns:_opt.cdns};if(this.verify_attached(true))return;this.attached=true;zperr({id:"wrapper_attach",delay:this.loader.init_delay});var player=this.player=opt.player_obj;player.extensions={buffer_monitor:new buffer_monitor.PlayerExtension(player)};this.zone.info.player_info=player.name+"/"+player.tech;this.log.notice("wrapper attached to player "+player.name+" "+player.tech);function is_late_attach(){return!player.is_late_attach||player.is_late_attach()}function attach_to_player(o){load_perf.push("wrapper_attach_to_player_start",_this.zone);_this.last_stats=undefined;_this.uninit_prev();o=o||{};_this.video_url=util.absolute_uri(o.url||player.get_url());_this.video_type=player.get_video_type();set_player_info(player,undefined);if(!_this.video_url)return zperr({id:"wrapper_attach_to_player_no_url"});if(_this.restore_context())return zperr({id:"wrapper_restore_cdn_context"});_this.zone_init();player.emit("wrapper.zone_init");var m=_this.CG("mode");var only_stats=m=="stats";zperr({id:"wrapper_video_check",delay:_this.loader.init_delay,info:only_stats?{attached_stats:1}:{attached_bws:1}});if(m=="disabled"){return _this.log.notice("hola skip "+_this.video_url+" (mode disabled)")}if(!only_stats&&_this.is_proxy()&&!util.is_proxy_url(_this.video_url)){_this.log.notice("skip attach - not proxy url %s %s",_this.zone.name,_this.video_url);zperr({id:"wrapper_skip_attach_not_proxy_url",add_log:true});return}var skip_reason=!only_stats&&_this.check_skip_video({mode:m});if(skip_reason){_this.loader.emit("wrapper_skip_video",{url:_this.video_url});_this.log.notice("hola skip "+_this.video_url+" ("+skip_reason+") -> default to stats");var src_info;zperr({id:"wrapper_video_skip",info:{reason:skip_reason,opt_url:o.url,player_url:player.get_url(),src_info:src_info},add_log:_this.CG("util.log.report.hola_skip")});m=_this.CS("mode","stats");only_stats=m=="stats"}set_player_info(player,{zone:_this.zone.name,mode:m,video_url:_this.video_url});if(o.init_not_idle&&is_late_attach()){var send_attach_perr=function(id,extra){zperr({id:id,add_log:true,info:assign({video_url:_this.video_url,pos:player.get_pos(),duration:player.get_duration(),adaptive:_this.adaptive,is_paused:player.is_paused()},extra||{})})};if(_this.CG("player.disallow_late_attach")){_this.log.notice("skip video, disallow late attach");send_attach_perr("wrapper_attach_to_player_not_idle_disallow");return}if(_this.adaptive||player.is_paused())send_attach_perr("wrapper_attach_to_player_not_idle");else{var frames=player.get_decoded_frames();var is_below=function(f,m){return isFinite(m)?f