@srgssr/pillarbox-web 1.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/LICENSE +21 -0
  2. package/dist/pillarbox-core.cjs.js +307 -0
  3. package/dist/pillarbox-core.cjs.min.js +2 -0
  4. package/dist/pillarbox-core.cjs.min.js.map +1 -0
  5. package/dist/pillarbox-core.es.js +305 -0
  6. package/dist/pillarbox-core.es.min.js +2 -0
  7. package/dist/pillarbox-core.es.min.js.map +1 -0
  8. package/dist/pillarbox-core.umd.js +68327 -0
  9. package/dist/pillarbox-core.umd.min.js +35 -0
  10. package/dist/pillarbox-core.umd.min.js.map +1 -0
  11. package/dist/pillarbox.cjs.js +3571 -0
  12. package/dist/pillarbox.cjs.min.js +2 -0
  13. package/dist/pillarbox.cjs.min.js.map +1 -0
  14. package/dist/pillarbox.es.js +3569 -0
  15. package/dist/pillarbox.es.min.js +2 -0
  16. package/dist/pillarbox.es.min.js.map +1 -0
  17. package/dist/pillarbox.min.css +1 -0
  18. package/dist/pillarbox.min.css.map +1 -0
  19. package/dist/pillarbox.umd.js +71591 -0
  20. package/dist/pillarbox.umd.min.js +35 -0
  21. package/dist/pillarbox.umd.min.js.map +1 -0
  22. package/dist/types/build.es.d.ts +5 -0
  23. package/dist/types/build.es.d.ts.map +1 -0
  24. package/dist/types/src/analytics/SRGAnalytics.d.ts +414 -0
  25. package/dist/types/src/analytics/SRGAnalytics.d.ts.map +1 -0
  26. package/dist/types/src/components/player.d.ts +116 -0
  27. package/dist/types/src/components/player.d.ts.map +1 -0
  28. package/dist/types/src/components/typedef.d.ts +14 -0
  29. package/dist/types/src/components/typedef.d.ts.map +1 -0
  30. package/dist/types/src/dataProvider/model/MediaComposition.d.ts +154 -0
  31. package/dist/types/src/dataProvider/model/MediaComposition.d.ts.map +1 -0
  32. package/dist/types/src/dataProvider/model/typedef.d.ts +1485 -0
  33. package/dist/types/src/dataProvider/model/typedef.d.ts.map +1 -0
  34. package/dist/types/src/dataProvider/services/DataProvider.d.ts +40 -0
  35. package/dist/types/src/dataProvider/services/DataProvider.d.ts.map +1 -0
  36. package/dist/types/src/lang/de.d.ts +2 -0
  37. package/dist/types/src/lang/de.d.ts.map +1 -0
  38. package/dist/types/src/lang/en.d.ts +2 -0
  39. package/dist/types/src/lang/en.d.ts.map +1 -0
  40. package/dist/types/src/lang/fr.d.ts +2 -0
  41. package/dist/types/src/lang/fr.d.ts.map +1 -0
  42. package/dist/types/src/lang/it.d.ts +2 -0
  43. package/dist/types/src/lang/it.d.ts.map +1 -0
  44. package/dist/types/src/lang/rm.d.ts +2 -0
  45. package/dist/types/src/lang/rm.d.ts.map +1 -0
  46. package/dist/types/src/middleware/srgssr.d.ts +271 -0
  47. package/dist/types/src/middleware/srgssr.d.ts.map +1 -0
  48. package/dist/types/src/middleware/typedef.d.ts +67 -0
  49. package/dist/types/src/middleware/typedef.d.ts.map +1 -0
  50. package/dist/types/src/pillarbox.d.ts +11 -0
  51. package/dist/types/src/pillarbox.d.ts.map +1 -0
  52. package/dist/types/src/utils/AkamaiTokenService.d.ts +73 -0
  53. package/dist/types/src/utils/AkamaiTokenService.d.ts.map +1 -0
  54. package/dist/types/src/utils/Drm.d.ts +31 -0
  55. package/dist/types/src/utils/Drm.d.ts.map +1 -0
  56. package/dist/types/src/utils/Image.d.ts +33 -0
  57. package/dist/types/src/utils/Image.d.ts.map +1 -0
  58. package/dist/types/src/utils/PlayerEvents.d.ts +177 -0
  59. package/dist/types/src/utils/PlayerEvents.d.ts.map +1 -0
  60. package/dist/types/src/utils/typedef.d.ts +17 -0
  61. package/dist/types/src/utils/typedef.d.ts.map +1 -0
  62. package/package.json +109 -0
  63. package/scss/components/_big-play.scss +30 -0
  64. package/scss/components/_captions-settings.scss +71 -0
  65. package/scss/components/_control-bar.scss +15 -0
  66. package/scss/components/_control-spacer.scss +9 -0
  67. package/scss/components/_control.scss +8 -0
  68. package/scss/components/_error.scss +10 -0
  69. package/scss/components/_layout.scss +63 -0
  70. package/scss/components/_loading.scss +34 -0
  71. package/scss/components/_progress.scss +70 -0
  72. package/scss/components/_slider.scss +9 -0
  73. package/scss/components/_text-track.scss +8 -0
  74. package/scss/components/_time.scss +29 -0
  75. package/scss/components/_title-bar.scss +9 -0
  76. package/scss/components/_volume.scss +16 -0
  77. package/scss/components/menu/_menu-popup.scss +30 -0
  78. package/scss/components/menu/_menu.scss +26 -0
  79. package/scss/pillarbox.scss +26 -0
@@ -0,0 +1,2 @@
1
+ import e from"video.js";import"videojs-contrib-eme";function t(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,a)}return i}function i(e){for(var i=1;i<arguments.length;i++){var a=null!=arguments[i]?arguments[i]:{};i%2?t(Object(a),!0).forEach((function(t){n(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):t(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function a(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var a=i.call(e,t||"default");if("object"!=typeof a)return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}function r(e,t,i,a,r,s,n){try{var o=e[s](n),l=o.value}catch(e){return void i(e)}o.done?t(l):Promise.resolve(l).then(a,r)}function s(e){return function(){var t=this,i=arguments;return new Promise((function(a,s){var n=e.apply(t,i);function o(e){r(n,a,s,o,l,"next",e)}function l(e){r(n,a,s,o,l,"throw",e)}o(void 0)}))}}function n(e,t,i){return(t=a(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function o(e,t){if(null==e)return{};var i,a,r=function(e,t){if(null==e)return{};var i,a,r={},s=Object.keys(e);for(a=0;a<s.length;a++)i=s[a],t.indexOf(i)>=0||(r[i]=e[i]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a<s.length;a++)i=s[a],t.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}const l=e.getComponent("player");class d extends l{constructor(t,i,a){super(t,i=e.obj.merge(i,{plugins:{eme:!0}}),a)}audioTrack(e){const t=Array.from(this.player().audioTracks());if(!e)return t.find((e=>e.enabled));const{kind:i,language:a}=e,r=t.find((e=>e.language===a&&e.kind===i))||t.find((e=>e.language===a));return r&&(r.enabled=!0),r}bufferedRanges(){const e=[];for(let t=0;t<this.buffered().length;t++){const i=this.buffered().start(t),a=this.buffered().end(t);e.push({start:i,end:a})}return e}playedPercent(){if(!Number.isFinite(this.duration()))return NaN;let e=0;for(let t=0;t!=this.played().length;t++)e+=this.played().end(t)-this.played().start(t);return e/this.duration()}playedRanges(){const e=[];for(let t=0;t<this.played().length;t++){const i=this.played().start(t),a=this.played().end(t);e.push({start:i,end:a})}return e}seekableRanges(){const e=[];for(let t=0;t<this.seekable().length;t++){const i=this.seekable().start(t),a=this.seekable().end(t);e.push({start:i,end:a})}return e}textTrack(e){const t=Array.from(this.player().textTracks()).filter((e=>!["chapters","metadata"].includes(e.kind)));if(!e)return t.find((e=>"showing"===e.mode));t.forEach((e=>e.mode="disabled"));const{kind:i,language:a}=e;return t.find((e=>(e.language===a&&e.kind===i&&(e.mode="showing"),"showing"===e.mode)))||t.find((e=>(e.language===a&&(e.mode="showing"),"showing"===e.mode)))}}e.registerComponent("player",d);const c=e;c.VERSION={pillarbox:"1.12.1",videojs:e.VERSION,[e.VhsSourceHandler.name]:e.VhsSourceHandler.VERSION,eme:e.getPlugin("eme").VERSION},c.options.enableSmoothSeeking=!0,c.options.fill=!0,c.options.html5={vhs:{useForcedSubtitles:!0}},c.options.liveTracker={trackingThreshold:120,liveTolerance:15},c.options.liveui=!0,c.options.playsinline=!0,c.options.responsive=!0,c.options.trackers={};class u{constructor(e="il.srgssr.ch"){this.setIlHost(e)}setIlHost(e){this.baseUrl=`${e}/integrationlayer/2.1/`}handleRequest(e){var t=this;return function(){var i=s((function*(i){const a="function"==typeof e?e(i):t.mediaCompositionUrlHandler(i),r=yield fetch(a);if(!r.ok)throw r;return yield r.json()}));return function(e){return i.apply(this,arguments)}}()}mediaCompositionUrlHandler(e){return`https://${this.baseUrl}mediaComposition/byUrn/${e}?onlyChapters=true&vector=portalplay`}}const p="240",h="320",g="480",m="960",f="1920",b="jpg",y="webp",T="png";class k{static scale({url:e,width:t=m,format:i=b}={},a="https://il.srgssr.ch/images/"){if(!e)return;const r=new URL(a);return r.searchParams.set("imageUrl",e),r.searchParams.set("format",i),r.searchParams.set("width",t),decodeURIComponent(r.href)}static get JPG(){return b}static get PNG(){return T}static get WEBP(){return y}static get WIDTH_240(){return p}static get WIDTH_320(){return h}static get WIDTH_480(){return g}static get WIDTH_960(){return m}static get WIDTH_1920(){return f}}const S={WIDEVINE:"com.widevine.alpha",FAIRPLAY:"com.apple.fps.1_0",PLAYREADY:"com.microsoft.playready"};class v{static buildKeySystems(e=[]){const t={};return e.forEach((e=>{const i=v.vendors[e.type];if(v.vendors.FAIRPLAY===i){const{certificateUrl:a,licenseUrl:r}=e;t[i]={certificateUri:a,licenseUri:r}}else t[i]=e.licenseUrl})),{keySystems:t}}static hasDrm(e){return e.some((({drmList:e})=>e&&e.length>0))}static get vendors(){return S}}const w="AKAMAI",C="NONE";class P{static aclPath(e){const t=e.pathname;return`${t.substring(0,t.lastIndexOf("/")+1)}*`}static get AKAMAI(){return w}static hasToken(e){return e.some((e=>P.isAkamai(e.tokenType)))}static isAkamai(e){return w===e}static isNone(e){return C===e}static get NONE(){return C}static tokenize(e,t){const i=new URL(`${e.url}`),a=P.aclPath(i),r=`${t}${encodeURIComponent(a)}`;return fetch(r).then((e=>e.ok?e.json():Promise.reject({status:e.status,statusText:e.statusText}))).then((({token:{authparams:t}})=>(new URLSearchParams(t).forEach(((e,t)=>i.searchParams.set(t,e))),Object.assign({},e,{url:i.toString()})))).catch((e=>Promise.reject(e)))}static tokenizeSources(e,t="https://tp.srgssr.ch/akahd/token?acl="){const i=[];return e.forEach((e=>{const a=P.tokenize(e,t);i.push(a)})),Promise.all(i).then((e=>e)).catch((e=>Promise.reject(e)))}}const D="emptied",E="ended",A="loadeddata",M="loadstart",R="pause",L="play",O="playing",I="ratechange",B="seeking",N="timeupdate",_="waiting";class z{constructor(e,{debug:t=!1,environment:i="prod",playerVersion:a="none",tagCommanderScriptURL:r="//colibri-js.akamaized.net/penguin/tc_SRGGD_11.js"}={}){this.isDebugEnabled=t,this.elapsedPlaybackTime=0,this.environment=i,this.hasStarted=!1,this.heartBeatIntervalId=void 0,this.initialized=!1,this.isSeeking=!1,this.isWaiting=!1,this.mediaSession=0,this.pendingQueue=[],this.pendingTagCommanderReload=!1,this.player=e,this.playerVersion=a,this.srcMediaData=void 0,this.startPlaybackSession=0,this.tagCommanderScriptURL=r,this.trackedCurrentTime=0,this.uptimeIntervalId=void 0,this.initScript(),this.initListeners()}beforeunload(){this.notify("stop")}clearTimers(){clearInterval(this.heartBeatIntervalId),clearInterval(this.uptimeIntervalId),clearTimeout(this.uptimeTimeoutId)}currentTime(){return Math.round(this.trackedCurrentTime)}debug(e){if(void 0===e)return this.isDebugEnabled||this.player.debug();this.isDebugEnabled=Boolean(e)}destroy(){this.clearTimers(),window.tc_vars||(window.tc_vars={}),this.elapsedPlaybackTime=0,this.hasStarted=!1,this.heartBeatIntervalId=void 0,this.initialized=!1,this.isWaiting=!1,this.mediaSession=0,this.pendingQueue=[],this.srcMediaData=void 0,this.startPlaybackSession=0,this.trackedCurrentTime=0,this.uptimeIntervalId=void 0}dispose(){this.beforeunload(),this.clearTimers(),window.removeEventListener("beforeunload",this.beforeunloadListener),this.player.off(D,this.emptiedListener),this.player.off(E,this.endedListener),this.player.off(M,this.loadstartListener),this.player.off(A,this.loadeddataListener),this.player.off(O,this.playListener),this.player.off(R,this.pauseListener),this.player.off(I,this.rateChangeListener),this.player.off(B,this.seekingListener),this.player.off(N,this.timeUpdateListener),this.player.off(_,this.waitingListener)}emptied(){this.player.ended()||this.notify("stop")}ended(){this.notify("eof"),this.mediaSession=0,this.clearTimers()}flush(){this.isTrackerDisabled()||(this.pendingTagCommanderReload&&window.tC&&(window.tC.container.reload(),this.pendingTagCommanderReload=!1),window.tc_events_11&&this.pendingQueue.length>0&&(this.pendingQueue.forEach((e=>{window.tc_events_11(this.player.el(),e.action,e.labels)})),this.pendingQueue=[]))}getCurrentAudioTrack(){const e=Array.from(this.player.audioTracks()).find((e=>e.enabled));let t="und";return e&&e.language&&(t=e.language),e?t.toUpperCase():""}getCurrentTextTrack(){const e=this.player.textTrack();let t="und";return e&&e.language&&(t=e.language),e?t.toUpperCase():""}getDvrWindowPosition(){const{liveTracker:e}=this.player,t=this.currentTime()-e.seekableStart()|0,i=e.liveWindow()-t;return i<0||i===1/0?0:1e3*i}getDvrWindowSize(){const e=this.player.liveTracker.liveWindow()===1/0,t=1e3*this.player.liveTracker.liveWindow();return e?0:t}getElapsedPlaybackTime(){return this.startPlaybackSession?this.getElapsedPlayingTime():this.elapsedPlaybackTime}getElapsedPlayingTime(){const e=z.now()-this.startPlaybackSession|0;return this.elapsedPlaybackTime+e}getEventLabels(e){const t={event_id:e,event_timestamp:z.now(),media_dvr_window_length:0,media_dvr_window_offset:0,media_is_dvr:!1,media_is_live:!1,media_mute:this.player.muted()?"1":"0",media_playback_rate:this.player.playbackRate(),media_position:this.currentTime(),media_quality:this.srcMediaData.mediaData.quality,media_subtitles_on:this.isTextTrackEnabled(),media_volume:(100*this.player.volume()).toFixed(0),navigation_environment:this.environment};return this.isAudioTrackEnabled()&&(t.media_audio_track=this.getCurrentAudioTrack()),this.isTextTrackEnabled()&&(t.media_subtitle_selection=this.getCurrentTextTrack()),this.isMediaOnDemand()||(t.media_is_live=!0,t.media_position=this.getElapsedPlaybackTime()),this.isMediaDvr()&&(t.media_dvr_window_offset=0|this.getDvrWindowPosition(),t.media_dvr_window_length=0|this.getDvrWindowSize(),t.media_is_dvr=!0,t.media_timeshift=[L,R].includes(e)?this.timeShifted():0),t}getInternalLabels(){const e={media_bu_distributer:this.srcMediaData.mediaData.vendor,media_chromecast_selected:Boolean(this.player.tech(!0).isCasting),media_embedding_url:document.referrer,media_player_display:"default",media_player_name:"pillarbox-web",media_player_version:this.playerVersion,media_url:this.srcMediaData.src},t=this.srcMediaData.mediaData.analyticsMetadata||{};window.tc_vars=Object.assign({},window.tc_vars,e,t)}heartBeat(){this.heartBeatIntervalId=setInterval((()=>{this.player.paused()||this.notify("pos")}),3e4)}initCallbacks(){this.beforeunloadListener=this.beforeunload.bind(this),this.emptiedListener=this.emptied.bind(this),this.endedListener=this.ended.bind(this),this.loadstartListener=this.loadstart.bind(this),this.loadeddataListener=this.loadeddata.bind(this),this.playListener=this.play.bind(this),this.pauseListener=this.pause.bind(this),this.rateChangeListener=this.rateChange.bind(this),this.seekingListener=this.seeking.bind(this),this.timeUpdateListener=this.timeUpdate.bind(this),this.waitingListener=this.waiting.bind(this)}initListeners(){this.initCallbacks(),window.addEventListener("beforeunload",this.beforeunloadListener),this.player.on(D,this.emptiedListener),this.player.on(E,this.endedListener),this.player.on(M,this.loadstartListener),this.player.on(A,this.loadeddataListener),this.player.on(O,this.playListener),this.player.on(R,this.pauseListener),this.player.on(I,this.rateChangeListener),this.player.on(B,this.seekingListener),this.player.on(N,this.timeUpdateListener),this.player.on(_,this.waitingListener),this.player.one("dispose",this.dispose.bind(this))}initScript(){const e="tc_script__11";if(!document.querySelector(`#${e}`)){const t=document.createElement("script"),i=this.tagCommanderScriptURL;t.defer=!0,t.id=e,t.src=i,t.type="text/javascript",t.onload=e=>{this.flush()},document.body.appendChild(t)}}isAudioTrackEnabled(){return!!this.getCurrentAudioTrack()}isMediaDvr(){const{trackingThreshold:e}=this.player.liveTracker.options();return!this.isMediaOnDemand()&&e<this.player.liveTracker.liveWindow()}isMediaLive(){const{trackingThreshold:e}=this.player.liveTracker.options();return!this.isMediaOnDemand()&&e>this.player.liveTracker.liveWindow()}isMediaOnDemand(){return Number.isFinite(this.player.duration())}isTextTrackEnabled(){return!!this.getCurrentTextTrack()}isTrackerDisabled(){return!this.srcMediaData||!this.srcMediaData.mediaData||(Array.isArray(this.srcMediaData.disableTrackers)?Boolean(this.srcMediaData.disableTrackers.find((e=>e.toLowerCase()===z.name.toLowerCase()))):Boolean(this.srcMediaData.disableTrackers))}loadstart(){this.destroy(),this.updateSrcMediaData(this.player.currentSource()),this.isTrackerDisabled()||(this.getInternalLabels(),this.reloadTagCommanderContainer(),this.notify("buffer_start"),this.hasStarted=!1)}loadeddata(){this.notify("init"),this.initialized=!0,this.notify("buffer_stop")}log(e,t,i="log"){this.debug()&&console[i](`SRGAnalytics:${e}`,t,window.tc_vars)}notify(e,t){if(this.isTrackerDisabled())return;try{this.flush()}catch(t){this.log(e,t,"error")}const i=Object.assign({},this.getEventLabels(e),t);this.log(e,i);try{window.tc_events_11?window.tc_events_11(this.player.el(),e,i):this.pendingQueue.push({action:e,labels:i})}catch(t){this.log(e,t,"error")}}static now(){return(Date.now()/1e3).toFixed(0)}play(){this.hasStarted||(this.hasStarted=!0),this.startPlaybackSession||this.isMediaOnDemand()||(this.startPlaybackSession=z.now()),0===this.mediaSession&&(this.mediaSession=z.now(),this.heartBeat(),this.uptime()),this.timeUpdate(),this.notify("play"),this.isSeeking&&(this.isSeeking=!1)}pause(){this.isMediaOnDemand()||(this.elapsedPlaybackTime=this.getElapsedPlayingTime(),this.startPlaybackSession=0),!this.player.seeking()&&!this.isMediaLive()&&this.player.currentTime()<this.player.duration()?this.notify("pause"):this.hasStarted&&!this.isSeeking&&(this.notify("seek"),this.isSeeking=!0)}rateChange(){this.notify("change_playback_rate")}reloadTagCommanderContainer(){window.tC?(window.tC.container.reload(),this.pendingTagCommanderReload=!1):this.pendingTagCommanderReload=!0}seeking(){!this.hasStarted||this.player.paused()||this.isSeeking||(this.notify("seek"),this.isSeeking=!0)}timeUpdate(){this.player.paused()||(this.trackedCurrentTime=this.player.currentTime())}timeShifted(){const e=this.player.liveTracker.atLiveEdge(),t=this.player.liveTracker.liveCurrentTime(),i=this.player.currentTime();return e?0:(t-i).toFixed(0)}updateSrcMediaData(e){this.srcMediaData=e}uptime(){const e=()=>{this.player.paused()||this.isMediaOnDemand()||this.notify("uptime")};this.uptimeTimeoutId=setTimeout((()=>{e(),this.uptimeIntervalId=setInterval((()=>{e()}),6e4)}),3e4)}waiting(){if(!this.initialized||this.isWaiting)return;const e=()=>{this.isWaiting=!1,this.notify("buffer_stop")};this.isWaiting=!0,this.notify("buffer_start"),c.browser.IS_ANY_SAFARI?this.player.one(N,e):this.player.one(O,e)}}class U{findChapterByUrn(e){if(this.chapterList){const[t]=this.chapterList.filter((t=>t.urn===e));return t}}findMainSegment(){if(!this.segmentUrn)return;const e=this.getMainSegments(),[t]=e.filter((e=>e.urn===this.segmentUrn));return t}findResourceListByUrn(e){const t=this.findChapterByUrn(e);if(t)return t.resourceList||[]}getChapters(){const e="AUDIO";return this.getMainChapter().mediaType===e?[]:this.chapterList.filter((({mediaType:t})=>t!==e))}getFilteredExternalSubtitles(){const{subtitleList:e}=this.getMainChapter(),[{subtitleInformationList:t}={}]=this.getResourceList().filter((({subtitleInformationList:e})=>e)),i=e&&!t;if(!e)return[];const a=e.filter((e=>"TTML"!==e.format));return i?a:a.filter((e=>!t.find((t=>t.locale===e.locale&&e.type===t.type))))}getMainBlockReason(){const e=this.getMainChapter();if(!e)return;let{blockReason:t}=e;return!t&&new Date<this.getMainValidFromDate()&&(t="STARTDATE"),t}getMainBlockedSegments(){return this.getMainSegments().filter((e=>e.blockReason))}getMainChapter(){return this.mainChapter||(this.mainChapter=this.findChapterByUrn(this.chapterUrn)),!this.mainChapter&&this.chapterList&&this.chapterList.length>0&&([this.mainChapter]=this.chapterList),this.mainChapter}getMainChapterImageUrl(){const e=this.getMainChapter();if(e&&e.imageUrl)return e.imageUrl}getMainResources(){const e=this.getResourceList();if(e&&e.length)return e.map((e=>({analyticsData:this.getMergedAnalyticsData(e.analyticsData),analyticsMetadata:this.getMergedAnalyticsMetadata(e.analyticsMetadata),blockReason:this.getMainChapter().blockReason,blockedSegments:this.getMainBlockedSegments(),imageUrl:this.getMainChapterImageUrl(),chapters:this.getChapters(),drmList:e.drmList,dvr:e.dvr,eventData:this.getMainChapter().eventData,id:this.getMainChapter().id,imageCopyright:this.getMainChapter().imageCopyright,intervals:this.getMainTimeIntervals(),live:e.live,mediaType:this.getMainChapter().mediaType,mimeType:e.mimeType,presentation:e.presentation,quality:e.quality,streaming:e.streaming,streamOffset:e.streamOffset,subtitles:this.getFilteredExternalSubtitles(),title:this.getMainChapter().title,tokenType:e.tokenType,url:e.url,urn:this.chapterUrn,vendor:this.getMainChapter().vendor})))}getMainSegments(){const e=this.getMainChapter();return!this.mainSegments&&e&&e.segmentList&&(this.mainSegments=e.segmentList),this.mainSegments||[]}getMainTimeIntervals(){const{timeIntervalList:e=[]}=this.getMainChapter()||{};return e}getMainValidFromDate(){const e=this.getMainChapter();if(!e)return new Date(0);const{validFrom:t}=e;return t?new Date(t):void 0}getMergedAnalyticsData(e){return i(i(i({},this.analyticsData),this.getMainChapter().analyticsData),e)}getMergedAnalyticsMetadata(e){return i(i(i({},this.analyticsMetadata),this.getMainChapter().analyticsMetadata),e)}getResourceList(){const{resourceList:e}=this.getMainChapter();return e||[]}}var x="Wiedergabe",G="Pause",F="Erneut abspielen",V="Dauer",W="LIVE",j="Geladen",q="Status",K="Vollbild",Y="Stumm schalten",H="Ton einschalten",Q="Untertitel",$="Untertitel",Z="Kapitel",J="Schließen",X="Beschreibungen",ee="Schrift",te="Weiß",ie="Schwarz",ae="Grün",re="Blau",se="Gelb",ne="Magenta",oe="Türkis",le="Hintergrund",de="Fenster",ce="Durchsichtig",ue="Undurchsichtig",pe="Kein",he="Erhoben",ge="Gedrückt",me="Uniform",fe="Zwanglos",be="Schreibschrift",ye="Zurücksetzen",Te="Fertig",ke="Farbe",Se="Deckkraft",ve={Play:x,Pause:G,Replay:F,"Current Time":"Aktueller Zeitpunkt",Duration:V,"Remaining Time":"Verbleibende Zeit","Stream Type":"Streamtyp",LIVE:W,Loaded:j,Progress:q,Fullscreen:K,"Exit Fullscreen":"Vollbildmodus beenden",Mute:Y,Unmute:H,"Playback Rate":"Wiedergabegeschwindigkeit",Subtitles:Q,"subtitles off":"Untertitel aus",Captions:$,"captions off":"Untertitel aus",Chapters:Z,"You aborted the media playback":"Sie haben die Videowiedergabe abgebrochen.","A network error caused the media download to fail part-way.":"Der Videodownload ist aufgrund eines Netzwerkfehlers fehlgeschlagen.","The media could not be loaded, either because the server or network failed or because the format is not supported.":"Das Video konnte nicht geladen werden, da entweder ein Server- oder Netzwerkfehler auftrat oder das Format nicht unterstützt wird.","The media playback was aborted due to a corruption problem or because the media used features your browser did not support.":"Die Videowiedergabe wurde entweder wegen eines Problems mit einem beschädigten Video oder wegen verwendeten Funktionen, die vom Browser nicht unterstützt werden, abgebrochen.","No compatible source was found for this media.":"Für dieses Video wurde keine kompatible Quelle gefunden.","Play Video":"Video abspielen",Close:J,"Modal Window":"Modales Fenster","This is a modal window":"Dies ist ein modales Fenster","This modal can be closed by pressing the Escape key or activating the close button.":'Durch Drücken der Esc-Taste bzw. Betätigung der Schaltfläche "Schließen" wird dieses modale Fenster geschlossen.',", opens captions settings dialog":", öffnet Einstellungen für Untertitel",", opens subtitles settings dialog":", öffnet Einstellungen für Untertitel",", selected":", ausgewählt","captions settings":"Untertiteleinstellungen","subtitles settings":"Untertiteleinstellungen","descriptions settings":"Einstellungen für Beschreibungen","Close Modal Dialog":"Modales Fenster schließen",Descriptions:X,"descriptions off":"Beschreibungen aus","The media is encrypted and we do not have the keys to decrypt it.":"Die Entschlüsselungsschlüssel für den verschlüsselten Medieninhalt sind nicht verfügbar.",", opens descriptions settings dialog":", öffnet Einstellungen für Beschreibungen","Audio Track":"Tonspur",Text:ee,White:te,Black:ie,Red:"Rot",Green:ae,Blue:re,Yellow:se,Magenta:ne,Cyan:oe,Background:le,Window:de,Transparent:ce,"Semi-Transparent":"Halbdurchsichtig",Opaque:ue,"Font Size":"Schriftgröße","Text Edge Style":"Textkantenstil",None:pe,Raised:he,Depressed:ge,Uniform:me,"Drop shadow":"Schlagschatten","Font Family":"Schriftfamilie","Proportional Sans-Serif":"Proportionale Sans-Serif","Monospace Sans-Serif":"Monospace Sans-Serif","Proportional Serif":"Proportionale Serif","Monospace Serif":"Monospace Serif",Casual:fe,Script:be,"Small Caps":"Small-Caps",Reset:ye,"restore all settings to the default values":"Alle Einstellungen auf die Standardwerte zurücksetzen",Done:Te,"Caption Settings Dialog":"Einstellungsdialog für Untertitel","Beginning of dialog window. Escape will cancel and close the window.":"Anfang des Dialogfensters. Esc bricht ab und schließt das Fenster.","End of dialog window.":"Ende des Dialogfensters.","Audio Player":"Audio-Player","Video Player":"Video-Player","Progress Bar":"Fortschrittsbalken","progress bar timing: currentTime={1} duration={2}":"{1} von {2}","Volume Level":"Lautstärke","{1} is loading.":"{1} wird geladen.","Seek to live, currently behind live":"Zur Live-Übertragung wechseln. Aktuell wird es nicht live abgespielt.","Seek to live, currently playing live":"Zur Live-Übertragung wechseln. Es wird aktuell live abgespielt.","Exit Picture-in-Picture":"Bild-im-Bild-Modus beenden","Picture-in-Picture":"Bild-im-Bild-Modus","No content":"Kein Inhalt",Color:ke,Opacity:Se,"Text Background":"Texthintergrund","Caption Area Background":"Hintergrund des Untertitelbereichs","Playing in Picture-in-Picture":"Wird im Bild-im-Bild-Modus wiedergegeben","Skip forward {1} seconds":"{1} Sekunden vorwärts","Skip backward {1} seconds":"{1} Sekunden zurück"},we=Object.freeze({__proto__:null,Background:le,Black:ie,Blue:re,Captions:$,Casual:fe,Chapters:Z,Close:J,Color:ke,Cyan:oe,Depressed:ge,Descriptions:X,Done:Te,Duration:V,Fullscreen:K,Green:ae,LIVE:W,Loaded:j,Magenta:ne,Mute:Y,None:pe,Opacity:Se,Opaque:ue,Pause:G,Play:x,Progress:q,Raised:he,Red:"Rot",Replay:F,Reset:ye,Script:be,Subtitles:Q,Text:ee,Transparent:ce,Uniform:me,Unmute:H,White:te,Window:de,Yellow:se,default:ve}),Ce="Aus Gründen des Jugendschutzes steht dieser Inhalt nur zwischen 20:00 und 06:00 Uhr zur Verfügung.",Pe="Aus Gründen des Jugendschutzes steht dieser Inhalt nur zwischen 23:00 und 05:00 Uhr zur Verfügung.",De="Die Werbung wurde übersprungen.",Ee="Dieser Inhalt ist nicht mehr verfügbar.",Ae="Dieser Inhalt ist ausserhalb der Schweiz nicht verfügbar.",Me="Dieser Inhalt ist aus rechtlichen Gründen nicht verfügbar.",Re="Dieser Inhalt ist noch nicht verfügbar. Bitte probieren Sie es später noch einmal.",Le="Dieser Inhalt ist nicht verfügbar.",Oe={AGERATING12:Ce,AGERATING18:Pe,COMMERCIAL:De,ENDDATE:Ee,GEOBLOCK:Ae,LEGAL:Me,STARTDATE:Re,UNKNOWN:Le},Ie=Object.freeze({__proto__:null,AGERATING12:Ce,AGERATING18:Pe,COMMERCIAL:De,ENDDATE:Ee,GEOBLOCK:Ae,LEGAL:Me,STARTDATE:Re,UNKNOWN:Le,default:Oe});c.addLanguage("de",i(i({},we),Ie));var Be="Play",Ne="Pause",_e="Replay",ze="Duration",Ue="LIVE",xe="Loaded",Ge="Progress",Fe="Fullscreen",Ve="Mute",We="Unmute",je="Subtitles",qe="Captions",Ke="Chapters",Ye="Descriptions",He="Close",Qe="Text",$e="White",Ze="Black",Je="Green",Xe="Blue",et="Yellow",tt="Magenta",it="Cyan",at="Background",rt="Window",st="Transparent",nt="Opaque",ot="None",lt="Raised",dt="Depressed",ct="Uniform",ut="Casual",pt="Script",ht="Reset",gt="Done",mt="Color",ft="Opacity",bt={"Audio Player":"Audio Player","Video Player":"Video Player",Play:Be,Pause:Ne,Replay:_e,"Current Time":"Current Time",Duration:ze,"Remaining Time":"Remaining Time","Stream Type":"Stream Type",LIVE:Ue,"Seek to live, currently behind live":"Seek to live, currently behind live","Seek to live, currently playing live":"Seek to live, currently playing live",Loaded:xe,Progress:Ge,"Progress Bar":"Progress Bar","progress bar timing: currentTime={1} duration={2}":"{1} of {2}",Fullscreen:Fe,"Exit Fullscreen":"Exit Fullscreen",Mute:Ve,Unmute:We,"Playback Rate":"Playback Rate",Subtitles:je,"subtitles off":"subtitles off",Captions:qe,"captions off":"captions off",Chapters:Ke,Descriptions:Ye,"descriptions off":"descriptions off","Audio Track":"Audio Track","Volume Level":"Volume Level","You aborted the media playback":"You aborted the media playback","A network error caused the media download to fail part-way.":"A network error caused the media download to fail part-way.","The media could not be loaded, either because the server or network failed or because the format is not supported.":"The media could not be loaded, either because the server or network failed or because the format is not supported.","The media playback was aborted due to a corruption problem or because the media used features your browser did not support.":"The media playback was aborted due to a corruption problem or because the media used features your browser did not support.","No compatible source was found for this media.":"No compatible source was found for this media.","The media is encrypted and we do not have the keys to decrypt it.":"The media is encrypted and we do not have the keys to decrypt it.","Play Video":"Play Video",Close:He,"Close Modal Dialog":"Close Modal Dialog","Modal Window":"Modal Window","This is a modal window":"This is a modal window","This modal can be closed by pressing the Escape key or activating the close button.":"This modal can be closed by pressing the Escape key or activating the close button.",", opens captions settings dialog":", opens captions settings dialog",", opens subtitles settings dialog":", opens subtitles settings dialog",", opens descriptions settings dialog":", opens descriptions settings dialog",", selected":", selected","captions settings":"captions settings","subtitles settings":"subtitles settings","descriptions settings":"descriptions settings",Text:Qe,White:$e,Black:Ze,Red:"Red",Green:Je,Blue:Xe,Yellow:et,Magenta:tt,Cyan:it,Background:at,Window:rt,Transparent:st,"Semi-Transparent":"Semi-Transparent",Opaque:nt,"Font Size":"Font Size","Text Edge Style":"Text Edge Style",None:ot,Raised:lt,Depressed:dt,Uniform:ct,"Drop shadow":"Drop shadow","Font Family":"Font Family","Proportional Sans-Serif":"Proportional Sans-Serif","Monospace Sans-Serif":"Monospace Sans-Serif","Proportional Serif":"Proportional Serif","Monospace Serif":"Monospace Serif",Casual:ut,Script:pt,"Small Caps":"Small Caps",Reset:ht,"restore all settings to the default values":"restore all settings to the default values",Done:gt,"Caption Settings Dialog":"Caption Settings Dialog","Beginning of dialog window. Escape will cancel and close the window.":"Beginning of dialog window. Escape will cancel and close the window.","End of dialog window.":"End of dialog window.","{1} is loading.":"{1} is loading.","Exit Picture-in-Picture":"Exit Picture-in-Picture","Picture-in-Picture":"Picture-in-Picture","No content":"No content",Color:mt,Opacity:ft,"Text Background":"Text Background","Caption Area Background":"Caption Area Background","Playing in Picture-in-Picture":"Playing in Picture-in-Picture","Skip backward {1} seconds":"Skip backward {1} seconds","Skip forward {1} seconds":"Skip forward {1} seconds"},yt=Object.freeze({__proto__:null,Background:at,Black:Ze,Blue:Xe,Captions:qe,Casual:ut,Chapters:Ke,Close:He,Color:mt,Cyan:it,Depressed:dt,Descriptions:Ye,Done:gt,Duration:ze,Fullscreen:Fe,Green:Je,LIVE:Ue,Loaded:xe,Magenta:tt,Mute:Ve,None:ot,Opacity:ft,Opaque:nt,Pause:Ne,Play:Be,Progress:Ge,Raised:lt,Red:"Red",Replay:_e,Reset:ht,Script:pt,Subtitles:je,Text:Qe,Transparent:st,Uniform:ct,Unmute:We,White:$e,Window:rt,Yellow:et,default:bt}),Tt="To protect children this content is only available between 8PM and 6AM.",kt="To protect children this content is only available between 10PM and 5AM.",St="This commercial content is not available.",vt="This content is not available anymore.",wt="This content is not available outside Switzerland.",Ct="This content is not available due to legal restrictions.",Pt="This content is not available yet.",Dt="This content is not available.",Et={AGERATING12:Tt,AGERATING18:kt,COMMERCIAL:St,ENDDATE:vt,GEOBLOCK:wt,LEGAL:Ct,STARTDATE:Pt,UNKNOWN:Dt},At=Object.freeze({__proto__:null,AGERATING12:Tt,AGERATING18:kt,COMMERCIAL:St,ENDDATE:vt,GEOBLOCK:wt,LEGAL:Ct,STARTDATE:Pt,UNKNOWN:Dt,default:Et});c.addLanguage("en",i(i({},yt),At));var Mt="Lecture",Rt="Pause",Lt="Revoir",Ot="Durée",It="EN DIRECT",Bt="Chargé",Nt="Progression",_t="Plein écran",zt="Mettre en sourdine",Ut="Activer le son",xt="Sous-titres",Gt="Sous-titres transcrits",Ft="Chapitres",Vt="Descriptions",Wt="Fermer",jt="Texte",qt="Blanc",Kt="Noir",Yt="Rouge",Ht="Vert",Qt="Bleu",$t="Jaune",Zt="Magenta",Jt="Cyan",Xt="Arrière-plan",ei="Fenêtre",ti="Transparent",ii="Opaque",ai="Aucun",ri="Élevé",si="Enfoncé",ni="Uniforme",oi="Manuscrite",li="Scripte",di="Réinitialiser",ci="Terminé",ui="Couleur",pi="Opacité",hi={"Audio Player":"Lecteur audio","Video Player":"Lecteur vidéo",Play:Mt,Pause:Rt,Replay:Lt,"Current Time":"Temps actuel",Duration:Ot,"Remaining Time":"Temps restant","Stream Type":"Type de flux",LIVE:It,"Seek to live, currently behind live":"Rechercher le direct, actuellement après le direct","Seek to live, currently playing live":"Rechercher le direct, le direct actuellement en cours de lecture",Loaded:Bt,Progress:Nt,"Progress Bar":"Barre de progression","progress bar timing: currentTime={1} duration={2}":"{1} de {2}",Fullscreen:_t,"Exit Fullscreen":"Fenêtré",Mute:zt,Unmute:Ut,"Playback Rate":"Vitesse de lecture",Subtitles:xt,"subtitles off":"Sous-titres désactivés",Captions:Gt,"captions off":"Sous-titres transcrits désactivés",Chapters:Ft,Descriptions:Vt,"descriptions off":"descriptions désactivées","Audio Track":"Piste audio","Volume Level":"Niveau de volume","You aborted the media playback":"Vous avez interrompu la lecture de la vidéo.","A network error caused the media download to fail part-way.":"Une erreur de réseau a interrompu le téléchargement de la vidéo.","The media could not be loaded, either because the server or network failed or because the format is not supported.":"Cette vidéo n'a pas pu être chargée, soit parce que le serveur ou le réseau a échoué ou parce que le format n'est pas reconnu.","The media playback was aborted due to a corruption problem or because the media used features your browser did not support.":"La lecture de la vidéo a été interrompue à cause d'un problème de corruption ou parce que la vidéo utilise des fonctionnalités non prises en charge par votre navigateur.","No compatible source was found for this media.":"Aucune source compatible n'a été trouvée pour cette vidéo.","The media is encrypted and we do not have the keys to decrypt it.":"Le média est chiffré et nous n'avons pas les clés pour le déchiffrer.","Play Video":"Lire la vidéo",Close:Wt,"Close Modal Dialog":"Fermer la boîte de dialogue modale","Modal Window":"Fenêtre modale","This is a modal window":"Ceci est une fenêtre modale","This modal can be closed by pressing the Escape key or activating the close button.":"Ce modal peut être fermé en appuyant sur la touche Échap ou activer le bouton de fermeture.",", opens captions settings dialog":", ouvrir les paramètres des sous-titres transcrits",", opens subtitles settings dialog":", ouvrir les paramètres des sous-titres",", opens descriptions settings dialog":", ouvrir les paramètres des descriptions",", selected":", sélectionné","captions settings":"Paramètres des sous-titres transcrits","subtitles settings":"Paramètres des sous-titres","descriptions settings":"Paramètres des descriptions",Text:jt,White:qt,Black:Kt,Red:Yt,Green:Ht,Blue:Qt,Yellow:$t,Magenta:Zt,Cyan:Jt,Background:Xt,Window:ei,Transparent:ti,"Semi-Transparent":"Semi-transparent",Opaque:ii,"Font Size":"Taille des caractères","Text Edge Style":"Style des contours du texte",None:ai,Raised:ri,Depressed:si,Uniform:ni,"Drop shadow":"Ombre portée","Font Family":"Famille de polices","Proportional Sans-Serif":"Polices à chasse variable sans empattement (Proportional Sans-Serif)","Monospace Sans-Serif":"Polices à chasse fixe sans empattement (Monospace Sans-Serif)","Proportional Serif":"Polices à chasse variable avec empattement (Proportional Serif)","Monospace Serif":"Polices à chasse fixe avec empattement (Monospace Serif)",Casual:oi,Script:li,"Small Caps":"Petites capitales",Reset:di,"restore all settings to the default values":"Restaurer tous les paramètres aux valeurs par défaut",Done:ci,"Caption Settings Dialog":"Boîte de dialogue des paramètres des sous-titres transcrits","Beginning of dialog window. Escape will cancel and close the window.":"Début de la fenêtre de dialogue. La touche d'échappement annulera et fermera la fenêtre.","End of dialog window.":"Fin de la fenêtre de dialogue.","Exit Picture-in-Picture":"Quitter le mode image dans l'image","Picture-in-Picture":"Image dans l'image","{1} is loading.":"{1} en cours de chargement.","No content":"Aucun contenu",Color:ui,Opacity:pi,"Text Background":"Arrière-plan du texte","Caption Area Background":"Arrière-plan de la zone de sous-titre","Skip backward {1} seconds":"Reculer de {1} secondes","Skip forward {1} seconds":"Avancer de {1} secondes"},gi=Object.freeze({__proto__:null,Background:Xt,Black:Kt,Blue:Qt,Captions:Gt,Casual:oi,Chapters:Ft,Close:Wt,Color:ui,Cyan:Jt,Depressed:si,Descriptions:Vt,Done:ci,Duration:Ot,Fullscreen:_t,Green:Ht,LIVE:It,Loaded:Bt,Magenta:Zt,Mute:zt,None:ai,Opacity:pi,Opaque:ii,Pause:Rt,Play:Mt,Progress:Nt,Raised:ri,Red:Yt,Replay:Lt,Reset:di,Script:li,Subtitles:xt,Text:jt,Transparent:ti,Uniform:ni,Unmute:Ut,White:qt,Window:ei,Yellow:$t,default:hi}),mi="Pour protéger les enfants, ce contenu est accessible entre 20h et 6h.",fi="Pour protéger les enfants, ce contenu est accessible entre 23h et 5h.",bi="Ce contenu n'est actuellement pas disponible.",yi="Ce contenu n'est plus disponible.",Ti="La RTS ne dispose pas des droits de diffusion en dehors de la Suisse.",ki="Pour des raisons juridiques, ce contenu n'est pas disponible.",Si="Ce contenu n'est pas encore disponible. Veuillez réessayer plus tard.",vi="Ce contenu n'est actuellement pas disponible.",wi={AGERATING12:mi,AGERATING18:fi,COMMERCIAL:bi,ENDDATE:yi,GEOBLOCK:Ti,LEGAL:ki,STARTDATE:Si,UNKNOWN:vi},Ci=Object.freeze({__proto__:null,AGERATING12:mi,AGERATING18:fi,COMMERCIAL:bi,ENDDATE:yi,GEOBLOCK:Ti,LEGAL:ki,STARTDATE:Si,UNKNOWN:vi,default:wi});c.addLanguage("fr",i(i({},gi),Ci));var Pi="Play",Di="Pausa",Ei="Replay",Ai="Durata",Mi="LIVE",Ri="Caricato",Li="Stato",Oi="Schermo intero",Ii="Disattiva l’audio",Bi="Attiva l’audio",Ni="Sottotitoli",_i="Sottotitoli non udenti",zi="Capitolo",Ui="Descrizioni",xi="Chiudi",Gi="Testo",Fi="Bianco",Vi="Nero",Wi="Rosso",ji="Verde",qi="Giallo",Ki="Magenta",Yi="Ciano",Hi="Sfondo",Qi="Finestra",$i="Trasparente",Zi="Opaco",Ji="Nessuno",Xi="Uniforme",ea="Reinizializza",ta="Fatto",ia="Colore",aa="Opacità",ra={"Audio Player":"Lettore audio","Video Player":"Lettore video",Play:Pi,Pause:Di,Replay:Ei,"Current Time":"Orario attuale",Duration:Ai,"Remaining Time":"Tempo rimanente","Stream Type":"Tipo di streaming",LIVE:Mi,Loaded:Ri,Progress:Li,"Progress Bar":"Barra di avanzamento","progress bar timing: currentTime={1} duration={2}":"{1} di {2}",Fullscreen:Oi,"Exit Fullscreen":"Chiudi Schermo intero",Mute:Ii,Unmute:Bi,"Playback Rate":"Velocità di riproduzione",Subtitles:Ni,"subtitles off":"Senza sottotitoli",Captions:_i,"captions off":"Senza sottotitoli non udenti",Chapters:zi,Descriptions:Ui,"descriptions off":"Descrizioni disattivate","Audio Track":"Traccia audio","Volume Level":"Livello del volume","You aborted the media playback":"La riproduzione del contenuto multimediale è stata interrotta.","A network error caused the media download to fail part-way.":"Il download del contenuto multimediale è stato interrotto a causa di un problema rete.","The media could not be loaded, either because the server or network failed or because the format is not supported.":"Il contenuto multimediale non può essere caricato a causa di un errore nel server o nella rete o perché il formato non viene supportato.","The media playback was aborted due to a corruption problem or because the media used features your browser did not support.":"La riproduzione del contenuto multimediale è stata interrotta a causa di un file danneggiato o per l’utilizzo di impostazioni non supportate dal browser.","No compatible source was found for this media.":"Non ci sono fonti compatibili per questo contenuto multimediale.","The media is encrypted and we do not have the keys to decrypt it.":"Il contenuto multimediale è criptato e non disponiamo delle chiavi per decifrarlo.","Play Video":"Riproduci il video",Close:xi,"Close Modal Dialog":"Chiudi la finestra di dialogo","Modal Window":"Finestra di dialogo","This is a modal window":"Questa è una finestra di dialogo","This modal can be closed by pressing the Escape key or activating the close button.":"Questa finestra di dialogo può essere chiusa premendo sul tasto Esc o attivando il pulsante di chiusura.",", opens captions settings dialog":", aprire i parametri della trascrizione dei sottotitoli",", opens subtitles settings dialog":", aprire i parametri dei sottotitoli",", opens descriptions settings dialog":", aprire i parametri delle descrizioni",", selected":", selezionato","captions settings":"Parametri sottotitoli non udenti","subtitles settings":"Parametri sottotitoli","descriptions settings":"Parametri descrizioni",Text:Gi,White:Fi,Black:Vi,Red:Wi,Green:ji,Blue:"Blu",Yellow:qi,Magenta:Ki,Cyan:Yi,Background:Hi,Window:Qi,Transparent:$i,"Semi-Transparent":"Semi-Trasparente",Opaque:Zi,"Font Size":"Dimensione dei caratteri","Text Edge Style":"Stile dei bordi del testo",None:Ji,Uniform:Xi,"Drop shadow":"Ombra","Font Family":"Carattere","Proportional Sans-Serif":"Sans-Serif proporzionale","Monospace Sans-Serif":"Sans-Serif monospaziato","Proportional Serif":"Serif proporzionale","Monospace Serif":"Serif monospaziato","Small Caps":"Maiuscoletto",Reset:ea,"restore all settings to the default values":"Ripristina i valori predefiniti per tutti i parametri",Done:ta,"Caption Settings Dialog":"Finestra di dialogo dei parametri della trascrizione dei sottotitoli","Beginning of dialog window. Escape will cancel and close the window.":"Inizio della finestra di dialogo. Il tasto Esc annullerà l’operazione e chiuderà la finestra.","End of dialog window.":"Fine della finestra di dialogo.","{1} is loading.":"{1} in fase di caricamento.","Exit Picture-in-Picture":"Esci dalla modalità Picture-in-Picture","Picture-in-Picture":"Picture-in-Picture",Color:ia,Opacity:aa,"Text Background":"Sfondo testo","Caption Area Background":"Sfondo area sottotitoli","Skip forward {1} seconds":"Avanti {1} secondi","Skip backward {1} seconds":"Indietro {1} secondi"},sa=Object.freeze({__proto__:null,Background:Hi,Black:Vi,Blue:"Blu",Captions:_i,Chapters:zi,Close:xi,Color:ia,Cyan:Yi,Descriptions:Ui,Done:ta,Duration:Ai,Fullscreen:Oi,Green:ji,LIVE:Mi,Loaded:Ri,Magenta:Ki,Mute:Ii,None:Ji,Opacity:aa,Opaque:Zi,Pause:Di,Play:Pi,Progress:Li,Red:Wi,Replay:Ei,Reset:ea,Subtitles:Ni,Text:Gi,Transparent:$i,Uniform:Xi,Unmute:Bi,White:Fi,Window:Qi,Yellow:qi,default:ra}),na="Per proteggere i bambini, questo media è disponibile solo fra le 20 e le 6.",oa="Per proteggere i bambini, questo media è disponibile solo fra le 23 le 5.",la="Questo contenuto commerciale non è disponibile.",da="Questo media non è più disponibile.",ca="Questo media non è disponibile fuori dalla Svizzera.",ua="Il contenuto non è fruibile a causa di restrizioni legali.",pa="Il contenuto non è ancora disponibile. Per cortesia prova più tardi.",ha="Questo media non è disponibile.",ga={AGERATING12:na,AGERATING18:oa,COMMERCIAL:la,ENDDATE:da,GEOBLOCK:ca,LEGAL:ua,STARTDATE:pa,UNKNOWN:ha},ma=Object.freeze({__proto__:null,AGERATING12:na,AGERATING18:oa,COMMERCIAL:la,ENDDATE:da,GEOBLOCK:ca,LEGAL:ua,STARTDATE:pa,UNKNOWN:ha,default:ga});c.addLanguage("it",i(i({},sa),ma));var fa="Laschar ir",ba="Pausa",ya="Mussar danovamain",Ta="Durada",ka="LIVE",Sa="Chargià",va="Progress",wa="Entir visur",Ca="Senza tun",Pa="Cun tun",Da="Suttitels",Ea="Suttitels",Aa="Chapitels",Ma="Descripziuns",Ra="Serrar",La="Text",Oa="Nair",Ia="Cotschn",Ba="Verd",Na="Blau",_a="Mellen",za="Magenta",Ua="Cyan",xa="Fund",Ga="Fanestra",Fa="Transparent",Va="Betg transparent",Wa="Nagin",ja="Auzà",qa="Sbassà",Ka="Uniform",Ya="Sumbriva",Ha="Casual",Qa="Script",$a="Da nov",Za="Fatg",Ja="Per proteger uffants, è quest cuntegn disponibel mo tranter las 20.00 e las 06.00.",Xa="Per proteger uffants, è quest cuntegn disponibel mo tranter las 23.00 e las 05.00.",er="Quest medium commerzial n'è betg disponibel.",tr="Quest cuntegn n'è betg pli disponibel.",ir="Quest cuntegn n'è betg disponibel ordaifer la Svizra.",ar="Quest cuntegn n'è betg disponibel perquai ch'el è scadì.",rr="Quest cuntegn n'è betg anc disponibel. Empruvai pli tard.",sr="Quest cuntegn n'è betg disponibel.",nr={"Audio Player":"Audio-Player","Video Player":"Video-Player",Play:fa,Pause:ba,Replay:ya,"Current Time":"Temp actual",Duration:Ta,"Remaining Time":"Temp restant","Stream Type":"Tip dal stream",LIVE:ka,Loaded:Sa,Progress:va,"Progress Bar":"Bar da progessiun","progress bar timing: currentTime={1} duration={2}":"{1} da {2}",Fullscreen:wa,"Non-Fullscreen":"Betg entir visur",Mute:Ca,Unmute:Pa,"Playback Rate":"Tempo ",Subtitles:Da,"subtitles off":"senza suttitels",Captions:Ea,"captions off":"senza suttitels",Chapters:Aa,Descriptions:Ma,"descriptions off":"senza descripziuns","Audio Track":"Piese audio","Volume Level":"Nivel dal volumen","You aborted the media playback":"Vus avais interrut il vdieo","A network error caused the media download to fail part-way.":"In sbagl en la rait ha impedì il download","The media could not be loaded, either because the server or network failed or because the format is not supported.":"Il video n'è betg chargià - ubain per in sbagl da server / da la rait, ubain ch'il format n'è betg cumpatibel.","The media playback was aborted due to a corruption problem or because the media used features your browser did not support.":"Il video è interrut: Ubain ch'il video è donnegià, ubain che funcziuns n'èn betg cumpatiblas.","No compatible source was found for this media.":"Chattà nagina funtauna cumpatibla per quest video.","The media is encrypted and we do not have the keys to decrypt it.":"Il video è codifitgà da moda nunenconuschenta.","Play Video":"Aviar video",Close:Ra,"Close Modal Dialog":"Serrar la fanestra modala","Modal Window":"Fanestra modala","This is a modal window":"Quai è ina fanestra modala","This modal can be closed by pressing the Escape key or activating the close button.":'Questa fanestra modala pudais serrar cun la tasta "Escape" ubain cun il buttun.',", opens captions settings dialog":", avra opziuns per ils suttitels",", opens subtitles settings dialog":", avra opziuns per ils suttitels",", opens descriptions settings dialog":", avra opziuns per la descripziun",", selected":", selecziunà","captions settings":"opziuns per ils suttitels","subtitles settings":"opziuns per ils suttitels","descriptions settings":"opziuns per la descripziun",Text:La,White:"Alv",Black:Oa,Red:Ia,Green:Ba,Blue:Na,Yellow:_a,Magenta:za,Cyan:Ua,Background:xa,Window:Ga,Transparent:Fa,"Semi-Transparent":"Mez transparent",Opaque:Va,"Font Size":"Grandezza dal text","Text Edge Style":"Stil dal text",None:Wa,Raised:ja,Depressed:qa,Uniform:Ka,Dropshadow:Ya,"Font Family":"Scrittira","Proportional Sans-Serif":"Proportionale Sans-Serif","Monospace Sans-Serif":"Monospace Sans-Serif","Proportional Serif":"Proportionale Serif","Monospace Serif":"Monospace Serif",Casual:Ha,Script:Qa,"Small Caps":"Bustabs pitschens",Reset:$a,"restore all settings to the default values":"Enavos tar las opziuns da standard",Done:Za,"Caption Settings Dialog":"Opziuns per suttitels","Beginning of dialog window. Escape will cancel and close the window.":"Entschatta da la fanestra da dialog. Escape stizza e serra la fanestra.","End of dialog window.":"Fin da la fanestra da dialog.",AGERATING12:Ja,AGERATING18:Xa,COMMERCIAL:er,ENDDATE:tr,GEOBLOCK:ir,LEGAL:ar,STARTDATE:rr,UNKNOWN:sr},or=Object.freeze({__proto__:null,AGERATING12:Ja,AGERATING18:Xa,Background:xa,Black:Oa,Blue:Na,COMMERCIAL:er,Captions:Ea,Casual:Ha,Chapters:Aa,Close:Ra,Cyan:Ua,Depressed:qa,Descriptions:Ma,Done:Za,Dropshadow:Ya,Duration:Ta,ENDDATE:tr,Fullscreen:wa,GEOBLOCK:ir,Green:Ba,LEGAL:ar,LIVE:ka,Loaded:Sa,Magenta:za,Mute:Ca,None:Wa,Opaque:Va,Pause:ba,Play:fa,Progress:va,Raised:ja,Red:Ia,Replay:ya,Reset:$a,STARTDATE:rr,Script:Qa,Subtitles:Da,Text:La,Transparent:Fa,UNKNOWN:sr,Uniform:Ka,Unmute:Pa,White:"Alv",Window:Ga,Yellow:_a,default:nr});c.addLanguage("rm",i({},or));const lr=["url","mimeType","keySystems"],dr=["src"];class cr{static addBlockedSegments(e,t=[]){const i="srgssr-blocked-segments",a=e.textTracks().getTrackById(i);if(a&&e.textTracks().removeTrack(a),!Array.isArray(t)||!t.length)return;const r=t.filter((e=>e.blockReason));r.length&&cr.createTextTrack(e,i).then((t=>{r.forEach((e=>{cr.addTextTrackCue(t,e)})),e.textTracks().addTrack(t)}))}static addRemoteTextTracks(e,t=[]){Array.isArray(t)&&t.forEach((({type:t,language:i,locale:a,url:r})=>{e.addRemoteTextTrack({kind:"SDH"===t?"captions":"subtitles",label:i,language:a,src:r})}))}static addTextTrackCue(e,t){const i=(Number.isFinite(t.markIn)?t.markIn:t.fullLengthMarkIn)/1e3,a=(Number.isFinite(t.markOut)?t.markOut:t.fullLengthMarkOut)/1e3;e.addCue(new VTTCue(i,a,JSON.stringify(t)))}static addTextTracks(e,{mediaData:t}){cr.addRemoteTextTracks(e,t.subtitles),cr.addChapters(e,t.urn,t.chapters),cr.addBlockedSegments(e,t.blockedSegments),cr.addIntervals(e,t.intervals)}static addChapters(e,t,i=[]){const a="srgssr-chapters",r=e.textTracks().getTrackById(a);r&&e.textTracks().removeTrack(r),Array.isArray(i)&&i.length&&cr.createTextTrack(e,a).then((a=>{i.forEach((e=>{t===e.fullLengthUrn&&cr.addTextTrackCue(a,e)})),e.textTracks().addTrack(a)}))}static addIntervals(e,t=[]){const i="srgssr-intervals",a=e.textTracks().getTrackById(i);a&&e.textTracks().removeTrack(a),Array.isArray(t)&&t.length&&cr.createTextTrack(e,i).then((i=>{t.forEach((e=>{cr.addTextTrackCue(i,e)})),e.textTracks().addTrack(i)}))}static blockingReason(e,t){if(!t.mediaData.blockReason)return;const i=e.localize(t.mediaData.blockReason);return cr.error(e,{code:MediaError.MEDIA_ERR_ABORTED,message:i,metadata:{errorType:t.mediaData.blockReason,src:t}}),!0}static composeAkamaiResources(e=[]){return s((function*(){return P.hasToken(e)?P.tokenizeSources(e):Promise.resolve(e)}))()}static composeKeySystemsResources(e=[]){return v.hasDrm(e),e.map((e=>i(i({},e),v.buildKeySystems(e.drmList))))}static composeMainResources(e){return cr.composeAkamaiResources(cr.composeKeySystemsResources(cr.filterIncompatibleResources(e.getMainResources())))}static composeSrcMediaData({mediaData:e,disableTrackers:t},i){const a=c.obj.merge(i,e),{url:r,mimeType:s,keySystems:n}=a;return{src:r,type:s,keySystems:n,disableTrackers:t,mediaData:o(a,lr)}}static createTextTrack(e,t){return new Promise((i=>{setTimeout((()=>{i(new c.TextTrack({id:t,kind:"metadata",label:t,tech:e.tech(!0)}))}),100)}))}static cuechangeEventProxy(e){e.textTracks().on("addtrack",(({track:t})=>{["srgssr-chapters","srgssr-intervals"].includes(t.id)&&t.on("cuechange",(()=>{const[i]=Array.from(t.activeCues),a=t.id.includes("srgssr-chapters")?"srgssr/chapter":"srgssr/interval";e.trigger({type:a,data:i})}))}))}static dataProvider(e){if(!e.options().srgOptions.dataProvider){const{dataProviderHost:t,dataProviderUrlHandler:i}=e.options().srgOptions,a=new u(t).handleRequest(i);e.options({srgOptions:{dataProvider:a}})}return e.options().srgOptions.dataProvider}static dataProviderError(e,t){if(!t)return;const i=t.statusText?t.statusText:t.message;return cr.error(e,{code:0,message:e.localize("UNKNOWN"),metadata:{errorType:"UNKNOWN",urn:e.src(),status:t.status,statusText:i,url:t.url}}),!0}static error(e,{code:t,message:i,metadata:a}){e.error(null),e.error({code:t,message:i,metadata:a})}static filterIncompatibleResources(e=[]){return e.filter((e=>!["RTMP","HDS"].includes(e.streaming)))}static getBlockedSegment(e){const t=e.textTracks().getTrackById("srgssr-blocked-segments");if(!t)return;const[i]=Array.from(t.activeCues);return i}static getBlockedSegmentByTime(e,t){const i=cr.getBlockedSegment(e);if(!i)return;return t>=i.startTime&&t<i.endTime?i:void 0}static getMediaComposition(e,t=(new u).handleRequest()){return s((function*(){const i=yield t(e);return Object.assign(new U,i)}))()}static getMediaData(e=[]){if(P.hasToken(e))return e[0];const t=c.browser.IS_ANY_SAFARI?"HLS":"DASH";return e.find((({streaming:e})=>e===t))||e[0]}static getSrcMediaObj(e,t){return s((function*(){const{src:i}=t,a=o(t,dr),r=yield cr.getMediaComposition(i,cr.dataProvider(e)),s=yield cr.composeMainResources(r),n=cr.getMediaData(s);return cr.composeSrcMediaData(a,n)}))()}static handleCurrentTime(e,t){const i=cr.getBlockedSegmentByTime(e,t);if(!i||!Number.isFinite(i.endTime))return t;const a=i.endTime+.1;return e.trigger({type:"srgssr/blocked-segment",data:i}),e.currentTime(a),a}static handleSetCurrentTime(e,t){const{endTime:i}=cr.getBlockedSegmentByTime(e,t)||{};return Number.isFinite(i)?i:t}static handleSetSource(e,t,i){return s((function*(){try{const a=yield cr.getSrcMediaObj(e,t);if(cr.srgAnalytics(e),cr.updateTitleBar(e,a),cr.updatePoster(e,a),cr.blockingReason(e,a))return;return cr.addTextTracks(e,a),i(null,a)}catch(t){if(cr.dataProviderError(e,t))return;return i(t)}}))()}static srgAnalytics(e){if(!1!==e.options().trackers.srgAnalytics&&!e.options().trackers.srgAnalytics){const t=new z(e,{debug:e.debug(),playerVersion:c.VERSION.pillarbox,tagCommanderScriptURL:e.options().srgOptions.tagCommanderScriptURL});e.options({trackers:{srgAnalytics:t}})}}static updatePoster(e,t,i=k){e.poster(i.scale({url:t.mediaData.imageUrl}))}static updateTitleBar(e,t){e.titleBar&&e.titleBar.update({title:t.mediaData.vendor,description:t.mediaData.title})}static middleware(e){return cr.cuechangeEventProxy(e),{currentTime:t=>cr.handleCurrentTime(e,t),setCurrentTime:t=>cr.handleSetCurrentTime(e,t),setSource:(t=s((function*(t,i){return cr.handleSetSource(e,t,i)})),function(e,i){return t.apply(this,arguments)})};var t}}c.use("srgssr/urn",cr.middleware),c.options.srgOptions={dataProvider:void 0,dataProviderHost:void 0,dataProviderUrlHandler:void 0,tagCommanderScriptURL:void 0};export{d as Player,cr as SrgSsr,c as default};
2
+ //# sourceMappingURL=pillarbox.es.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pillarbox.es.min.js","sources":["../src/components/player.js","../src/pillarbox.js","../src/dataProvider/services/DataProvider.js","../src/utils/Image.js","../src/utils/Drm.js","../src/utils/AkamaiTokenService.js","../src/utils/PlayerEvents.js","../src/analytics/SRGAnalytics.js","../src/dataProvider/model/MediaComposition.js","../src/lang/de.js","../src/lang/en.js","../src/lang/fr.js","../src/lang/it.js","../src/lang/rm.js","../src/middleware/srgssr.js"],"sourcesContent":["import videojs from 'video.js';\nimport 'videojs-contrib-eme';\n\n/**\n * @ignore\n * @type {typeof import('video.js/dist/types/player').default}\n */\nconst vjsPlayer = videojs.getComponent('player');\n\n/**\n * This class extends the video.js Player.\n *\n * @class Player\n * @see https://docs.videojs.com/player\n */\nclass Player extends vjsPlayer {\n constructor(tag, options, ready) {\n /**\n * Configuration for plugins.\n *\n * @see [Video.js Plugins Option]{@link https://videojs.com/guides/options/#plugins}\n * @type {Object}\n * @property {boolean} eme - Enable the EME (Encrypted Media Extensions) plugin.\n */\n options = videojs.obj.merge(options, { plugins: { eme: true }});\n super(tag, options, ready);\n }\n\n /**\n * A getter/setter for the media's audio track.\n * Activates the audio track according to the language and kind properties.\n * Falls back on the first audio track found if the kind property is not satisfied.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack/kind\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack/language\n *\n * @param {import('./typedef').TrackSelector} [trackSelector]\n *\n * @example\n * // Get the current audio track\n * player.audioTrack();\n *\n * @example\n * // Activate an audio track based on language and kind properties\n * player.audioTrack({language:'en', kind:'description'});\n *\n * @example\n * // Activate first audio track found corresponding to language\n * player.audioTrack({language:'fr'});\n *\n * @return {import('video.js/dist/types/tracks/audio-track').default | undefined} The\n * currently enabled audio track. See {@link https://docs.videojs.com/audiotrack}.\n */\n audioTrack(trackSelector) {\n const audioTracks = Array.from(this.player().audioTracks());\n\n if (!trackSelector) {\n return audioTracks.find((audioTrack) => audioTrack.enabled);\n }\n\n const { kind, language } = trackSelector;\n const audioTrack =\n audioTracks.find(\n (audioTrack) =>\n audioTrack.language === language && audioTrack.kind === kind\n ) || audioTracks.find((audioTrack) => audioTrack.language === language);\n\n if (audioTrack) {\n audioTrack.enabled = true;\n }\n\n return audioTrack;\n }\n\n /**\n * Calculates an array of ranges based on the `buffered()` data.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/buffered\n *\n * @returns {Array<{start: number, end: number}>} An array of objects representing start and end points of buffered ranges.\n */\n bufferedRanges() {\n const ranges = [];\n\n for (let i = 0; i < this.buffered().length; i++) {\n const start = this.buffered().start(i);\n const end = this.buffered().end(i);\n\n ranges.push({ start, end });\n }\n\n return ranges;\n }\n\n /**\n * Get the percent (as a decimal) of the media that's been played.\n * This method is not a part of the native HTML video API.\n *\n * Live streams with DVR are not currently supported.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement#htmlmediaelement.played\n *\n * @return {number}\n * A decimal between 0 and 1 representing the percent\n * that is played 0 being 0% and 1 being 100%\n */\n playedPercent() {\n if (!Number.isFinite(this.duration())) return NaN;\n\n let timePlayed = 0;\n\n for (let i = 0; i != this.played().length; i++) {\n timePlayed += this.played().end(i) - this.played().start(i);\n }\n\n const percentPlayed = timePlayed / this.duration();\n\n return percentPlayed;\n }\n\n /**\n * Get an array of ranges based on the `played` data.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement#htmlmediaelement.played\n *\n * @returns {Array<{start: number, end: number}>} An array of objects representing start and end points of played ranges.\n */\n playedRanges() {\n const ranges = [];\n\n for (let i = 0; i < this.played().length; i++) {\n const start = this.played().start(i);\n const end = this.played().end(i);\n\n ranges.push({ start, end });\n }\n\n return ranges;\n }\n\n /**\n * Calculates an array of ranges based on the `seekable()` data.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/seekable\n *\n * @returns {Array<{start: number, end: number}>} An array of objects representing start and end points of seekable ranges.\n */\n seekableRanges() {\n const ranges = [];\n\n for (let i = 0; i < this.seekable().length; i++) {\n const start = this.seekable().start(i);\n const end = this.seekable().end(i);\n\n ranges.push({ start, end });\n }\n\n return ranges;\n }\n\n /**\n * A getter/setter for the media's text track.\n * Activates the text track according to the language and kind properties.\n * Falls back on the first text track found if the kind property is not satisfied.\n * Disables all subtitle tracks that are `showing` if the `trackSelector` is truthy but does not satisfy any condition.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TextTrack/kind\n * @see https://developer.mozilla.org/en-US/docs/Web/API/textTrack/language\n *\n * @param {import('./typedef').TrackSelector} [trackSelector]\n *\n * @example\n * // Get the current text track\n * player.textTrack();\n *\n * @example\n * // Disable all text tracks has a side effect\n * player.textTrack('off');\n * player.textTrack({});\n *\n * @example\n * // Activate an text track based on language and kind properties\n * player.textTrack({language:'en', kind:'captions'});\n *\n * @example\n * // Activate first text track found corresponding to language\n * player.textTrack({language:'fr'});\n *\n * @return {import('video.js/dist/types/tracks/text-track').default | undefined} The\n * currently enabled text track. See {@link https://docs.videojs.com/texttrack}.\n */\n textTrack(trackSelector) {\n const textTracks = Array.from(this.player().textTracks()).filter(\n (textTrack) => !['chapters', 'metadata'].includes(textTrack.kind)\n );\n\n if (!trackSelector) {\n return textTracks.find((textTrack) => textTrack.mode === 'showing');\n }\n\n textTracks.forEach((textTrack) => (textTrack.mode = 'disabled'));\n\n const { kind, language } = trackSelector;\n const textTrack =\n textTracks.find((textTrack) => {\n if (textTrack.language === language && textTrack.kind === kind) {\n textTrack.mode = 'showing';\n }\n\n return textTrack.mode === 'showing';\n }) ||\n textTracks.find((textTrack) => {\n if (textTrack.language === language) {\n textTrack.mode = 'showing';\n }\n\n return textTrack.mode === 'showing';\n });\n\n return textTrack;\n }\n}\n\nvideojs.registerComponent('player', Player);\n\nexport default Player;\n","import { version } from '../package.json';\nimport videojs from 'video.js';\nimport './components/player.js';\n\n/**\n * Pillarbox is an alias for the video.js namespace with additional options.\n *\n * @namespace\n * @see https://docs.videojs.com/module-videojs-videojs\n * @type {videojs}\n */\nconst pillarbox = videojs;\n\npillarbox.VERSION = {\n pillarbox: version,\n videojs: videojs.VERSION,\n [videojs.VhsSourceHandler.name]: videojs.VhsSourceHandler.VERSION,\n eme: videojs.getPlugin('eme').VERSION,\n};\n\n/**\n * Enable smooth seeking for Pillarbox.\n *\n * @see [Video.js enableSmoothSeeking Option]{@link https://videojs.com/guides/options/#enablesmoothseeking}\n * @type {boolean}\n * @default true\n */\npillarbox.options.enableSmoothSeeking = true;\n/**\n * Enable fill mode for the video player, allowing it to expand to fill the container.\n *\n * @see [Video.js Fill Option]{@link https://videojs.com/guides/layout/#fill-mode}\n * @type {boolean}\n * @default true\n */\npillarbox.options.fill = true;\n/**\n * Configuration options for HTML5 settings in Pillarbox.\n *\n * @see [VHS useForcedSubtitles Option]{@link https://github.com/videojs/http-streaming/blob/main/README.md#useforcedsubtitles}\n * @type {Object}\n * @property {Object} vhs - Configuration for the Video.js HTTP Streaming.\n * @property {boolean} useForcedSubtitles - Enables the player to display forced subtitles by default.\n * Forced subtitles are pieces of information intended for display when no other text representation\n * is selected. They are used to clarify dialogue, provide alternate languages, display texted graphics,\n * or present location/person IDs that are not otherwise covered in the dubbed/localized audio.\n */\npillarbox.options.html5 = {\n vhs: { useForcedSubtitles: true }\n};\n/**\n * Configuration for the live tracker.\n *\n * @see [Video.js liveTracker Option]{@link https://videojs.com/guides/options/#livetrackertrackingthreshold}\n * @type {Object}\n * @property {number} trackingThreshold - A threshold that controls when the liveui should be shown.\n * @property {number} liveTolerance - An option that controls how far from the seekable end should be considered live playback.\n */\npillarbox.options.liveTracker = {\n trackingThreshold: 120,\n liveTolerance: 15,\n};\n/**\n * Allows the player to use the live ui that includes:\n *\n * - A progress bar for seeking within the live window\n * - A button that can be clicked to seek to the live edge with a circle indicating if you are at the live edge or not.\n *\n * @see [Video.js liveui Option]{@link https://videojs.com/guides/options/#liveui}\n * @type {boolean}\n */\npillarbox.options.liveui = true;\n/**\n * Indicates that the video is to be played \"inline\", that is within the element's playback area.\n *\n * @see [Video element playsinline attribute]{@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video#playsinline}\n * @type {boolean}\n */\npillarbox.options.playsinline = true;\n/**\n * Enable responsive mode, this will cause the player to customize itself based on responsive breakpoints.\n *\n * @see [Video.js Responsive Option]{@link https://videojs.com/guides/options/#responsive}\n * @type {boolean}\n */\npillarbox.options.responsive = true;\n/**\n * A placeholder for accessing trackers directly from the player.\n *\n * @type {Object}\n */\npillarbox.options.trackers = {};\n\nexport default pillarbox;\n","/**\n * Represents a data provider for constructing URLs and handling requests.\n * @class\n * @ignore\n */\nclass DataProvider {\n /**\n * Creates an instance of DataProvider.\n *\n * @param {string} [hostName='il.srgssr.ch'] The base host name for constructing URLs\n */\n constructor(hostName = 'il.srgssr.ch') {\n this.setIlHost(hostName);\n }\n\n /**\n * Sets the integration layer host name.\n *\n * @param {string} hostName The host name to set\n */\n setIlHost(hostName) {\n this.baseUrl = `${hostName}/integrationlayer/2.1/`;\n }\n\n /**\n * Handles requests by constructing URLs and fetching data.\n *\n * This provides unified error handling, regardless of the urlHandler used.\n *\n * @param {Function} urlHandler A function that constructs the URL\n *\n * @returns {Promise<import('../model/MediaComposition.js').default>} A promise with the fetched data\n */\n handleRequest(urlHandler) {\n return async (urn) => {\n const url = typeof urlHandler === 'function' ? urlHandler(urn) : this.mediaCompositionUrlHandler(urn);\n const response = await fetch(url);\n\n if (!response.ok) {\n throw response;\n }\n\n /** @type {import('../model/MediaComposition.js').default} */\n const data = await response.json();\n\n return data;\n };\n }\n\n /**\n * Gets the media composition URL by URN.\n *\n * @param {string} urn The URN for the media composition\n *\n * @returns {string} The constructed URL\n */\n mediaCompositionUrlHandler(urn) {\n return `https://${this.baseUrl}mediaComposition/byUrn/${urn}?onlyChapters=true&vector=portalplay`;\n }\n}\n\nexport default DataProvider;\n","const SCALE = {\n WIDTH_240: '240',\n WIDTH_320: '320',\n WIDTH_480: '480',\n WIDTH_960: '960',\n WIDTH_1920: '1920',\n};\n\nconst FORMAT = {\n JPG: 'jpg',\n WEBP: 'webp',\n PNG: 'png',\n};\n\nconst IMAGE_SERVICE_URL = 'https://il.srgssr.ch/images/';\n\n/**\n * @class Image\n */\nclass Image {\n /**\n * Generates the image scaling URL.\n *\n * @property {Object} image is the object representation of an image.\n * @property {String} [image.url] is the image URL.\n * @property {String} [image.width=960] is the width of the image, default value 960.\n * @property {String} [image.format=jpg] is the format of the image, default value jpg.\n * @property {String} [imageServiceUrl] Url of the image service that needs to comply with the specification defined by the IL.\n *\n * @see https://confluence.srg.beecollaboration.com/pages/viewpage.action?spaceKey=SRGPLAY&title=Project+-+Image+Service\n *\n * @returns {String|undefined} the image scaling URL.\n */\n static scale(\n { url, width = SCALE.WIDTH_960, format = FORMAT.JPG } = {},\n imageServiceUrl = IMAGE_SERVICE_URL\n ) {\n if (!url) return;\n\n const scaleUrl = new URL(imageServiceUrl);\n\n scaleUrl.searchParams.set('imageUrl', url);\n scaleUrl.searchParams.set('format', format);\n scaleUrl.searchParams.set('width', width);\n\n return decodeURIComponent(scaleUrl.href);\n }\n\n static get JPG() {\n return FORMAT.JPG;\n }\n\n static get PNG() {\n return FORMAT.PNG;\n }\n\n static get WEBP() {\n return FORMAT.WEBP;\n }\n\n static get WIDTH_240() {\n return SCALE.WIDTH_240;\n }\n\n static get WIDTH_320() {\n return SCALE.WIDTH_320;\n }\n\n static get WIDTH_480() {\n return SCALE.WIDTH_480;\n }\n\n static get WIDTH_960() {\n return SCALE.WIDTH_960;\n }\n\n static get WIDTH_1920() {\n return SCALE.WIDTH_1920;\n }\n}\n\nexport default Image;\n","const DRM_VENDORS = {\n WIDEVINE: 'com.widevine.alpha',\n FAIRPLAY: 'com.apple.fps.1_0',\n PLAYREADY: 'com.microsoft.playready',\n};\n\n/**\n * @class Drm\n */\nclass Drm {\n /**\n * Build the keySystems object according to the DRM vendor.\n *\n * @param {Array.<import('../dataProvider/model/typedef').DrmMetadata>} drmList The DRM list from the media composition.\n *\n * @returns {import('./typedef').KeySystems} The resulting keySystems.\n */\n static buildKeySystems(drmList = []) {\n const keySystems = {};\n\n drmList.forEach((drmVendor) => {\n const type = Drm.vendors[drmVendor.type];\n\n if (Drm.vendors.FAIRPLAY === type) {\n const { certificateUrl: certificateUri, licenseUrl: licenseUri } =\n drmVendor;\n\n keySystems[type] = {\n certificateUri,\n licenseUri,\n };\n } else {\n keySystems[type] = drmVendor.licenseUrl;\n }\n });\n\n return {\n keySystems,\n };\n }\n\n /**\n * Check if some of the resources have DRM.\n *\n * @param {Array.<import('../dataProvider/model/typedef').MainResource>} resources\n *\n * @returns {boolean} true if some of the resources have DRM, false otherwise.\n */\n static hasDrm(resources) {\n return resources.some(({ drmList }) => drmList && drmList.length > 0);\n }\n\n /**\n * Get DRM vendors.\n */\n static get vendors() {\n return DRM_VENDORS;\n }\n}\n\nexport default Drm;\n","const TOKEN_TYPES = {\n AKAMAI: 'AKAMAI',\n NONE: 'NONE',\n};\n\n/**\n * @class AkamaiTokenService\n */\nclass AkamaiTokenService {\n /**\n * Get the acl path.\n *\n * @param {URL} streamUrl\n *\n * @returns {String}\n */\n static aclPath(streamUrl) {\n const path = streamUrl.pathname;\n\n return `${path.substring(0, path.lastIndexOf('/') + 1)}*`;\n }\n\n /**\n * AKAMAI\n *\n * @type {String}\n */\n static get AKAMAI() {\n return TOKEN_TYPES.AKAMAI;\n }\n\n /**\n * Check if the resources are protected by an Akamai token.\n * Keep in mind, as we are using the 'some' function,\n * if the resources have at least one resource\n * protected by a token it returns true!\n *\n * @param {Array.<import('../dataProvider/model/typedef').MainResource>} resources\n *\n * @returns {Boolean}\n */\n static hasToken(resources) {\n return resources.some((resource) =>\n AkamaiTokenService.isAkamai(resource.tokenType));\n }\n\n /**\n * Check if the token type is AKAMAI.\n *\n * @param {String} tokentype\n *\n * @returns {Boolean}\n */\n static isAkamai(tokentype) {\n return TOKEN_TYPES.AKAMAI === tokentype;\n }\n\n /**\n * Check if the token type is NONE.\n *\n * @param {String} tokentype\n *\n * @returns {Boolean}\n */\n static isNone(tokentype) {\n return TOKEN_TYPES.NONE === tokentype;\n }\n\n /**\n * NONE\n *\n * @type {String}\n */\n static get NONE() {\n return TOKEN_TYPES.NONE;\n }\n\n /**\n * Generate the stream URL with the akamai token.\n *\n * @param {import('../dataProvider/model/typedef').MainResource} source\n * @param {String} tokenServerUrl\n *\n * @returns {Promise.<import('../dataProvider/model/typedef').MainResource>}\n */\n static tokenize(source, tokenServerUrl) {\n const streamUrlToTokenize = new URL(`${source.url}`);\n const acl = AkamaiTokenService.aclPath(streamUrlToTokenize);\n const url = `${tokenServerUrl}${encodeURIComponent(acl)}`;\n\n return fetch(url)\n .then((response) => {\n if (response.ok) {\n return response.json();\n }\n\n return Promise.reject({\n status: response.status,\n statusText: response.statusText,\n });\n })\n .then(({ token: { authparams }}) => {\n const akamaiAuthParams = new URLSearchParams(authparams);\n\n akamaiAuthParams.forEach((v, k) =>\n streamUrlToTokenize.searchParams.set(k, v));\n\n return Object.assign({}, source, {\n url: streamUrlToTokenize.toString(),\n });\n })\n .catch((reason) => {\n return Promise.reject(reason);\n });\n }\n\n /**\n * Generate a token for each source\n *\n * @template {import('../dataProvider/model/typedef').MainResource} T\n * @param {Array.<T>} sources\n * @param {String} tokenServerUrl\n *\n * @returns {Promise.<Array.<T>>}\n */\n static tokenizeSources(\n sources,\n tokenServerUrl = 'https://tp.srgssr.ch/akahd/token?acl='\n ) {\n const tokenizedSources = [];\n\n sources.forEach((source) => {\n const tokenizedSource = AkamaiTokenService.tokenize(\n source,\n tokenServerUrl\n );\n\n tokenizedSources.push(tokenizedSource);\n });\n\n return Promise.all(tokenizedSources)\n .then((values) => values)\n .catch((reason) => Promise.reject(reason));\n }\n}\n\nexport default AkamaiTokenService;\n","/**\n * Exhaustive list of player events.\n *\n * See below the documentation related to the media events\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement#events\n *\n * @namespace {Object} PlayerEvents\n */\n\n/**\n * Triggered when the media can start playing.\n *\n * @event PlayerEvents#CAN_PLAY\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/canplay_event\n */\nexport const CAN_PLAY = 'canplay';\n\n/**\n * Triggered when the media can be played through to the end without buffering.\n *\n * @event PlayerEvents#CAN_PLAY_THROUGH\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/canplaythrough_event\n */\nexport const CAN_PLAY_THROUGH = 'canplaythrough';\n\n/**\n * Triggered when the duration of the media changes.\n *\n * @event PlayerEvents#DURATION_CHANGE\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/durationchange_event\n */\nexport const DURATION_CHANGE = 'durationchange';\n\n/**\n * Triggered when the media element is emptied (e.g., reset as part of the seeking process).\n *\n * @event PlayerEvents#EMPTIED\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/emptied_event\n */\nexport const EMPTIED = 'emptied';\n\n/**\n * Triggered when the media playback has ended.\n *\n * @event PlayerEvents#ENDED\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/ended_event\n */\nexport const ENDED = 'ended';\n\n/**\n * Triggered when an error occurs during media playback.\n *\n * @event PlayerEvents#ERROR\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/error_event\n */\nexport const ERROR = 'error';\n\n/**\n * Triggered when the media data has been loaded.\n *\n * @event PlayerEvents#LOADED_DATA\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/loadeddata_event\n */\nexport const LOADED_DATA = 'loadeddata';\n\n/**\n * Triggered when metadata for the media has been loaded.\n *\n * @event PlayerEvents#LOADED_METADATA\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/loadedmetadata_event\n */\nexport const LOADED_METADATA = 'loadedmetadata';\n\n/**\n * Triggered when the browser starts looking for media data.\n *\n * @event PlayerEvents#LOAD_START\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/loadstart_event\n */\nexport const LOAD_START = 'loadstart';\n\n/**\n * Triggered when the media playback is paused.\n *\n * @event PlayerEvents#PAUSE\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/pause_event\n */\nexport const PAUSE = 'pause';\n\n/**\n * Triggered when the media playback is resumed or started.\n *\n * @event PlayerEvents#PLAY\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/play_event\n */\nexport const PLAY = 'play';\n\n/**\n * Triggered when the media playback is in progress.\n *\n * @event PlayerEvents#PLAYING\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/playing_event\n */\nexport const PLAYING = 'playing';\n\n/**\n * Triggered as the media is being loaded.\n *\n * @event PlayerEvents#PROGRESS\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/progress_event\n */\nexport const PROGRESS = 'progress';\n\n/**\n * Triggered when the playback rate changes.\n *\n * @event PlayerEvents#RATE_CHANGE\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/ratechange_event\n */\nexport const RATE_CHANGE = 'ratechange';\n\n/**\n * Triggered when a seek operation is completed.\n *\n * @event PlayerEvents#SEEKED\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/seeked_event\n */\nexport const SEEKED = 'seeked';\n\n/**\n * Triggered when a seek operation is in progress.\n *\n * @event PlayerEvents#SEEKING\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/seeking_event\n */\nexport const SEEKING = 'seeking';\n\n/**\n * Triggered when the media playback is stalled.\n *\n * @event PlayerEvents#STALLED\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/stalled_event\n */\nexport const STALLED = 'stalled';\n\n/**\n * Triggered when media loading is suspended.\n *\n * @event PlayerEvents#SUSPEND\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/suspend_event\n */\nexport const SUSPEND = 'suspend';\n\n/**\n * Triggered when the current playback position is updated.\n *\n * @event PlayerEvents#TIME_UPDATE\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/timeupdate_event\n */\nexport const TIME_UPDATE = 'timeupdate';\n\n/**\n * Triggered when the volume is changed.\n *\n * @event PlayerEvents#VOLUME_CHANGE\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/volumechange_event\n */\nexport const VOLUME_CHANGE = 'volumechange';\n\n/**\n * Triggered when the media playback is waiting for data.\n *\n * @event PlayerEvents#WAITING\n * @type {string}\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/waiting_event\n */\nexport const WAITING = 'waiting';\n","import * as PlayerEvents from '../utils/PlayerEvents.js';\nimport Pillarbox from '../pillarbox.js';\n/* eslint max-lines-per-function: [\"error\", 200] */\n/* eslint max-statements: [\"error\", 20]*/\n/* eslint complexity: [\"error\", 10]*/\n/**\n * SRG analytics\n * @class SRGAnalytics\n * @ignore\n *\n * ### Script URL\n * JS script : https://colibri-js.akamaized.net/penguin/tc_SRGGD_11.js\n *\n * ### Official documentation\n * Variables list\n * @see https://confluence.srg.beecollaboration.com/display/INTFORSCHUNG/Datalayer+for+media+players\n *\n * Standard event sequences\n * @see https://confluence.srg.beecollaboration.com/display/INTFORSCHUNG/standard+streaming+events%3A+sequence+of+events+for+media+player+actions\n *\n * Review of Standard Media Actions\n * @see https://confluence.srg.beecollaboration.com/display/INTFORSCHUNG/Implementation+Concept+-+draft\n *\n * ComScore Implementation Guide\n * @see https://www.dropbox.com/sh/cdwuikq0abxi21m/AABmSyXYKUTWSAwRZgQA9Ujna/JavaScript%20Latest%20Version?dl=0&preview=Comscore_Library-JavaScript-Streaming_Tag-Implementation_Guide-International.pdf&subfolder_nav_tracking=1\n *\n * ### Variables list\n * - 'event_id', // init | play | stop | pos | pause | seek | uptime | eof\n * - 'event_timestamp', // Seems to be generated automatically from the documentation, but the TP overrides it\n * - 'event_name', // NA TP seems to not sending this variable\n * - 'event_source', // NA TP seems to not sending this variable\n * - 'event_name', // NA TP seems to not sending this variable\n * - 'event_value', // NA TP seems to not sending this variable\n * - 'navigation_environment', // prod | preprod\n * - 'media_subtitles_on', // string true | false\n * - 'media_timeshift', // need better description\n * - 'media_quality', // SD | HD ?\n * - 'media_bandwidth', // NA for the web, 64000\n * - 'media_volume', // from 0 to 100\n * - 'media_embedding_url', //\n * - 'media_player_name', // videojs | letterbox-web ?\n * - 'media_chromecast_selected', // boolean true | false\n * - 'media_player_version', // player's version\n * - 'media_player_display', // is the player mode, on the TP : inline, embed etc..\n * - 'media_audio_track', // NA\n * - 'media_position_real', // NA\n * - 'media_time_spent', // NA\n * - 'device_id', // NA\n * - 'user_id_log_in', // NA only RTS has log in today\n * - 'media_thumbnail', // Not required by the spec but sended by the TP\n * - 'media_bu_distributer', // Not required by the spec but sended by the TP\n *\n *\n * ### Sequence stories\n *\n * __Story 1 (AoD/VOD-basics)__: A VoD is played. The user does not interact with the player. The VoD plays to its end.\n *\n * Hints:\n * - Media sessions always start with PLAY. They end with STOP or EOF (or with PAUSE or last POS)\n * - POS is sent ever 30s\n *\n *\n * __Story 2 (livestream-basics A)__: A Livestream is played. The user does not interact with the player. After 61 seconds, playback is paused.\n *\n * Hints:\n * - Media sessions always start with PLAY. They end with STOP (or, worse for data quailty, with PAUSE or last POS/UPTIME)\n * - UPTIME is sent only for livestreams\n * - POS is sent ever 30s, UPTIME every 60s with inital UPTIME after 30s.\n * - This is the interval: 30s: POS + UPTIME; 60s: POS; 90s: POS + UPTIME; ...\n *\n *\n * __Story 3 (Seeking a VoD/AoD)__: A VoD is played. User seeks in the VoD/AoD.\n *\n * Hints:\n * - Once the Media Player slider is released (seek is over), another action to finish up the seeking is initiated. Typically this is PLAY. For that second PLAY, the media position has altered.\n *\n *\n * __Story 4 (Seeking a livestream)__: A Livestream is played. User goes back in the livestream.\n *\n * Hints:\n * - Once the Media Player slider is released (seek is over), another action to finish up the seeking is initiated. Typically this is PLAY. For that second PLAY, the a new variable, media_timeshift is passed.\n * - For livestreams media_position is always the \"time passed on your watch\" - regardless of the SEEK event. So, if 1 second after PLAY the slider is moved back 600 seconds, then:\n * 1. The the value of media_timeshift is '600'.\n * 2. The value of media_position is '1'.\n */\nclass SRGAnalytics {\n constructor(\n player,\n {\n debug = false,\n environment = 'prod',\n playerVersion = 'none',\n tagCommanderScriptURL = '//colibri-js.akamaized.net/penguin/tc_SRGGD_11.js',\n } = {}\n ) {\n this.isDebugEnabled = debug;\n this.elapsedPlaybackTime = 0;\n this.environment = environment;\n this.hasStarted = false;\n this.heartBeatIntervalId = undefined;\n /* Set to true when 'init' event is sent or queued. */\n this.initialized = false;\n this.isSeeking = false;\n this.isWaiting = false;\n this.mediaSession = 0;\n this.pendingQueue = [];\n this.pendingTagCommanderReload = false;\n this.player = player;\n this.playerVersion = playerVersion;\n this.srcMediaData = undefined;\n this.startPlaybackSession = 0;\n this.tagCommanderScriptURL = tagCommanderScriptURL;\n this.trackedCurrentTime = 0;\n this.uptimeIntervalId = undefined;\n\n this.initScript();\n this.initListeners();\n }\n\n /**\n * Sent when the window, the document and its resources are about to be unloaded.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event\n */\n beforeunload() {\n this.notify('stop');\n }\n\n /**\n * Clear timers used to send uptime and heartbeat.\n */\n clearTimers() {\n clearInterval(this.heartBeatIntervalId);\n clearInterval(this.uptimeIntervalId);\n clearTimeout(this.uptimeTimeoutId);\n }\n\n /**\n * Get the tracked current time in seconds.\n *\n * @returns {Number} current time in seconds\n */\n currentTime() {\n // see PLAYRTS-2771\n return Math.round(this.trackedCurrentTime);\n }\n\n /**\n * Get or set debug mode.\n *\n * @returns {Boolean|undefined}\n */\n debug(enabled) {\n if (enabled === undefined) {\n return this.isDebugEnabled || this.player.debug();\n }\n\n this.isDebugEnabled = Boolean(enabled);\n }\n\n /**\n * Destroy all properties and setIntervals to avoid mixing media sessions.\n */\n destroy() {\n this.clearTimers();\n\n if (!window.tc_vars) {\n window.tc_vars = {};\n }\n this.elapsedPlaybackTime = 0;\n this.hasStarted = false;\n this.heartBeatIntervalId = undefined;\n this.initialized = false;\n this.isWaiting = false;\n this.mediaSession = 0;\n this.pendingQueue = [];\n this.srcMediaData = undefined;\n this.startPlaybackSession = 0;\n this.trackedCurrentTime = 0;\n this.uptimeIntervalId = undefined;\n }\n\n /**\n * Dispose all listeners used to send analytics data to TagCommander.\n *\n * Calls `beforeunload` to send a notify stop.\n * Clear intervals and timeouts.\n *\n * __Used events__\n * - beforeunload\n * - emptied\n * - ended\n * - loadstart\n * - loadeddata\n * - play\n * - pause\n * - timeupdate\n */\n dispose() {\n this.beforeunload();\n this.clearTimers();\n\n window.removeEventListener('beforeunload', this.beforeunloadListener);\n\n this.player.off(PlayerEvents.EMPTIED, this.emptiedListener);\n this.player.off(PlayerEvents.ENDED, this.endedListener);\n this.player.off(PlayerEvents.LOAD_START, this.loadstartListener);\n this.player.off(PlayerEvents.LOADED_DATA, this.loadeddataListener);\n this.player.off(PlayerEvents.PLAYING, this.playListener);\n this.player.off(PlayerEvents.PAUSE, this.pauseListener);\n this.player.off(PlayerEvents.RATE_CHANGE, this.rateChangeListener);\n this.player.off(PlayerEvents.SEEKING, this.seekingListener);\n this.player.off(PlayerEvents.TIME_UPDATE, this.timeUpdateListener);\n this.player.off(PlayerEvents.WAITING, this.waitingListener);\n }\n\n /**\n * Sent before a new media is loading.\n * - Destroy all properties.\n * - Send a notify stop if the media is not ended and new media is about to be loaded.\n */\n emptied() {\n if (!this.player.ended()) {\n this.notify('stop');\n }\n }\n\n /**\n * Sent when playback completes.\n *\n * @see https://docs.videojs.com/player#event:ended\n */\n ended() {\n this.notify('eof');\n\n this.mediaSession = 0;\n\n this.clearTimers();\n }\n\n /**\n * Flush the queued events when tc event script is loaded.\n */\n flush() {\n if (this.isTrackerDisabled()) return;\n\n if (this.pendingTagCommanderReload && window.tC) {\n window.tC.container.reload();\n this.pendingTagCommanderReload = false;\n }\n\n if (window.tc_events_11 && this.pendingQueue.length > 0) {\n this.pendingQueue.forEach((notification) => {\n window.tc_events_11(\n this.player.el(),\n notification.action,\n notification.labels\n );\n });\n\n this.pendingQueue = [];\n }\n }\n\n /**\n * Get the language of the current audio track.\n *\n * @returns {String} empty string or uppercase language.\n */\n getCurrentAudioTrack() {\n const currentTrack = Array.from(this.player.audioTracks()).find(\n (track) => track.enabled\n );\n let language = 'und';\n\n if (currentTrack && !!currentTrack.language) {\n // eslint-disable-next-line prefer-destructuring\n language = currentTrack.language;\n }\n\n return currentTrack ? language.toUpperCase() : '';\n }\n\n /**\n * Get the language of the current text track.\n *\n * @returns {String} empty string or uppercase language.\n */\n getCurrentTextTrack() {\n const currentTrack = this.player.textTrack();\n let language = 'und';\n\n if (currentTrack && !!currentTrack.language) {\n // eslint-disable-next-line prefer-destructuring\n language = currentTrack.language;\n }\n\n return currentTrack ? language.toUpperCase() : '';\n }\n\n /**\n * Get the position inside the dvr window where the 0 represents the live edge\n *\n * @return {Number} 0 or the position in milliseconds\n */\n getDvrWindowPosition() {\n const { liveTracker } = this.player;\n const ct = (this.currentTime() - liveTracker.seekableStart()) | 0;\n const position = liveTracker.liveWindow() - ct;\n\n return position < 0 || position === Infinity ? 0 : position * 1000;\n }\n\n /**\n * Get the size of the live DVR window in milliseconds.\n *\n * @return {Number} DVR window size in milliseconds\n */\n getDvrWindowSize() {\n const isInfinity = this.player.liveTracker.liveWindow() === Infinity;\n const windowSize = this.player.liveTracker.liveWindow() * 1000;\n\n return isInfinity ? 0 : windowSize;\n }\n\n /**\n * Get the elapsed playback time in seconds.\n *\n * @returns {Number} elapsed time in seconds\n */\n getElapsedPlaybackTime() {\n if (this.startPlaybackSession) {\n return this.getElapsedPlayingTime();\n }\n\n return this.elapsedPlaybackTime;\n }\n\n /**\n * Get the elapsed playing time in seconds.\n *\n * @returns {Number} elapsed time in seconds\n */\n getElapsedPlayingTime() {\n const playingSession = (SRGAnalytics.now() - this.startPlaybackSession) | 0;\n\n return this.elapsedPlaybackTime + playingSession;\n }\n\n /**\n * Set all event labels to be sent to TagCommander. The event labels are updated whenever a new event occurs.\n *\n * @param {String} eventName init | play | stop | pos | pause | seek | uptime | eof\n *\n * @returns {Object} JSON to be sent to TagCommander\n */\n getEventLabels(eventName) {\n const labels = {\n event_id: eventName,\n event_timestamp: SRGAnalytics.now(),\n media_dvr_window_length: 0,\n media_dvr_window_offset: 0,\n media_is_dvr: false,\n media_is_live: false,\n media_mute: this.player.muted() ? '1' : '0',\n media_playback_rate: this.player.playbackRate(),\n media_position: this.currentTime(),\n media_quality: this.srcMediaData.mediaData.quality,\n // TODO use media_is_dvr, media_is_live to define peach media_stream_type\n media_subtitles_on: this.isTextTrackEnabled(),\n media_volume: (this.player.volume() * 100).toFixed(0),\n navigation_environment: this.environment,\n };\n\n if (this.isAudioTrackEnabled()) {\n labels.media_audio_track = this.getCurrentAudioTrack();\n }\n\n if (this.isTextTrackEnabled()) {\n labels.media_subtitle_selection = this.getCurrentTextTrack();\n }\n\n // DVR or Live related labels\n if (!this.isMediaOnDemand()) {\n labels.media_is_live = true;\n labels.media_position = this.getElapsedPlaybackTime();\n }\n\n // DVR related labels\n if (this.isMediaDvr()) {\n labels.media_dvr_window_offset = this.getDvrWindowPosition() | 0;\n labels.media_dvr_window_length = this.getDvrWindowSize() | 0;\n\n labels.media_is_dvr = true;\n\n labels.media_timeshift = [PlayerEvents.PLAY, PlayerEvents.PAUSE].includes(\n eventName\n )\n ? this.timeShifted()\n : 0;\n }\n\n return labels;\n }\n\n /**\n * Set all internal labels to be sent to TagCommander. Internal labels are assigned once at initialisation time.\n */\n getInternalLabels() {\n const data = {\n media_bu_distributer: this.srcMediaData.mediaData.vendor,\n media_chromecast_selected: Boolean(this.player.tech(true).isCasting),\n media_embedding_url: document.referrer,\n media_player_display: 'default', // TODO implement if it still relevant\n media_player_name: 'pillarbox-web', // TODO add a property playerName in the constructor with a default value ?\n media_player_version: this.playerVersion,\n media_url: this.srcMediaData.src,\n };\n const analyticsMetadata =\n this.srcMediaData.mediaData.analyticsMetadata || {};\n\n window.tc_vars = Object.assign({}, window.tc_vars, data, analyticsMetadata);\n }\n\n /**\n * Heart beat, current position of a AoD/VoD (every 30s).\n *\n * @description The action pos should be sent regularly every 30 seconds.\n * It is used for tracking the viewed chapters of a video and the last position of the video, in case the user ends the video by closing the browser tab/window.\n *\n * - pos should be sent when the media player is in \"play mode\".\n * - once the video is paused or stopped, the timer for sending these actions must be stopped.\n *\n * @see https://confluence.srg.beecollaboration.com/display/INTFORSCHUNG/standard+streaming+events%3A+sequence+of+events+for+media+player+actions#standardstreamingevents:sequenceofeventsformediaplayeractions-mandatoryplayerevents\n */\n heartBeat() {\n this.heartBeatIntervalId = setInterval(() => {\n // Send only when playing\n if (!this.player.paused()) {\n this.notify('pos');\n }\n }, 30000);\n }\n\n /**\n * Initialize callbacks used to send analytics data to TagCommander.\n *\n * __Used events__\n * - beforeunload\n * - emptied\n * - ended\n * - loadstart\n * - loadeddata\n * - play\n * - pause\n * - ratechange\n * - seeking\n * - timeupdate\n * - waiting\n */\n initCallbacks() {\n this.beforeunloadListener = this.beforeunload.bind(this);\n this.emptiedListener = this.emptied.bind(this);\n this.endedListener = this.ended.bind(this);\n this.loadstartListener = this.loadstart.bind(this);\n this.loadeddataListener = this.loadeddata.bind(this);\n this.playListener = this.play.bind(this);\n this.pauseListener = this.pause.bind(this);\n this.rateChangeListener = this.rateChange.bind(this);\n this.seekingListener = this.seeking.bind(this);\n this.timeUpdateListener = this.timeUpdate.bind(this);\n this.waitingListener = this.waiting.bind(this);\n }\n\n /**\n * Initialize all listeners used to send analytics data to TagCommander.\n *\n * __Used events__\n * - beforeunload\n * - dispose\n * - emptied\n * - ended\n * - loadstart\n * - loadeddata\n * - play\n * - pause\n * - timeupdate\n * - waiting\n */\n initListeners() {\n this.initCallbacks();\n\n window.addEventListener('beforeunload', this.beforeunloadListener);\n\n this.player.on(PlayerEvents.EMPTIED, this.emptiedListener);\n this.player.on(PlayerEvents.ENDED, this.endedListener);\n this.player.on(PlayerEvents.LOAD_START, this.loadstartListener);\n this.player.on(PlayerEvents.LOADED_DATA, this.loadeddataListener);\n this.player.on(PlayerEvents.PLAYING, this.playListener);\n this.player.on(PlayerEvents.PAUSE, this.pauseListener);\n this.player.on(PlayerEvents.RATE_CHANGE, this.rateChangeListener);\n this.player.on(PlayerEvents.SEEKING, this.seekingListener);\n this.player.on(PlayerEvents.TIME_UPDATE, this.timeUpdateListener);\n this.player.on(PlayerEvents.WAITING, this.waitingListener);\n this.player.one('dispose', this.dispose.bind(this));\n }\n\n /**\n * Initialize TagCommander script dynamically and add it to the DOM\n */\n initScript() {\n const scriptId = 'tc_script__11';\n\n if (!document.querySelector(`#${scriptId}`)) {\n const script = document.createElement('script');\n const src = this.tagCommanderScriptURL;\n\n script.defer = true;\n script.id = scriptId;\n script.src = src;\n script.type = 'text/javascript';\n\n script.onload = (_e) => {\n this.flush();\n };\n\n document.body.appendChild(script);\n }\n }\n\n /**\n * Check if the audio track is enabled.\n *\n * @returns {Boolean} __true__ if enabled __false__ otherwise.\n */\n isAudioTrackEnabled() {\n return !!this.getCurrentAudioTrack();\n }\n\n /**\n * Check if the media is a live with DVR.\n *\n * @returns {Boolean} __true__ if it DVR __false__ otherwise.\n */\n isMediaDvr() {\n const { trackingThreshold } = this.player.liveTracker.options();\n\n return (\n !this.isMediaOnDemand() &&\n trackingThreshold < this.player.liveTracker.liveWindow()\n );\n }\n\n /**\n * Check if the media is a live.\n *\n * @returns {Boolean} __true__ if live __false__ otherwise.\n */\n isMediaLive() {\n const { trackingThreshold } = this.player.liveTracker.options();\n\n return (\n !this.isMediaOnDemand() &&\n trackingThreshold > this.player.liveTracker.liveWindow()\n );\n }\n\n /**\n * Check if the media is an on demand.\n *\n * @returns {Boolean} __true__ if on demand __false__ otherwise.\n */\n isMediaOnDemand() {\n return Number.isFinite(this.player.duration());\n }\n\n /**\n * Check if the text track is enabled.\n *\n * @returns {Boolean} __true__ if enabled __false__ otherwise.\n */\n isTextTrackEnabled() {\n return !!this.getCurrentTextTrack();\n }\n\n /**\n * Check if the tracker is disabled.\n *\n * @returns {Boolean} __true__ if disabled __false__ otherwise.\n */\n isTrackerDisabled() {\n if (!this.srcMediaData || !this.srcMediaData.mediaData)\n return true;\n\n if (!Array.isArray(this.srcMediaData.disableTrackers)) {\n return Boolean(this.srcMediaData.disableTrackers);\n }\n\n return Boolean(\n this.srcMediaData.disableTrackers.find(\n (tracker) => tracker.toLowerCase() === SRGAnalytics.name.toLowerCase()\n )\n );\n }\n\n /**\n * Sent when loading of the media begins.\n *\n * @see https://docs.videojs.com/player#event:loadstart\n */\n loadstart() {\n this.destroy();\n this.updateSrcMediaData(this.player.currentSource());\n\n if (this.isTrackerDisabled()) return;\n\n this.getInternalLabels();\n // Set ComScore labels\n this.reloadTagCommanderContainer();\n\n this.notify('buffer_start');\n this.hasStarted = false;\n }\n\n /**\n * The first frame of the media has finished loading.\n *\n * @see https://docs.videojs.com/player#event:loadeddata\n */\n loadeddata() {\n this.notify('init');\n this.initialized = true;\n\n this.notify('buffer_stop');\n }\n\n /**\n * Event logger that prints the current event, event labels and internal labels in the browser's console.\n *\n * @param {String} eventName init | play | stop | pos | pause | seek | uptime | eof\n * @param {Object} eventMetadata event metadata object\n * @param {String} severity log | warn | error\n */\n log(eventName, eventMetadata, severity = 'log') {\n if (this.debug()) {\n // eslint-disable-next-line\n console[severity](\n `SRGAnalytics:${eventName}`,\n eventMetadata,\n window.tc_vars\n );\n }\n }\n\n /**\n * Notify TagCommander all event and internal labels. If tc script is not available it queues all pending events.\n *\n * @param {String} eventName init | play | stop | pos | pause | seek | uptime | eof\n */\n notify(eventName, eventMetadata) {\n if (this.isTrackerDisabled()) return;\n\n try {\n this.flush();\n } catch (error) {\n this.log(eventName, error, 'error');\n }\n\n const labels = Object.assign(\n {},\n this.getEventLabels(eventName),\n eventMetadata\n );\n\n this.log(eventName, labels);\n\n try {\n if (window.tc_events_11) {\n window.tc_events_11(this.player.el(), eventName, labels);\n } else {\n this.pendingQueue.push({\n action: eventName,\n labels,\n });\n }\n } catch (error) {\n this.log(eventName, error, 'error');\n }\n }\n\n /**\n * Return the current timestamp in seconds.\n *\n * @returns {Number} Timestamp in seconds\n */\n static now() {\n return (Date.now() / 1000).toFixed(0);\n }\n\n /**\n * Sent when the playback state is no longer paused, as a result of the play method, or the autoplay attribute.\n *\n * @see https://docs.videojs.com/player#event:play\n */\n play() {\n if (!this.hasStarted) this.hasStarted = true;\n\n if (!this.startPlaybackSession && !this.isMediaOnDemand()) {\n this.startPlaybackSession = SRGAnalytics.now();\n }\n\n if (this.mediaSession === 0) {\n this.mediaSession = SRGAnalytics.now();\n\n this.heartBeat();\n this.uptime();\n }\n\n this.timeUpdate();\n this.notify('play');\n\n if (this.isSeeking) this.isSeeking = false;\n }\n\n /**\n * Sent when the playback state is changed to paused (paused property is true).\n * Pause event is sent if :\n * - The player is not scrubbing\n * - The stream is not a live only\n * - The current time is strictly inferior to the duration\n *\n * @see https://docs.videojs.com/player#event:pause\n */\n pause() {\n if (!this.isMediaOnDemand()) {\n this.elapsedPlaybackTime = this.getElapsedPlayingTime();\n this.startPlaybackSession = 0;\n }\n\n if (\n !this.player.seeking() &&\n !this.isMediaLive() &&\n this.player.currentTime() < this.player.duration()\n ) {\n this.notify('pause');\n\n return;\n }\n\n if (this.hasStarted && !this.isSeeking) {\n this.notify('seek');\n this.isSeeking = true;\n }\n }\n\n /**\n * Sent to ComScore when the playback rate changes.\n *\n * @see https://github.com/SRGSSR/srgletterbox-web/issues/761\n * @see https://jira.srg.beecollaboration.com/browse/ADI-256\n */\n rateChange() {\n this.notify('change_playback_rate');\n }\n\n /**\n * Reload the tagCommander container and set all ComScore labels\n */\n reloadTagCommanderContainer() {\n if (window.tC) {\n window.tC.container.reload();\n this.pendingTagCommanderReload = false;\n } else {\n this.pendingTagCommanderReload = true;\n }\n }\n\n /**\n * Sent when the current time is modified by the player's currentTime API.\n *\n * @see https://docs.videojs.com/player#event:seeking\n */\n seeking() {\n if (this.hasStarted && !this.player.paused() && !this.isSeeking) {\n this.notify('seek');\n this.isSeeking = true;\n }\n }\n\n /**\n * Track current time updates delayed by a tick.\n *\n * @see https://docs.videojs.com/player#event:timeupdate\n */\n timeUpdate() {\n if (!this.player.paused()) {\n this.trackedCurrentTime = this.player.currentTime();\n }\n }\n\n /**\n * Gets the number of seconds that separate from the live edge that is represented by 0.\n *\n * @returns {String}\n */\n timeShifted() {\n const isAtLiveEdge = this.player.liveTracker.atLiveEdge();\n const liveCurrentTime = this.player.liveTracker.liveCurrentTime();\n const currentTime = this.player.currentTime();\n const timeShifted = isAtLiveEdge\n ? 0\n : (liveCurrentTime - currentTime).toFixed(0);\n\n return timeShifted;\n }\n\n /**\n * Update the src media data.\n */\n updateSrcMediaData(srcMediaData) {\n this.srcMediaData = srcMediaData;\n }\n\n /**\n * Calculate the uptime when playing a live stream with or without DVR\n *\n * __Rules__:\n * - Send the first uptime after 30 seconds\n * - Send uptime each 60 seconds after the 30 seconds\n * - Uptime is sent only when playing\n */\n uptime() {\n const notifyUptime = () => {\n if (!this.player.paused() && !this.isMediaOnDemand()) {\n this.notify('uptime');\n }\n };\n\n // Send the first uptime after 30 seconds\n this.uptimeTimeoutId = setTimeout(() => {\n // Send only when playing\n notifyUptime();\n\n // Initialize the uptime interval after 30 seconds\n this.uptimeIntervalId = setInterval(() => {\n // Send only when playing\n notifyUptime();\n }, 60000);\n }, 30000);\n }\n\n /**\n * __ComScore__:\n * It's expected notifyBufferStart() to be called when the player starts buffering\n * and a call to notifyBufferStop() when content resumes after buffering.\n *\n * @see Item 2: https://jira.srg.beecollaboration.com/browse/PLAY-2628\n *\n * After the issue PLAYRTS-321\n * @see Fix: https://jira.srg.beecollaboration.com/browse/PLAYRTS-321?focusedCommentId=201023&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-201023\n * @see Fix: https://jira.srg.beecollaboration.com/browse/PLAYRTS-3065\n */\n waiting() {\n if (!this.initialized || this.isWaiting) {\n return;\n }\n\n const bufferStop = () => {\n this.isWaiting = false;\n this.notify('buffer_stop');\n };\n\n this.isWaiting = true;\n\n this.notify('buffer_start');\n\n // As Safari is not consistent with its playing event, it is better to use the timeupdate event.\n if (Pillarbox.browser.IS_ANY_SAFARI) {\n this.player.one(PlayerEvents.TIME_UPDATE, bufferStop);\n } else {\n // As Chromium-based browsers are not consistent with their timeupdate event, it is better to use the playing event.\n // Firefox is consistent with its playing event.\n this.player.one(PlayerEvents.PLAYING, bufferStop);\n }\n }\n}\n\nexport default SRGAnalytics;\n","/**\n * Represents the composition of media content.\n *\n * @class MediaComposition\n * @property {string} chapterUrn URN (Uniform Resource Name) of the associated chapter.\n * @property {string} segmentUrn URN of the associated segment.\n * @property {Episode} episode Associated episode.\n * @property {Show} show Associated show.\n * @property {Channel} channel Associated channel.\n * @property {Array.<Chapter>} chapterList List of associated chapters.\n * @property {Array.<Topic>} topicList List of associated topics.\n * @property {Object.<String, String>} analyticsData Analytics data associated with the media composition.\n * @property {Object.<String, String>} analyticsMetadata Metadata associated with analytics for the media composition.\n */\nclass MediaComposition {\n /**\n * Find a chapter by its URN.\n *\n * @param {String} urn\n *\n * @returns {Chapter} chapter\n */\n findChapterByUrn(urn) {\n if (this.chapterList) {\n const [chapter] = this.chapterList.filter(\n (element) => element.urn === urn\n );\n\n return chapter;\n }\n\n return undefined;\n }\n\n /**\n * Return a segment from main chapter following segmentUrn in mediaComposition.\n *\n * @returns {Segment|undefined} main segment\n */\n findMainSegment() {\n if (!this.segmentUrn) {\n return undefined;\n }\n\n const segmentList = this.getMainSegments();\n const [segment] = segmentList.filter(\n (element) => element.urn === this.segmentUrn\n );\n\n return segment;\n }\n\n /**\n * Find resource list by URN.\n *\n * @param {String} urn\n * @returns {Array.<Resource>|undefined} of resources\n */\n findResourceListByUrn(urn) {\n const chapterByUrn = this.findChapterByUrn(urn);\n\n if (chapterByUrn) {\n return chapterByUrn.resourceList || [];\n }\n\n return undefined;\n }\n\n /**\n * A list of chapters.\n *\n * @returns {Array.<Chapter>} of chapters\n */\n getChapters() {\n const AUDIO = 'AUDIO';\n\n if (this.getMainChapter().mediaType === AUDIO) return [];\n\n return this.chapterList.filter(({ mediaType }) => mediaType !== AUDIO);\n }\n\n /**\n * Filter external text tracks that are already available internally.\n *\n * __Rules:__\n * 1. TTML format is filtered\n *\n * 2. If both are empty that means only internal text tracks will be displayed\n * to the user as they are automatically loaded by the player.\n *\n * 3. If subtitleInformationList is missing from the MediaComposition and subtitleList\n * is available but the media contains internal text tracks that are also available internally.\n * It will result on a duplication client side.\n *\n * 4. If subtitleList and subtitleInformationList a merge between both will be operated,\n * removing the external text tracks already available internally.\n *\n *\n * @returns {Array.<Subtitle>} external text tracks\n */\n getFilteredExternalSubtitles() {\n const { subtitleList } = this.getMainChapter();\n const [{ subtitleInformationList } = {}] = this.getResourceList().filter(\n ({ subtitleInformationList }) => subtitleInformationList\n );\n const onlyHasExternalSubtitles = subtitleList && !subtitleInformationList;\n\n if (!subtitleList) {\n return [];\n }\n\n // TTML format is not supported\n const subtitles = subtitleList.filter(\n (subtitle) => subtitle.format !== 'TTML'\n );\n\n if (onlyHasExternalSubtitles) {\n return subtitles;\n }\n\n return subtitles.filter((subtitle) => {\n const addSubtitle = !subtitleInformationList.find(\n (subtitleInformation) =>\n subtitleInformation.locale === subtitle.locale &&\n subtitle.type === subtitleInformation.type\n );\n\n return addSubtitle;\n });\n }\n\n /**\n * Block reason for main chapter. This also uses current date for STARTDATE.\n *\n * @see BlockReason\n *\n * @returns {string | undefined} undefined if main chapter is not blocked\n */\n getMainBlockReason() {\n const mainChapter = this.getMainChapter();\n\n if (!mainChapter) {\n return undefined;\n }\n\n let { blockReason } = mainChapter;\n\n if (!blockReason && new Date() < this.getMainValidFromDate()) {\n blockReason = 'STARTDATE';\n }\n\n return blockReason;\n }\n\n /**\n * Get blocked segments from the main chapter.\n *\n * @returns {Array.<Segment>} of blocked segments\n */\n getMainBlockedSegments() {\n return this.getMainSegments().filter(segment => segment.blockReason);\n }\n\n /**\n * Get the mediaComposition's main chapter.\n *\n * @returns {Chapter}\n */\n getMainChapter() {\n if (!this.mainChapter) {\n this.mainChapter = this.findChapterByUrn(this.chapterUrn);\n }\n\n if (!this.mainChapter && this.chapterList && this.chapterList.length > 0) {\n [this.mainChapter] = this.chapterList;\n }\n\n return this.mainChapter;\n }\n\n /**\n * Get the main chapter's image URL decorated with default width and format.\n *\n * @returns {String|undefined} image URL\n */\n getMainChapterImageUrl() {\n const mainChapter = this.getMainChapter();\n\n if (!mainChapter || !mainChapter.imageUrl) {\n return undefined;\n }\n\n return mainChapter.imageUrl;\n }\n\n /**\n * Get main resources.\n *\n * @returns {Array.<MainResource>} array of sources.\n */\n // eslint-disable-next-line max-lines-per-function\n getMainResources() {\n const resourceList = this.getResourceList();\n\n if (!resourceList || !resourceList.length) {\n return undefined;\n }\n\n return resourceList.map((resource) => ({\n analyticsData: this.getMergedAnalyticsData(resource.analyticsData),\n analyticsMetadata: this.getMergedAnalyticsMetadata(\n resource.analyticsMetadata\n ),\n blockReason: this.getMainChapter().blockReason,\n blockedSegments: this.getMainBlockedSegments(),\n imageUrl: this.getMainChapterImageUrl(),\n chapters: this.getChapters(),\n drmList: resource.drmList,\n dvr: resource.dvr,\n eventData: this.getMainChapter().eventData,\n id: this.getMainChapter().id,\n imageCopyright: this.getMainChapter().imageCopyright,\n intervals: this.getMainTimeIntervals(),\n live: resource.live,\n mediaType: this.getMainChapter().mediaType,\n mimeType: resource.mimeType,\n presentation: resource.presentation,\n quality: resource.quality,\n streaming: resource.streaming,\n streamOffset: resource.streamOffset,\n subtitles: this.getFilteredExternalSubtitles(),\n title: this.getMainChapter().title,\n tokenType: resource.tokenType,\n url: resource.url,\n urn: this.chapterUrn,\n vendor: this.getMainChapter().vendor,\n }));\n }\n\n /**\n * Get segments of the main chapter ordered by markIn.\n *\n * @returns {Array.<Segment>} of segments\n */\n getMainSegments() {\n const mainChapter = this.getMainChapter();\n\n if (!this.mainSegments && mainChapter && mainChapter.segmentList) {\n this.mainSegments = mainChapter.segmentList;\n }\n\n return this.mainSegments || [];\n }\n\n /**\n * Retrieves an array of time intervals associated with the main chapter.\n *\n * @returns {Array.<TimeInterval>} An array of time intervals.\n */\n getMainTimeIntervals() {\n const {\n timeIntervalList = []\n } = this.getMainChapter() || {};\n\n return timeIntervalList;\n }\n\n /**\n * Compute a date from which this content is valid. Always return a date object.\n *\n * @returns {Date} date specified in media composition or EPOCH when no date present.\n */\n getMainValidFromDate() {\n const mainChapter = this.getMainChapter();\n\n if (!mainChapter) {\n return new Date(0);\n }\n\n const { validFrom } = mainChapter;\n\n if (validFrom) {\n return new Date(validFrom);\n }\n }\n\n /**\n * Get merged analytics data.\n *\n * @param {Object.<string, string>} analyticsData\n * @returns {Object.<string, string>} Merged analytics data.\n */\n getMergedAnalyticsData(analyticsData) {\n return {\n ...this.analyticsData,\n ...this.getMainChapter().analyticsData,\n ...analyticsData,\n };\n }\n\n /**\n * Get merged analytics metadata.\n *\n * @param {Object.<string, string>} analyticsMetadata\n * @returns {Object.<string, string>} Merged analytics metadata.\n */\n getMergedAnalyticsMetadata(analyticsMetadata) {\n return {\n ...this.analyticsMetadata,\n ...this.getMainChapter().analyticsMetadata,\n ...analyticsMetadata,\n };\n }\n\n /**\n * Get the chapter's resource list\n * @returns {Array.<Resource>} of resources\n */\n getResourceList() {\n const { resourceList } = this.getMainChapter();\n\n return resourceList || [];\n }\n}\n\nexport default MediaComposition;\n\n\n/**\n * @typedef {import('./typedef').Channel} Channel\n * @typedef {import('./typedef').Chapter} Chapter\n * @typedef {import('./typedef').Episode} Episode\n * @typedef {import('./typedef').Resource} Resource\n * @typedef {import('./typedef').Segment} Segment\n * @typedef {import('./typedef').Show} Show\n * @typedef {import('./typedef').Subtitle} Subtitle\n * @typedef {import('./typedef').TimeInterval} TimeInterval\n * @typedef {import('./typedef').Topic} Topic\n * @typedef {import('./typedef').MainResource} MainResource\n */\n","import Pillarbox from '../pillarbox.js';\nimport * as vjsLang from 'video.js/dist/lang/de.json';\nimport * as pillarboxLang from './de.json';\n\nPillarbox.addLanguage('de', {\n ...vjsLang,\n ...pillarboxLang,\n});\n","import Pillarbox from '../pillarbox.js';\nimport * as vjsLang from 'video.js/dist/lang/en.json';\nimport * as pillarboxLang from './en.json';\n\nPillarbox.addLanguage('en', {\n ...vjsLang,\n ...pillarboxLang,\n});\n","import Pillarbox from '../pillarbox.js';\nimport * as vjsLang from 'video.js/dist/lang/fr.json';\nimport * as pillarboxLang from './fr.json';\n\nPillarbox.addLanguage('fr', {\n ...vjsLang,\n ...pillarboxLang,\n});\n","import Pillarbox from '../pillarbox.js';\nimport * as vjsLang from 'video.js/dist/lang/it.json';\nimport * as pillarboxLang from './it.json';\n\nPillarbox.addLanguage('it', {\n ...vjsLang,\n ...pillarboxLang,\n});\n","import Pillarbox from '../pillarbox.js';\nimport * as pillarboxLang from './rm.json';\n\nPillarbox.addLanguage('rm', {\n ...pillarboxLang,\n});\n","import Pillarbox from '../../src/pillarbox.js';\nimport DataProvider from '../dataProvider/services/DataProvider.js';\nimport Image from '../utils/Image.js';\nimport Drm from '../utils/Drm.js';\nimport AkamaiTokenService from '../utils/AkamaiTokenService.js';\nimport SRGAnalytics from '../analytics/SRGAnalytics.js';\nimport MediaComposition from '../dataProvider/model/MediaComposition.js';\n\n// Translations\nimport '../lang/de.js';\nimport '../lang/en.js';\nimport '../lang/fr.js';\nimport '../lang/it.js';\nimport '../lang/rm.js';\n\n/**\n * @class SrgSsr\n */\nclass SrgSsr {\n /**\n * Adds blocked segments to the player.\n *\n * @param {import('video.js/dist/types/player').default} player\n * @param {Array<import('../dataProvider/model/typedef').Segment>} [segments=[]]\n */\n static addBlockedSegments(player, segments = []) {\n const trackId = 'srgssr-blocked-segments';\n const removeTrack = player.textTracks().getTrackById(trackId);\n\n if (removeTrack) {\n player.textTracks().removeTrack(removeTrack);\n }\n\n if (!Array.isArray(segments) || !segments.length) return;\n\n const blockedSegments = segments.filter(segment => segment.blockReason);\n\n if (!blockedSegments.length) return;\n\n SrgSsr.createTextTrack(player, trackId).then(segmentTrack => {\n blockedSegments.forEach(segment => {\n SrgSsr.addTextTrackCue(segmentTrack, segment);\n });\n\n player.textTracks().addTrack(segmentTrack);\n });\n }\n\n /**\n * Adds remote text tracks from an array of subtitles.\n *\n * @param {import('video.js/dist/types/player').default} player\n * @param {Array<import('../dataProvider/model/typedef').Subtitle>} [subtitles=[]]\n */\n static addRemoteTextTracks(player, subtitles = []) {\n if (!Array.isArray(subtitles)) return;\n\n subtitles.forEach(({\n type,\n language: label,\n locale: language,\n url: src\n }) => {\n player.addRemoteTextTrack({\n kind: type === 'SDH' ? 'captions' : 'subtitles',\n label,\n language,\n src\n });\n });\n }\n\n /**\n * Add a new cue to a text track with the given data.\n *\n * @param {TextTrack} textTrack\n * @param {\n * import('../dataProvider/model/typedef').Segment |\n * import('../dataProvider/model/typedef').Chapter |\n * import('../dataProvider/model/typedef').TimeInterval\n * } data SRG SSR's cue-like representation\n */\n static addTextTrackCue(textTrack, data) {\n const startTime = (Number.isFinite(data.markIn)\n ? data.markIn : data.fullLengthMarkIn) / 1_000;\n const endTime = (Number.isFinite(data.markOut)\n ? data.markOut : data.fullLengthMarkOut) / 1_000;\n\n textTrack.addCue(new VTTCue(\n startTime,\n endTime,\n JSON.stringify(data)\n ));\n }\n\n /**\n * Add multiple text tracks to the player.\n *\n * @param {import('video.js/dist/types/player').default} player\n * @param {import('./typedef').ComposedSrcMediaData} srcMediaObj\n */\n static addTextTracks(player, { mediaData }) {\n SrgSsr.addRemoteTextTracks(player, mediaData.subtitles);\n SrgSsr.addChapters(player, mediaData.urn, mediaData.chapters);\n SrgSsr.addBlockedSegments(player, mediaData.blockedSegments);\n SrgSsr.addIntervals(player, mediaData.intervals);\n }\n\n /**\n * Adds chapters to the player.\n *\n * @param {import('video.js/dist/types/player').default} player\n * @param {string} chapterUrn The URN of the main chapter.\n * @param {Array.<import('../dataProvider/model/typedef').Chapter>} [chapters=[]]\n */\n static addChapters(player, chapterUrn, chapters = []) {\n const trackId = 'srgssr-chapters';\n const removeTrack = player.textTracks().getTrackById(trackId);\n\n if (removeTrack) {\n player.textTracks().removeTrack(removeTrack);\n }\n\n if (!Array.isArray(chapters) || !chapters.length) return;\n\n SrgSsr.createTextTrack(player, trackId).then(chapterTrack => {\n chapters.forEach(chapter => {\n if (chapterUrn !== chapter.fullLengthUrn) return;\n\n SrgSsr.addTextTrackCue(chapterTrack, chapter);\n });\n\n player.textTracks().addTrack(chapterTrack);\n });\n }\n\n /**\n * Adds intervals to the player.\n *\n * @param {import('video.js/dist/types/player').default} player\n * @param {Array.<import('../dataProvider/model/typedef').TimeInterval>} [intervals=[]]\n */\n static addIntervals(player, intervals = []) {\n const trackId = 'srgssr-intervals';\n const removeTrack = player.textTracks().getTrackById(trackId);\n\n if (removeTrack) {\n player.textTracks().removeTrack(removeTrack);\n }\n\n if (!Array.isArray(intervals) || !intervals.length) return;\n\n SrgSsr.createTextTrack(player, trackId).then(intervalTrack => {\n intervals.forEach(interval => {\n SrgSsr.addTextTrackCue(intervalTrack, interval);\n });\n\n player.textTracks().addTrack(intervalTrack);\n });\n }\n\n /**\n * Set a blocking reason according to the block reason returned\n * by mediaData.\n *\n * @param {import('video.js/dist/types/player').default} player\n * @param {import('./typedef').ComposedSrcMediaData} srcMediaObj\n *\n * @returns {undefined|Boolean}\n */\n static blockingReason(player, srcMediaObj) {\n if (!srcMediaObj.mediaData.blockReason) return;\n\n const message = player.localize(srcMediaObj.mediaData.blockReason);\n\n SrgSsr.error(player, {\n code: MediaError.MEDIA_ERR_ABORTED,\n message,\n metadata: {\n errorType: srcMediaObj.mediaData.blockReason,\n src: srcMediaObj\n },\n });\n\n return true;\n }\n\n /**\n * Add the Akamai token to all resources\n * if at least one of them has tokenType\n * set to Akamai.\n *\n * @param {Array.<import('./typedef').MainResourceWithKeySystems>} resources\n *\n * @returns {Promise<Array.<import('./typedef').MainResourceWithKeySystems>>}\n */\n static async composeAkamaiResources(resources = []) {\n if (!AkamaiTokenService.hasToken(resources)) {\n return Promise.resolve(resources);\n }\n\n // TODO allow to modify the Akamai URL\n return AkamaiTokenService.tokenizeSources(resources);\n }\n\n /**\n * Add the keySystems property to all resources\n * if at least one of them has DRM.\n *\n * @param {Array.<import('../dataProvider/model/typedef').MainResource>} resources\n *\n * @returns {Array.<import('./typedef').MainResourceWithKeySystems>}\n */\n static composeKeySystemsResources(resources = []) {\n if (!Drm.hasDrm(resources)) resources;\n\n return resources.map((resource) => ({\n ...resource,\n ...Drm.buildKeySystems(resource.drmList),\n }));\n }\n\n /**\n * Get the main resources from a mediaComposition.\n * May add an Akamai token or key systems if required by the resource.\n *\n * @param {MediaComposition} mediaComposition\n *\n * @returns {Promise<Array.<import('./typedef').MainResourceWithKeySystems>>}\n */\n static composeMainResources(mediaComposition) {\n return SrgSsr.composeAkamaiResources(\n SrgSsr.composeKeySystemsResources(\n SrgSsr.filterIncompatibleResources(mediaComposition.getMainResources())\n )\n );\n }\n\n /**\n * Compose source options with media data.\n * MediaData properties from source options overwrite mediaData from IL.\n *\n * @param {any} srcObj\n * @param {any} srcObj.mediaData overrides or adds metadata to the composed mediaData.\n * @param {boolean} srcObj.disableTrackers\n * @param {import('./typedef').MainResourceWithKeySystems} resource\n *\n * @returns {import('./typedef').ComposedSrcMediaData}\n */\n static composeSrcMediaData(\n { mediaData: srcMediaData, disableTrackers },\n resource\n ) {\n const {\n url,\n mimeType,\n keySystems,\n ...mediaData\n } = Pillarbox.obj.merge(resource, srcMediaData);\n\n return {\n src: url,\n type: mimeType,\n keySystems,\n disableTrackers,\n mediaData,\n };\n }\n\n /**\n * Create a new metadata text track.\n *\n * @param {import('video.js/dist/types/player').default} player\n * @param {String} trackId Text track unique ID\n *\n * @returns {Promise<TextTrack>}\n */\n static createTextTrack(player, trackId) {\n // See https://github.com/videojs/video.js/issues/8519\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(new Pillarbox.TextTrack({\n id: trackId,\n kind: 'metadata',\n label: trackId,\n tech: player.tech(true),\n }));\n }, 100);\n });\n }\n\n /**\n * Proxy SRG SSR chapters and intervals cuechange events at player level.\n *\n * @param {import('video.js/dist/types/player').default} player\n */\n static cuechangeEventProxy(player) {\n player.textTracks().on('addtrack', ({ track }) => {\n if (!['srgssr-chapters', 'srgssr-intervals'].includes(track.id)) return;\n\n track.on('cuechange', () => {\n const [cue] = Array.from(track.activeCues);\n const type = track.id.includes('srgssr-chapters') ? 'srgssr/chapter' : 'srgssr/interval';\n\n player.trigger({ type, data: cue });\n });\n });\n }\n\n /**\n * SRG SSR data provider singleton.\n *\n * @param {import('video.js/dist/types/player').default} player\n *\n * @returns {DataProvider}\n */\n static dataProvider(player) {\n if (!player.options().srgOptions.dataProvider) {\n const {\n dataProviderHost,\n dataProviderUrlHandler\n } = player.options().srgOptions;\n const dataProvider = new DataProvider(dataProviderHost);\n const requestHandler = dataProvider\n .handleRequest(dataProviderUrlHandler);\n\n player.options({\n srgOptions: {\n dataProvider: requestHandler,\n },\n });\n }\n\n return player.options().srgOptions.dataProvider;\n }\n\n /**\n * Set an error if something goes wrong with the data provider.\n *\n * @param {import('video.js/dist/types/player').default} player\n * @param {Object} error\n *\n * @returns {undefined|true}\n */\n static dataProviderError(player, error) {\n if (!error) return;\n\n const statusText = error.statusText ? error.statusText : error.message;\n\n SrgSsr.error(player, {\n code: 0,\n message: player.localize('UNKNOWN'),\n metadata: {\n errorType: 'UNKNOWN',\n urn: player.src(),\n status: error.status,\n statusText,\n url: error.url,\n },\n });\n\n return true;\n }\n\n /**\n * Set player error.\n *\n * @param {import('video.js/dist/types/player').default} player\n * @param {Object} error\n */\n static error(player, { code, message, metadata }) {\n player.error(null);\n\n player.error({\n code,\n message,\n metadata,\n });\n }\n\n /**\n * Filter out incompatible resources such as `RTMP` and `HDS`.\n *\n * @param {Array.<import('../dataProvider/model/typedef').MainResource>} resources Resources to filter\n *\n * @returns {Array.<import('../dataProvider/model/typedef').MainResource>} The filtered resources\n */\n static filterIncompatibleResources(resources = []) {\n return resources.filter(\n (resource) => !['RTMP', 'HDS'].includes(resource.streaming)\n );\n }\n\n /**\n * Get the current blocked segment from the player.\n *\n * @param {import('video.js/dist/types/player').default} player\n *\n * @returns {VTTCue|undefined} The blocked segment cue object, or undefined\n */\n static getBlockedSegment(player) {\n const trackId = 'srgssr-blocked-segments';\n const blockedSegmentsTrack = player.textTracks().getTrackById(trackId);\n\n if (!blockedSegmentsTrack) return;\n\n /** @type {VTTCue} */\n const [blockedCue] = Array.from(blockedSegmentsTrack.activeCues);\n\n return blockedCue;\n }\n\n /**\n * Get the VTT cue of a blocked segment.\n *\n * @param {import('video.js/dist/types/player').default} player\n * @param {Number} currentTime\n *\n * @returns {VTTCue|undefined} The VTT cue of a blocked segment, or undefined\n */\n static getBlockedSegmentByTime(player, currentTime) {\n const blockedSegment = SrgSsr.getBlockedSegment(player);\n\n if (!blockedSegment) return;\n\n const isBlocked = currentTime >= blockedSegment.startTime &&\n currentTime < blockedSegment.endTime;\n\n return isBlocked ? blockedSegment : undefined;\n }\n\n /**\n * Get mediaComposition from an URN.\n *\n * @param {String} urn\n * @param {Function} requestHandler\n *\n * @returns {Promise<MediaComposition>}\n */\n static async getMediaComposition(\n urn,\n handleRequest = new DataProvider().handleRequest()\n ) {\n const data = await handleRequest(urn);\n\n return Object.assign(new MediaComposition(), data);\n }\n\n /**\n * Get the mediaData most likely to be compatible depending on the browser.\n *\n * @param {Array.<import('./typedef').MainResourceWithKeySystems>} resources\n *\n * @returns {import('./typedef').MainResourceWithKeySystems} By default, the first entry is used if none is compatible.\n */\n static getMediaData(resources = []) {\n if (AkamaiTokenService.hasToken(resources)) return resources[0];\n\n const type = Pillarbox.browser.IS_ANY_SAFARI ? 'HLS' : 'DASH';\n const resource = resources.find(({ streaming }) => streaming === type);\n\n return resource || resources[0];\n }\n\n /**\n * Get the source media object.\n *\n * @param {import('video.js/dist/types/player').default} player\n * @param {any} srcObj\n *\n * @returns {Promise<import('./typedef').ComposedSrcMediaData>} - The composed source media data.\n */\n static async getSrcMediaObj(player, srcObj) {\n const { src: urn, ...srcOptions } = srcObj;\n const mediaComposition = await SrgSsr.getMediaComposition(\n urn,\n SrgSsr.dataProvider(player)\n );\n const mainResources = await SrgSsr.composeMainResources(\n mediaComposition\n );\n const mediaData = SrgSsr.getMediaData(mainResources);\n\n return SrgSsr.composeSrcMediaData(srcOptions, mediaData);\n }\n\n /**\n * Handles the middleware's currentTime function.\n * - If the current time is between the start and end of a blocked segment,\n * the blocked portion will be skipped.\n *\n * _Note_: This function should disappear as soon as this behavior is\n * supported on the packaging side.\n *\n * @param {import('video.js/dist/types/player').default} player\n * @param {number} currentTime\n *\n * @returns {number}\n */\n static handleCurrentTime(player, currentTime) {\n const blockedSegment = SrgSsr\n .getBlockedSegmentByTime(player, currentTime);\n\n if (!blockedSegment || !Number.isFinite(blockedSegment.endTime)) {\n return currentTime;\n }\n\n // as a workaround, add 0.1 seconds to avoid getting stuck on endTime on\n // some safaris.\n const endTimeWithTolerance = blockedSegment.endTime + 0.1;\n\n // proxy for handling cuechange events at the player level\n player.trigger({ type: 'srgssr/blocked-segment', data: blockedSegment });\n player.currentTime(endTimeWithTolerance);\n\n return endTimeWithTolerance;\n }\n\n /**\n * Handles the middleware's setCurrentTime function.\n * - Modify the current time if the value is between the start and end of a\n * blocked segment.\n *\n * _Note_: This function should disappear as soon as this behavior is\n * supported on the packaging side.\n *\n * @param {import('video.js/dist/types/player').default} player\n * @param {number} currentTime\n *\n * @returns {number}\n */\n static handleSetCurrentTime(player, currentTime) {\n const { endTime: blockedSegmentEndTime } = SrgSsr\n .getBlockedSegmentByTime(player, currentTime) || {};\n\n return Number\n .isFinite(blockedSegmentEndTime) ? blockedSegmentEndTime : currentTime;\n }\n\n /**\n * Handles the middleware's setSource function.\n *\n * This function allows to:\n * - resolve a URN into media that can be played by the player\n * - initialize media playback tracking\n * - update the title bar\n * - handle blocking reasons\n * - add remote subtitles\n *\n * @param {import('video.js/dist/types/player').default} player\n * @param {any} srcObj\n * @param {function} next\n *\n * @returns {Promise<any>}\n */\n static async handleSetSource(player, srcObj, next) {\n try {\n const srcMediaObj = await SrgSsr.getSrcMediaObj(player, srcObj);\n\n SrgSsr.srgAnalytics(player);\n SrgSsr.updateTitleBar(player, srcMediaObj);\n SrgSsr.updatePoster(player, srcMediaObj);\n\n if (SrgSsr.blockingReason(player, srcMediaObj)) return;\n\n SrgSsr.addTextTracks(player, srcMediaObj);\n\n return next(null, srcMediaObj);\n } catch (error) {\n if (SrgSsr.dataProviderError(player, error)) return;\n\n return next(error);\n }\n }\n\n /**\n * SRG SSR analytics singleton.\n *\n * @param {import('video.js/dist/types/player').default} player\n */\n static srgAnalytics(player) {\n if (player.options().trackers.srgAnalytics === false) return;\n\n if (!player.options().trackers.srgAnalytics) {\n const srgAnalytics = new SRGAnalytics(player, {\n debug: player.debug(),\n playerVersion: Pillarbox.VERSION.pillarbox,\n tagCommanderScriptURL:\n player.options().srgOptions.tagCommanderScriptURL,\n });\n\n player.options({\n trackers: {\n srgAnalytics,\n },\n });\n }\n }\n\n /**\n * Update player's poster.\n *\n * @param {import('video.js/dist/types/player').default} player\n * @param {import('./typedef').ComposedSrcMediaData} srcMediaObj\n * @param {Image} imageService\n */\n static updatePoster(player, srcMediaObj, imageService = Image) {\n player.poster(\n imageService.scale({\n url: srcMediaObj.mediaData.imageUrl,\n })\n );\n }\n\n /**\n * Update player titleBar with title and description.\n *\n * @param {import('video.js/dist/types/player').default} player\n * @param {import('./typedef').ComposedSrcMediaData} srcMediaObj\n */\n static updateTitleBar(player, srcMediaObj) {\n if (!player.titleBar) return;\n\n player.titleBar.update({\n title: srcMediaObj.mediaData.vendor,\n description: srcMediaObj.mediaData.title,\n });\n }\n\n /**\n * Middleware to resolve SRG SSR URNs into playable media.\n *\n * @param {import('video.js/dist/types/player').default} player\n *\n * @returns {Object}\n */\n static middleware(player) {\n\n SrgSsr.cuechangeEventProxy(player);\n\n return {\n currentTime: (currentTime) =>\n SrgSsr.handleCurrentTime(player, currentTime),\n setCurrentTime: (currentTime) =>\n SrgSsr.handleSetCurrentTime(player, currentTime),\n setSource: async (srcObj, next) =>\n SrgSsr.handleSetSource(player, srcObj, next),\n };\n }\n}\n\nPillarbox.use('srgssr/urn', SrgSsr.middleware);\n\n// Add Middleware specific options\nPillarbox.options.srgOptions = {\n dataProvider: undefined,\n dataProviderHost: undefined,\n dataProviderUrlHandler: undefined,\n tagCommanderScriptURL: undefined,\n};\n\nexport default SrgSsr;\n"],"names":["vjsPlayer","videojs","getComponent","Player","constructor","tag","options","ready","super","obj","merge","plugins","eme","audioTrack","trackSelector","audioTracks","Array","from","this","player","find","enabled","kind","language","bufferedRanges","ranges","i","buffered","length","start","end","push","playedPercent","Number","isFinite","duration","NaN","timePlayed","played","playedRanges","seekableRanges","seekable","textTrack","textTracks","filter","includes","mode","forEach","registerComponent","pillarbox","VERSION","VhsSourceHandler","name","getPlugin","enableSmoothSeeking","fill","html5","vhs","useForcedSubtitles","liveTracker","trackingThreshold","liveTolerance","liveui","playsinline","responsive","trackers","DataProvider","hostName","setIlHost","baseUrl","handleRequest","urlHandler","_this","_ref","_asyncToGenerator","urn","url","mediaCompositionUrlHandler","response","fetch","ok","json","_x","apply","arguments","SCALE","FORMAT","Image","scale","width","format","imageServiceUrl","scaleUrl","URL","searchParams","set","decodeURIComponent","href","JPG","PNG","WEBP","WIDTH_240","WIDTH_320","WIDTH_480","WIDTH_960","WIDTH_1920","DRM_VENDORS","WIDEVINE","FAIRPLAY","PLAYREADY","Drm","buildKeySystems","drmList","keySystems","drmVendor","type","vendors","certificateUrl","certificateUri","licenseUrl","licenseUri","hasDrm","resources","some","TOKEN_TYPES","AkamaiTokenService","aclPath","streamUrl","path","pathname","substring","lastIndexOf","AKAMAI","hasToken","resource","isAkamai","tokenType","tokentype","isNone","NONE","tokenize","source","tokenServerUrl","streamUrlToTokenize","acl","encodeURIComponent","then","Promise","reject","status","statusText","token","authparams","URLSearchParams","v","k","Object","assign","toString","catch","reason","tokenizeSources","sources","tokenizedSources","tokenizedSource","all","values","EMPTIED","ENDED","LOADED_DATA","LOAD_START","PAUSE","PLAY","PLAYING","RATE_CHANGE","SEEKING","TIME_UPDATE","WAITING","SRGAnalytics","debug","environment","playerVersion","tagCommanderScriptURL","isDebugEnabled","elapsedPlaybackTime","hasStarted","heartBeatIntervalId","undefined","initialized","isSeeking","isWaiting","mediaSession","pendingQueue","pendingTagCommanderReload","srcMediaData","startPlaybackSession","trackedCurrentTime","uptimeIntervalId","initScript","initListeners","beforeunload","notify","clearTimers","clearInterval","clearTimeout","uptimeTimeoutId","currentTime","Math","round","Boolean","destroy","window","tc_vars","dispose","removeEventListener","beforeunloadListener","off","PlayerEvents","emptiedListener","endedListener","loadstartListener","loadeddataListener","playListener","pauseListener","rateChangeListener","seekingListener","timeUpdateListener","waitingListener","emptied","ended","flush","isTrackerDisabled","tC","container","reload","tc_events_11","notification","el","action","labels","getCurrentAudioTrack","currentTrack","track","toUpperCase","getCurrentTextTrack","getDvrWindowPosition","ct","seekableStart","position","liveWindow","Infinity","getDvrWindowSize","isInfinity","windowSize","getElapsedPlaybackTime","getElapsedPlayingTime","playingSession","now","getEventLabels","eventName","event_id","event_timestamp","media_dvr_window_length","media_dvr_window_offset","media_is_dvr","media_is_live","media_mute","muted","media_playback_rate","playbackRate","media_position","media_quality","mediaData","quality","media_subtitles_on","isTextTrackEnabled","media_volume","volume","toFixed","navigation_environment","isAudioTrackEnabled","media_audio_track","media_subtitle_selection","isMediaOnDemand","isMediaDvr","media_timeshift","timeShifted","getInternalLabels","data","media_bu_distributer","vendor","media_chromecast_selected","tech","isCasting","media_embedding_url","document","referrer","media_player_display","media_player_name","media_player_version","media_url","src","analyticsMetadata","heartBeat","setInterval","paused","initCallbacks","bind","loadstart","loadeddata","play","pause","rateChange","seeking","timeUpdate","waiting","addEventListener","on","one","scriptId","querySelector","script","createElement","defer","id","onload","_e","body","appendChild","isMediaLive","isArray","disableTrackers","tracker","toLowerCase","updateSrcMediaData","currentSource","reloadTagCommanderContainer","log","eventMetadata","severity","console","error","Date","uptime","isAtLiveEdge","atLiveEdge","liveCurrentTime","notifyUptime","setTimeout","bufferStop","Pillarbox","browser","IS_ANY_SAFARI","MediaComposition","findChapterByUrn","chapterList","chapter","element","findMainSegment","segmentUrn","segmentList","getMainSegments","segment","findResourceListByUrn","chapterByUrn","resourceList","getChapters","AUDIO","getMainChapter","mediaType","getFilteredExternalSubtitles","subtitleList","subtitleInformationList","getResourceList","onlyHasExternalSubtitles","subtitles","subtitle","subtitleInformation","locale","getMainBlockReason","mainChapter","blockReason","getMainValidFromDate","getMainBlockedSegments","chapterUrn","getMainChapterImageUrl","imageUrl","getMainResources","map","analyticsData","getMergedAnalyticsData","getMergedAnalyticsMetadata","blockedSegments","chapters","dvr","eventData","imageCopyright","intervals","getMainTimeIntervals","live","mimeType","presentation","streaming","streamOffset","title","mainSegments","timeIntervalList","validFrom","_objectSpread","addLanguage","vjsLang","pillarboxLang","SrgSsr","addBlockedSegments","segments","trackId","removeTrack","getTrackById","createTextTrack","segmentTrack","addTextTrackCue","addTrack","addRemoteTextTracks","label","addRemoteTextTrack","startTime","markIn","fullLengthMarkIn","endTime","markOut","fullLengthMarkOut","addCue","VTTCue","JSON","stringify","addTextTracks","addChapters","addIntervals","chapterTrack","fullLengthUrn","intervalTrack","interval","blockingReason","srcMediaObj","message","localize","code","MediaError","MEDIA_ERR_ABORTED","metadata","errorType","composeAkamaiResources","resolve","composeKeySystemsResources","composeMainResources","mediaComposition","filterIncompatibleResources","composeSrcMediaData","_Pillarbox$obj$merge","_objectWithoutProperties","_excluded","TextTrack","cuechangeEventProxy","cue","activeCues","trigger","dataProvider","srgOptions","dataProviderHost","dataProviderUrlHandler","requestHandler","dataProviderError","getBlockedSegment","blockedSegmentsTrack","blockedCue","getBlockedSegmentByTime","blockedSegment","getMediaComposition","getMediaData","getSrcMediaObj","srcObj","srcOptions","_excluded2","mainResources","handleCurrentTime","endTimeWithTolerance","handleSetCurrentTime","blockedSegmentEndTime","handleSetSource","next","srgAnalytics","updateTitleBar","updatePoster","imageService","poster","titleBar","update","description","middleware","setCurrentTime","setSource","_x2","use"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ .vjs-svg-icon{display:inline-block;background-repeat:no-repeat;background-position:center;fill:currentColor;height:1.8em;width:1.8em}.vjs-svg-icon:before{content:none !important}.vjs-svg-icon:hover,.vjs-control:focus .vjs-svg-icon{filter:drop-shadow(0 0 0.25em #fff)}.vjs-modal-dialog .vjs-modal-dialog-content,.video-js .vjs-modal-dialog,.pillarbox-js .vjs-modal-dialog,.vjs-button>.vjs-icon-placeholder:before,.video-js .vjs-big-play-button .vjs-icon-placeholder:before,.pillarbox-js .vjs-big-play-button .vjs-icon-placeholder:before{position:absolute;top:0;left:0;width:100%;height:100%}.vjs-button>.vjs-icon-placeholder:before,.video-js .vjs-big-play-button .vjs-icon-placeholder:before,.pillarbox-js .vjs-big-play-button .vjs-icon-placeholder:before{text-align:center}@font-face{font-family:VideoJS;src:url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAABUgAAsAAAAAItAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAAPgAAAFZRiV33Y21hcAAAAYQAAAEJAAAD5p42+VxnbHlmAAACkAAADwwAABdk9R/WHmhlYWQAABGcAAAAKwAAADYn8kSnaGhlYQAAEcgAAAAdAAAAJA+RCL1obXR4AAAR6AAAABMAAAC8Q44AAGxvY2EAABH8AAAAYAAAAGB7SIHGbWF4cAAAElwAAAAfAAAAIAFAAI9uYW1lAAASfAAAASUAAAIK1cf1oHBvc3QAABOkAAABfAAAAnXdFqh1eJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYGR7xDiBgZWBgaWQ5RkDA8MvCM0cwxDOeI6BgYmBlZkBKwhIc01hcPjI+FGPHcRdyA4RZgQRADbZCycAAHic7dPXbcMwAEXRK1vuvffem749XAbKV3bjBA6fXsaIgMMLEWoQJaAEFKNnlELyQ4K27zib5PNF6vl8yld+TKr5kH0+cUw0xv00Hwvx2DResUyFKrV4XoMmLdp06NKjz4AhI8ZMmDJjzoIlK9Zs2LJjz4EjJ85cuHLjziPe/0UWL17mf2tqKLz/9jK9f8tXpGCoRdPKhtS0RqFkWvVQNtSKoVYNtWaoddPXEBqG2jQ9XWgZattQO4baNdSeofYNdWCoQ0MdGerYUCeGOjXUmaHODXVhqEtDXRnq2lA3hro11J2h7g31YKhHQz0Z6tlQL4Z6NdSbod4N9WGoT9MfHF6GmhnZLxyDcRMAAAB4nJ1YC1gUV5auc6urCmxEGrq6VRD6ATQP5dHPKK8GRIyoKApoEBUDAiGzGmdUfKNRM4qLZrUZdGKcGN/GZJKd0SyOWTbfbmZ2NxqzM5IxRtNZd78vwYlJdtREoO7sudVNq6PmmxmKqrqPU+eee173P80Bh39Cu9DOEY4DHZBK3i20D/QRLcfxbE5sEVtwLpZzclw4ibFIkSCJUcZ4MBpMnnzwuKNsGWBL5i3qy6kO2dVpvUpKbkAP9fq62rdeGJ+TM/7C1nbIutfuWrWk5ci4zMxxR1qW/N+9JsmCGXj9VKWhFx/6tr/nz78INDm2C9yPF/fDcxLuyKxLBZ1ZBz2QTi+RSkiH5RrDQJ/GgGQadX9m0YSURs7GpSG905Zsk41uj14yul1OtieZ7QUk5GRG/YiS7PYYPSAZNRed9sq3+bOpz00rKb7pe/ZEZvbALxZAHT3AFoH8GXP3rt67QFn40kt8W13FjLTDb48c+fSi5/7h0P4dL5yz7DPtbmgmYxfQA9RL2+EOfTcvdp+1vmuBpvOll1As1S6ak0IvJzC7sKWJFtJgBd2uWcg+0Zyg7dzQfhcjXRgXGZRf5/a4A58IDU777Nl252AUk4m2ByRRjqTNqIDCEJeAnU3iCFwrkrNwXEzg4yFevBwypzxkcX+AIfk3VEKl3XmWbT8788SzvpvFJaiOezL6QyuSr9VNf97csNu0z3LuhR0wATUxZAfVBwVOy+nQFhxYdWaXlXe4HC4zWGWzzsrLDtmhI9pOWOHv7PTT7XybH1Z0+v2d5Abd3kmG+TsH23CS/KwTxx/JkzEwx6jcQOUc42LLwHJ/J93uZ9ygh3HuZGwqsY9dWDHQ58dxNqyqKRQTYdxwTubiOSs3FiMDkq0WSZQgCT0GBDOg2lxOAd1FlPVGs4AKBAcYHHaP2wPkHaivmLF5zYqnIZrvcHx5gN4k/6tchNW1DtdgNL2KrxEkS/kfnIHoVnp1VjmjpTf5r0lTzLj0mdS28tX+XGorU364eMPmnWVl8J36nlKGw3CZhjEiuMw8h8mKvhGD+4/lElBWjAhLJMg6fTw4zPZ8cOmcGQBm2Qxml1nAm13CpYGq1JKUlJJUzQn1PTAO0mgv6VMMpA/DuRfSWEu4lDIxdbAtdWIKvnn2Vk766CWfz9fpY0sH/UpdP50rfszaVpdVRmvIejEdLMk45s4Bu0EWHjeOySmFyZSiMahvZdNSn29peoI/YexYfKQTLeurTXXwEVLeSfInTWHkkMaeUx7sBvOCSTSj3AlcKjfueyS36tCrXDlgRtF0etFq9jhc1kfKuBT/OwMr0F4UUTTh1AN0g20+H/ScPcsIEsYu9d/zN5PmjprPtNwI1ZZcDK6iC97Mcjp2y2aX36f+QbpGHrgRuHlXJ+Zf6PFRL2uQSp8vxHeF2IoRb8Rd2rhMzsNxSRmEuKK4JFnkojhMcx6jzqHzGMGFcW+MhBj0bhf6cowN+45I4LHvwT6fteu7M42wGRI/pxcg6/MZdEvt1U1XaulHFXuLmqov/MukvRVL35/b3ODM1+4aPjtzeK7zmUkV2h3DN54HaQ9GzJvxHRb6Ks2gB81fwqraT+A7GvZJrRLRofU6G0urNL+zFw3v0FaVDFxsKEZW56F31r6ip6vOL+FCObBPuIMRiXld9RaMdLzRIOGhPey2T9vA/35DmZPK9IWaT9d/WgOGMieYqJ/dzjLIhZU118gbysxrNUGefxD6UO/hyNNllpFTOIbx32kSFQctnweV5PxTMHLjRqiAN+fQE9gL+Xy5WB6MOS4GJJuYbDUHhcKDhHGRbLzOpjsjdM1+iwAZLGeieehACX2hhI7SjK/ZUTNrvVje31TxJiFBGYViWFkCn9PMeX9fS6qVbzfCj4fOCTzDnuWy2c4xA7mdNkA3RS9FH2VeqzdCBlixxbzXjvkHU1I8BOYFb1pZvPIHSSIj4svT8xpzcxtXN+ZKyjdDvbz08niiF3PqV9Tn5NST8vg48MTaY8E5xqSSIsWoWHo+LtAzxdH/GDUyp37CBEYfso04F/NlMTcDJUTpECLY0HFGQHImE8xsEUdgnrQlixIvGhJA1BvxpDHGxEMBYFeNOHcBJlSjwe2JcSfbBEsGOPPBHg/6SBBOCsLLw0SpUxod0Z1bFMfLkbQ3UiZxEyd0Dx8t+SRBu18Q9msFbI4e3p1THEfkSEh7kEJ5orR10qTWDvbgPWn5aWvCYyOAjwgXyjJi34uMjo58L25cmRAeQZWI2PA1QQLsPESAH8WGFwZZ4SPoR73BHPzIPMJj9AreBzKUmrH4todT18ANvi1oc3YGjUT/0j+ExUwq8PI9BLaCQIpvewwYu2evAG/Vo/5avPdY7o+BemLLXw3y+AdkzP9bpIxB1wm5EYq8fesHbPEPtm6HrHvtx4jcGPR8fDDpkZBefIjB46QnlUNRltv4Z/pO/J6dxEjhYAtmoMeq+GozvUVvNYOW3m6GCIhoprcfr97B8AcIQYsfD8ljUvGNjvkrpj0ETA48ZMIxCeqsRIsQALE0gi2GB+glSOfbOjW3GSBM9yPq8/rpJXrJDz0BPxV6xdN4uiCGDQed3WhgFkBUZEFsmeyyBpzXrm7UGTBZG8Lh5aubFufk5eUsbrrFGr7McYdbltxa0nKYqRKbQjvikXYkTGM0f2xuyM3Ly21oXnWfvf6I1BmZwfh7EWWIYsg2nHhsDhOnczhJcmI6eBAmy3jZ3RiJmKQR/JA99FcwsfaVbNDDyi1rL9NPj9hfo61wjM6BjzOLijLpeTgk/pL+ip6tfYWupzeOgPny2tcUu9J/9mhxJlgyi985NFRbvCVewXUNXLJaW0RxZqtRYtnfYdcYomXQWdnJHQA3jiEEkeTQWcWxdDP9IvvVWvo2TK553XEMEq+s69/QDU1Q7p0zxwsm9qS379whr8NI2PJqLUyGyfNeX3eFfnJU2U+uHR9cVV1IqgurqwuV44XVp0h2qN55X5XJwtk59yP0IZuHrqBOBIuIYhkcoT6Kx79Pu2HS/IPZIMOqLWs/pteOOk4NPgEb6QAIdAPsyZk5Mwd+wVaHMexJv719W7xCu2l37UG6lvYdBcvHa08p89741zd63phTRGqL5ggo6SlvdbWXzCqsPq78NnSu7wnKy2HNZbVoRCI7UJEOyRj+sPE002tOOY7Qa5fXboFWkLNeqYUSZRocp9XwSUZxcQZ9Hw6LV2pOoVmvHQEDbGIENEG5i6bLgMSM4n8+FNLTtAds99DaWEvgcf4o5SyYe9x+kF6/tGoTPAdRmS/XQIEy//QxKC2oqioAI3tS5auvxCtzT6y6RK8fhChYcwCJaMJhxc0vqSxQ/qmgsrKAlBZUHlauheTpvd9uj5DnLzJct6qfq5fXbYHVIGcfrIVJihbaVLu1wW7Vbs8zK0A8e9Jvb91S9cVMjPrazD6gpfeZTXzYbCFMcppVRsGMpp55OWgx1/3JeAxW1Y7AORgM/m3rWrsdLkQVmEVSU16cX/e7uvkvpqRiQsG06XJ0t64Tf+l0nG1dt025gyOIZlvq5u9KSU1N2TW/rsWnnMRPyTDkctbhvIcNvYIXWyLzdwYLoYesUbaQG4iK2cWO2gdpeUYLqDD0MUTOPhDIGnZEs58yArR86FznuWEsU4YDi2x26dA4klkn8Qa6vhk2QUfX4Jxm/ngX9r7ogn1dmlmwqZmuhxtdg9XN/DEcUgqb+9hMyNansfaQET2mcROCmGEMVqxm5u+h6kN2MOwgqykV2wH9yQG9DvVFU38Pogaf4FVuE62KI/oJ02RDdWW2w5dqQwU/8+N1q1DlvsL863u61KLE7x/o8w0VJQM/Y/SQ3unIrqxueEa1BqT5VFNsO7p39/UC771a77RowpaKe9nvJQIT1Pog5LGx8XblBKmCNGTf3xMogAQvPnz9PYKX/08sVDTG1OKUlOLUgS/UaZtm1NAaYTsl7i9ZQ+L6O4Rl0OGa577LuWvc+C+x96/vYh0lLBuM+7XwI/dTLtdT7v4d6rRTWDnku0IBrqFnZ5bVIqKP8lasJlithWnaLhTsr8qFJBulF/70p4undou36HeTJ5+jv1fCybeQ8nH3+Xv6aENczmOFlab+hqMDg1rLOt12A+tiUFrYDwQ6c3RUJp601nzegTNX6WlYAI2zSUV945F6zU56ZmZVQaWspWcIADxJ9GmljQUnL2p2Dpr5T8H+5KJFu+vqBq8qvyHRzStLHPEO5SPYCV9nZe0yZT2RcH0oHvegSzNEJ0oGWU8iQWM12dgPEugngVceGIwZgPFp0BiT1a0a3R5Rcot7ihfA1J/20v96jX7zmTX9s583H0kwx6WnLd09cXrR9LGroOa9sHNbdyz8wcKk5lqhaVFJZNwmqtw884MXNdvJujpBa3xzuSaZH9sxa06Z7x+HJSduPbdYHv/DgmEhfbehvlmGN7JUkcG78GDM12CeyFFTPNqVeNxC1gzjz+c2nVo63Xxs8rKJWXoBJM0tmEbfGm4qzpoOH3xpzQfyxLzW1gnE9NHo6tol1eMEic4ZVPrjnVi0kqAe2sQ2bgqupScaq8WGlUWgWHI51SKJl/UYT6zccNsCSkBtiVZLsiefuFSDYT3Fi8Zk7EUnmjTRYtsFeuDDJS05MW79M3mr3mla+d8dzac31KTPmBYfFiYSUef48PhPjm9ryZsSGZZkdNvzq0Y9rdNcwDq5Dg5C3QW+7UN64IKptvS3tvHbvu5c9pv1Exau21rc9LIpwpQwUjTq8576yeVDz5+4WZ1nXT43wV60rPLJbDp/UksNrP3iQ2SA63Pst058gOYDbhRnRUw8l/sRt4HbxPzO4WYpInCpuVgSbVh6JXuwnnJngKTTCwaPWmG5Xbhpm1U0Yt3FyBGpGYemPM77p2TD904JjgJ2QFpFLeYpGx8X15Qx1Zk31p5ki9ZLUuXE0lmuJlcakJMVLeFS1iIvrB8drY0aloilakqCZwzwRORtxlgwxS4IThggJd4TDxoiaAIT80fFPGrCPPru+puFn504P/ybr4ihA/6dKASLshEJic7xE8tmzu3KzA7TABBe8y5fNbWo3ilQn/SuFKM16b2l5bOeayqfGhYmhIulU+fVNDdWVv4NMzX10MBHyPR5uhWUu8D9P1VnIMt4nGNgZGBgAOJ/1bf64vltvjJwszOAwAOlmqvINEc/WJyDgQlEAQA+dgnjAHicY2BkYGBnAAGOPgaG//85+hkYGVCBPgBGJwNkAAAAeJxjYGBgYB/EmKMPtxwAhg4B0gAAAAAAAA4AaAB+AMwA4AECAUIBbAGYAe4CLgKKAtAC/ANiA4wDqAPgBDAEsATaBQgFWgXABggGLgZwBqwG9gdOB4oH0ggqCHAIhgicCMgJJAlWCYgJrAnyCkAKdgrkC7J4nGNgZGBg0GdoZmBnAAEmIOYCQgaG/2A+AwAaqwHQAHicXZBNaoNAGIZfE5PQCKFQ2lUps2oXBfOzzAESyDKBQJdGR2NQR3QSSE/QE/QEPUUPUHqsvsrXjTMw83zPvPMNCuAWP3DQDAejdm1GjzwS7pMmwi75XngAD4/CQ/oX4TFe4Qt7uMMbOzjuDc0EmXCP/C7cJ38Iu+RP4QEe8CU8pP8WHmOPX2EPz87TPo202ey2OjlnQSXV/6arOjWFmvszMWtd6CqwOlKHq6ovycLaWMWVydXKFFZnmVFlZU46tP7R2nI5ncbi/dDkfDtFBA2DDXbYkhKc+V0Bqs5Zt9JM1HQGBRTm/EezTmZNKtpcAMs9Yu6AK9caF76zoLWIWcfMGOSkVduvSWechqZsz040Ib2PY3urxBJTzriT95lipz+TN1fmAAAAeJxtkXlT2zAQxf1C4thJAwRajt4HRy8VMwwfSJHXsQZZcnUQ+PYoTtwpM+wf2t9brWZ2n5JBsol58nJcYYAdDDFCijEy5JhgileYYRd72MccBzjEa7zBEY5xglO8xTu8xwd8xCd8xhd8xTec4RwXuMR3/MBP/MJvMPzBFYpk2Cr+OF0fTEgrFI1aHhxN740KDbEmeJpsWZlVj40s+45aLuv9KijlhCXSjLQnu/d/4UH6sWul1mRzFxZeekUuE7z10mg3qMtM1FGQddPSrLQyvJR6OaukItYXDp6pCJrmz0umqkau5pZ2hFmm7m+ImG5W2t0kZoJXUtPhVnYTbbdOBdeCVGqpJe7XKTqSbRK7zbdwXfR0U+SVsStuS3Y76em6+Ic3xYiHUppc04Nn0lMzay3dSxNcp8auDlWlaCi48yetFD7Y9USsx87G45cuop1ZxQUtjLnL4j53FO0a+5X08UXqQ7NQNo92R0XOz7sxWEnxN2TneJI8Acttu4Q=) format("woff");font-weight:normal;font-style:normal}.vjs-icon-play,.video-js .vjs-play-control .vjs-icon-placeholder,.pillarbox-js .vjs-play-control .vjs-icon-placeholder,.video-js .vjs-big-play-button .vjs-icon-placeholder:before,.pillarbox-js .vjs-big-play-button .vjs-icon-placeholder:before{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-play:before,.video-js .vjs-play-control .vjs-icon-placeholder:before,.pillarbox-js .vjs-play-control .vjs-icon-placeholder:before,.video-js .vjs-big-play-button .vjs-icon-placeholder:before,.pillarbox-js .vjs-big-play-button .vjs-icon-placeholder:before{content:""}.vjs-icon-play-circle{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-play-circle:before{content:""}.vjs-icon-pause,.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder,.pillarbox-js .vjs-play-control.vjs-playing .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-pause:before,.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder:before,.pillarbox-js .vjs-play-control.vjs-playing .vjs-icon-placeholder:before{content:""}.vjs-icon-volume-mute,.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder,.pillarbox-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-volume-mute:before,.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder:before,.pillarbox-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder:before{content:""}.vjs-icon-volume-low,.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder,.pillarbox-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-volume-low:before,.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder:before,.pillarbox-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder:before{content:""}.vjs-icon-volume-mid,.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder,.pillarbox-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-volume-mid:before,.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder:before,.pillarbox-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder:before{content:""}.vjs-icon-volume-high,.video-js .vjs-mute-control .vjs-icon-placeholder,.pillarbox-js .vjs-mute-control .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-volume-high:before,.video-js .vjs-mute-control .vjs-icon-placeholder:before,.pillarbox-js .vjs-mute-control .vjs-icon-placeholder:before{content:""}.vjs-icon-fullscreen-enter,.video-js .vjs-fullscreen-control .vjs-icon-placeholder,.pillarbox-js .vjs-fullscreen-control .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-fullscreen-enter:before,.video-js .vjs-fullscreen-control .vjs-icon-placeholder:before,.pillarbox-js .vjs-fullscreen-control .vjs-icon-placeholder:before{content:""}.vjs-icon-fullscreen-exit,.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder,.vjs-fullscreen.pillarbox-js .vjs-fullscreen-control .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-fullscreen-exit:before,.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder:before,.vjs-fullscreen.pillarbox-js .vjs-fullscreen-control .vjs-icon-placeholder:before{content:""}.vjs-icon-spinner{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-spinner:before{content:""}.vjs-icon-subtitles,.video-js .vjs-subs-caps-button .vjs-icon-placeholder,.pillarbox-js .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js .vjs-subtitles-button .vjs-icon-placeholder,.pillarbox-js .vjs-subtitles-button .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-subtitles:before,.video-js .vjs-subs-caps-button .vjs-icon-placeholder:before,.pillarbox-js .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js .vjs-subtitles-button .vjs-icon-placeholder:before,.pillarbox-js .vjs-subtitles-button .vjs-icon-placeholder:before{content:""}.vjs-icon-captions,.video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder,.pillarbox-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder,.pillarbox-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js .vjs-captions-button .vjs-icon-placeholder,.pillarbox-js .vjs-captions-button .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-captions:before,.video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder:before,.pillarbox-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder:before,.pillarbox-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js .vjs-captions-button .vjs-icon-placeholder:before,.pillarbox-js .vjs-captions-button .vjs-icon-placeholder:before{content:""}.vjs-icon-hd{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-hd:before{content:""}.vjs-icon-chapters,.video-js .vjs-chapters-button .vjs-icon-placeholder,.pillarbox-js .vjs-chapters-button .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-chapters:before,.video-js .vjs-chapters-button .vjs-icon-placeholder:before,.pillarbox-js .vjs-chapters-button .vjs-icon-placeholder:before{content:""}.vjs-icon-downloading{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-downloading:before{content:""}.vjs-icon-file-download{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-file-download:before{content:""}.vjs-icon-file-download-done{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-file-download-done:before{content:""}.vjs-icon-file-download-off{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-file-download-off:before{content:""}.vjs-icon-share{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-share:before{content:""}.vjs-icon-cog{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-cog:before{content:""}.vjs-icon-square{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-square:before{content:""}.vjs-icon-circle,.vjs-seek-to-live-control .vjs-icon-placeholder,.video-js .vjs-volume-level,.pillarbox-js .vjs-volume-level,.video-js .vjs-play-progress,.pillarbox-js .vjs-play-progress{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-circle:before,.vjs-seek-to-live-control .vjs-icon-placeholder:before,.video-js .vjs-volume-level:before,.pillarbox-js .vjs-volume-level:before,.video-js .vjs-play-progress:before,.pillarbox-js .vjs-play-progress:before{content:""}.vjs-icon-circle-outline{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-circle-outline:before{content:""}.vjs-icon-circle-inner-circle{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-circle-inner-circle:before{content:""}.vjs-icon-cancel,.video-js .vjs-control.vjs-close-button .vjs-icon-placeholder,.pillarbox-js .vjs-control.vjs-close-button .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-cancel:before,.video-js .vjs-control.vjs-close-button .vjs-icon-placeholder:before,.pillarbox-js .vjs-control.vjs-close-button .vjs-icon-placeholder:before{content:""}.vjs-icon-repeat{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-repeat:before{content:""}.vjs-icon-replay,.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder,.pillarbox-js .vjs-play-control.vjs-ended .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-replay:before,.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder:before,.pillarbox-js .vjs-play-control.vjs-ended .vjs-icon-placeholder:before{content:""}.vjs-icon-replay-5,.video-js .vjs-skip-backward-5 .vjs-icon-placeholder,.pillarbox-js .vjs-skip-backward-5 .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-replay-5:before,.video-js .vjs-skip-backward-5 .vjs-icon-placeholder:before,.pillarbox-js .vjs-skip-backward-5 .vjs-icon-placeholder:before{content:""}.vjs-icon-replay-10,.video-js .vjs-skip-backward-10 .vjs-icon-placeholder,.pillarbox-js .vjs-skip-backward-10 .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-replay-10:before,.video-js .vjs-skip-backward-10 .vjs-icon-placeholder:before,.pillarbox-js .vjs-skip-backward-10 .vjs-icon-placeholder:before{content:""}.vjs-icon-replay-30,.video-js .vjs-skip-backward-30 .vjs-icon-placeholder,.pillarbox-js .vjs-skip-backward-30 .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-replay-30:before,.video-js .vjs-skip-backward-30 .vjs-icon-placeholder:before,.pillarbox-js .vjs-skip-backward-30 .vjs-icon-placeholder:before{content:""}.vjs-icon-forward-5,.video-js .vjs-skip-forward-5 .vjs-icon-placeholder,.pillarbox-js .vjs-skip-forward-5 .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-forward-5:before,.video-js .vjs-skip-forward-5 .vjs-icon-placeholder:before,.pillarbox-js .vjs-skip-forward-5 .vjs-icon-placeholder:before{content:""}.vjs-icon-forward-10,.video-js .vjs-skip-forward-10 .vjs-icon-placeholder,.pillarbox-js .vjs-skip-forward-10 .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-forward-10:before,.video-js .vjs-skip-forward-10 .vjs-icon-placeholder:before,.pillarbox-js .vjs-skip-forward-10 .vjs-icon-placeholder:before{content:""}.vjs-icon-forward-30,.video-js .vjs-skip-forward-30 .vjs-icon-placeholder,.pillarbox-js .vjs-skip-forward-30 .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-forward-30:before,.video-js .vjs-skip-forward-30 .vjs-icon-placeholder:before,.pillarbox-js .vjs-skip-forward-30 .vjs-icon-placeholder:before{content:""}.vjs-icon-audio,.video-js .vjs-audio-button .vjs-icon-placeholder,.pillarbox-js .vjs-audio-button .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-audio:before,.video-js .vjs-audio-button .vjs-icon-placeholder:before,.pillarbox-js .vjs-audio-button .vjs-icon-placeholder:before{content:""}.vjs-icon-next-item{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-next-item:before{content:""}.vjs-icon-previous-item{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-previous-item:before{content:""}.vjs-icon-shuffle{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-shuffle:before{content:""}.vjs-icon-cast{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-cast:before{content:""}.vjs-icon-picture-in-picture-enter,.video-js .vjs-picture-in-picture-control .vjs-icon-placeholder,.pillarbox-js .vjs-picture-in-picture-control .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-picture-in-picture-enter:before,.video-js .vjs-picture-in-picture-control .vjs-icon-placeholder:before,.pillarbox-js .vjs-picture-in-picture-control .vjs-icon-placeholder:before{content:""}.vjs-icon-picture-in-picture-exit,.video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder,.vjs-picture-in-picture.pillarbox-js .vjs-picture-in-picture-control .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-picture-in-picture-exit:before,.video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder:before,.vjs-picture-in-picture.pillarbox-js .vjs-picture-in-picture-control .vjs-icon-placeholder:before{content:""}.vjs-icon-facebook{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-facebook:before{content:""}.vjs-icon-linkedin{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-linkedin:before{content:""}.vjs-icon-twitter{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-twitter:before{content:""}.vjs-icon-tumblr{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-tumblr:before{content:""}.vjs-icon-pinterest{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-pinterest:before{content:""}.vjs-icon-audio-description,.video-js .vjs-descriptions-button .vjs-icon-placeholder,.pillarbox-js .vjs-descriptions-button .vjs-icon-placeholder{font-family:VideoJS;font-weight:normal;font-style:normal}.vjs-icon-audio-description:before,.video-js .vjs-descriptions-button .vjs-icon-placeholder:before,.pillarbox-js .vjs-descriptions-button .vjs-icon-placeholder:before{content:""}.video-js,.pillarbox-js{display:inline-block;vertical-align:top;box-sizing:border-box;color:#fff;background-color:#000;position:relative;padding:0;font-size:10px;line-height:1;font-weight:normal;font-style:normal;font-family:Arial,Helvetica,sans-serif;word-break:initial}.video-js:-moz-full-screen,.pillarbox-js:-moz-full-screen{position:absolute}.video-js:-webkit-full-screen,.pillarbox-js:-webkit-full-screen{width:100% !important;height:100% !important}.video-js[tabindex="-1"],[tabindex="-1"].pillarbox-js{outline:none}.video-js *,.pillarbox-js *,.video-js *:before,.pillarbox-js *:before,.video-js *:after,.pillarbox-js *:after{box-sizing:inherit}.video-js ul,.pillarbox-js ul{font-family:inherit;font-size:inherit;line-height:inherit;list-style-position:outside;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.video-js.vjs-fluid,.vjs-fluid.pillarbox-js,.video-js.vjs-16-9,.vjs-16-9.pillarbox-js,.video-js.vjs-4-3,.vjs-4-3.pillarbox-js,.video-js.vjs-9-16,.vjs-9-16.pillarbox-js,.video-js.vjs-1-1,.vjs-1-1.pillarbox-js{width:100%;max-width:100%}.video-js.vjs-fluid:not(.vjs-audio-only-mode),.vjs-fluid.pillarbox-js:not(.vjs-audio-only-mode),.video-js.vjs-16-9:not(.vjs-audio-only-mode),.vjs-16-9.pillarbox-js:not(.vjs-audio-only-mode),.video-js.vjs-4-3:not(.vjs-audio-only-mode),.vjs-4-3.pillarbox-js:not(.vjs-audio-only-mode),.video-js.vjs-9-16:not(.vjs-audio-only-mode),.vjs-9-16.pillarbox-js:not(.vjs-audio-only-mode),.video-js.vjs-1-1:not(.vjs-audio-only-mode),.vjs-1-1.pillarbox-js:not(.vjs-audio-only-mode){height:0}.video-js.vjs-16-9:not(.vjs-audio-only-mode),.vjs-16-9.pillarbox-js:not(.vjs-audio-only-mode){padding-top:56.25%}.video-js.vjs-4-3:not(.vjs-audio-only-mode),.vjs-4-3.pillarbox-js:not(.vjs-audio-only-mode){padding-top:75%}.video-js.vjs-9-16:not(.vjs-audio-only-mode),.vjs-9-16.pillarbox-js:not(.vjs-audio-only-mode){padding-top:177.7777777778%}.video-js.vjs-1-1:not(.vjs-audio-only-mode),.vjs-1-1.pillarbox-js:not(.vjs-audio-only-mode){padding-top:100%}.video-js.vjs-fill:not(.vjs-audio-only-mode),.vjs-fill.pillarbox-js:not(.vjs-audio-only-mode){width:100%;height:100%}.video-js .vjs-tech,.pillarbox-js .vjs-tech{position:absolute;top:0;left:0;width:100%;height:100%}.video-js.vjs-audio-only-mode .vjs-tech,.vjs-audio-only-mode.pillarbox-js .vjs-tech{display:none}body.vjs-full-window,body.vjs-pip-window{padding:0;margin:0;height:100%}.vjs-full-window .video-js.vjs-fullscreen,.vjs-full-window .vjs-fullscreen.pillarbox-js,body.vjs-pip-window .video-js,body.vjs-pip-window .pillarbox-js{position:fixed;overflow:hidden;z-index:1000;left:0;top:0;bottom:0;right:0}.video-js.vjs-fullscreen:not(.vjs-ios-native-fs),.vjs-fullscreen.pillarbox-js:not(.vjs-ios-native-fs),body.vjs-pip-window .video-js,body.vjs-pip-window .pillarbox-js{width:100% !important;height:100% !important;padding-top:0 !important;display:block}.video-js.vjs-fullscreen.vjs-user-inactive,.vjs-fullscreen.vjs-user-inactive.pillarbox-js{cursor:none}.vjs-pip-container .vjs-pip-text{position:absolute;bottom:10%;font-size:2em;background-color:rgba(0, 0, 0, 0.7);padding:.5em;text-align:center;width:100%}.vjs-layout-tiny.vjs-pip-container .vjs-pip-text,.vjs-layout-x-small.vjs-pip-container .vjs-pip-text,.vjs-layout-small.vjs-pip-container .vjs-pip-text{bottom:0;font-size:1.4em}.vjs-hidden{display:none !important}.vjs-disabled{opacity:.5;cursor:default}.video-js .vjs-offscreen,.pillarbox-js .vjs-offscreen{height:1px;left:-9999px;position:absolute;top:0;width:1px}.vjs-lock-showing{display:block !important;opacity:1 !important;visibility:visible !important}.vjs-no-js{padding:20px;color:#fff;background-color:#000;font-size:18px;font-family:Arial,Helvetica,sans-serif;text-align:center;width:300px;height:150px;margin:0px auto}.vjs-no-js a,.vjs-no-js a:visited{color:#66a8cc}.video-js .vjs-big-play-button,.pillarbox-js .vjs-big-play-button{font-size:3em;line-height:1.5em;height:1.63332em;width:3em;display:block;position:absolute;top:50%;left:50%;padding:0;margin-top:-0.81666em;margin-left:-1.5em;cursor:pointer;opacity:1;border:.06666em solid #fff;background-color:#2b333f;background-color:rgba(43, 51, 63, 0.7);border-radius:.3em;transition:all .4s}.vjs-big-play-button .vjs-svg-icon{width:1em;height:1em;position:absolute;top:50%;left:50%;line-height:1;transform:translate(-50%, -50%)}.video-js:hover .vjs-big-play-button,.pillarbox-js:hover .vjs-big-play-button,.video-js .vjs-big-play-button:focus,.pillarbox-js .vjs-big-play-button:focus{border-color:#fff;background-color:#73859f;background-color:rgba(115, 133, 159, 0.5);transition:all 0s}.vjs-controls-disabled .vjs-big-play-button,.vjs-has-started .vjs-big-play-button,.vjs-using-native-controls .vjs-big-play-button,.vjs-error .vjs-big-play-button{display:none}.vjs-has-started.vjs-paused.vjs-show-big-play-button-on-pause:not(.vjs-seeking,.vjs-scrubbing,.vjs-error) .vjs-big-play-button{display:block}.video-js button,.pillarbox-js button{background:none;border:none;color:inherit;display:inline-block;font-size:inherit;line-height:inherit;text-transform:none;text-decoration:none;transition:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.vjs-control .vjs-button{width:100%;height:100%}.video-js .vjs-control.vjs-close-button,.pillarbox-js .vjs-control.vjs-close-button{cursor:pointer;height:3em;position:absolute;right:0;top:.5em;z-index:2}.video-js .vjs-modal-dialog,.pillarbox-js .vjs-modal-dialog{background:rgba(0, 0, 0, 0.8);background:linear-gradient(180deg, rgba(0, 0, 0, 0.8), rgba(255, 255, 255, 0));overflow:auto}.video-js .vjs-modal-dialog>*,.pillarbox-js .vjs-modal-dialog>*{box-sizing:border-box}.vjs-modal-dialog .vjs-modal-dialog-content{font-size:1.2em;line-height:1.5;padding:20px 24px;z-index:1}.vjs-menu-button{cursor:pointer}.vjs-menu-button.vjs-disabled{cursor:default}.vjs-workinghover .vjs-menu-button.vjs-disabled:hover .vjs-menu{display:none}.vjs-menu .vjs-menu-content{display:block;padding:0;margin:0;font-family:Arial,Helvetica,sans-serif;overflow:auto}.vjs-menu .vjs-menu-content>*{box-sizing:border-box}.vjs-scrubbing .vjs-control.vjs-menu-button:hover .vjs-menu{display:none}.vjs-menu li{display:flex;justify-content:center;list-style:none;margin:0;padding:.2em 0;line-height:1.4em;font-size:1.2em;text-align:center;text-transform:lowercase}.vjs-menu li.vjs-menu-item:focus,.vjs-menu li.vjs-menu-item:hover,.js-focus-visible .vjs-menu li.vjs-menu-item:hover{background-color:#73859f;background-color:rgba(115, 133, 159, 0.5)}.vjs-menu li.vjs-selected,.vjs-menu li.vjs-selected:focus,.vjs-menu li.vjs-selected:hover,.js-focus-visible .vjs-menu li.vjs-selected:hover{background-color:#fff;color:#2b333f}.vjs-menu li.vjs-selected .vjs-svg-icon,.vjs-menu li.vjs-selected:focus .vjs-svg-icon,.vjs-menu li.vjs-selected:hover .vjs-svg-icon,.js-focus-visible .vjs-menu li.vjs-selected:hover .vjs-svg-icon{fill:#000}.video-js .vjs-menu *:not(.vjs-selected):focus:not(:focus-visible),.pillarbox-js .vjs-menu *:not(.vjs-selected):focus:not(:focus-visible),.js-focus-visible .vjs-menu *:not(.vjs-selected):focus:not(.focus-visible){background:none}.vjs-menu li.vjs-menu-title{text-align:center;text-transform:uppercase;font-size:1em;line-height:2em;padding:0;margin:0 0 .3em 0;font-weight:bold;cursor:default}.vjs-menu-button-popup .vjs-menu{display:none;position:absolute;bottom:0;width:10em;left:-3em;height:0em;margin-bottom:1.5em;border-top-color:rgba(43, 51, 63, 0.7)}.vjs-pip-window .vjs-menu-button-popup .vjs-menu{left:unset;right:1em}.vjs-menu-button-popup .vjs-menu .vjs-menu-content{background-color:#2b333f;background-color:rgba(43, 51, 63, 0.7);position:absolute;width:100%;bottom:1.5em;max-height:15em}.vjs-layout-tiny .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-x-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:5em}.vjs-layout-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:10em}.vjs-layout-medium .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:14em}.vjs-layout-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-x-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-huge .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:25em}.vjs-workinghover .vjs-menu-button-popup.vjs-hover .vjs-menu,.vjs-menu-button-popup .vjs-menu.vjs-lock-showing{display:block}.video-js .vjs-menu-button-inline,.pillarbox-js .vjs-menu-button-inline{transition:all .4s;overflow:hidden}.video-js .vjs-menu-button-inline:before,.pillarbox-js .vjs-menu-button-inline:before{width:2.222222222em}.video-js .vjs-menu-button-inline:hover,.pillarbox-js .vjs-menu-button-inline:hover,.video-js .vjs-menu-button-inline:focus,.pillarbox-js .vjs-menu-button-inline:focus,.video-js .vjs-menu-button-inline.vjs-slider-active,.pillarbox-js .vjs-menu-button-inline.vjs-slider-active{width:12em}.vjs-menu-button-inline .vjs-menu{opacity:0;height:100%;width:auto;position:absolute;left:4em;top:0;padding:0;margin:0;transition:all .4s}.vjs-menu-button-inline:hover .vjs-menu,.vjs-menu-button-inline:focus .vjs-menu,.vjs-menu-button-inline.vjs-slider-active .vjs-menu{display:block;opacity:1}.vjs-menu-button-inline .vjs-menu-content{width:auto;height:100%;margin:0;overflow:hidden}.video-js .vjs-control-bar,.pillarbox-js .vjs-control-bar{display:none;width:100%;position:absolute;bottom:0;left:0;right:0;height:3em;background-color:#2b333f;background-color:rgba(43, 51, 63, 0.7)}.video-js:not(.vjs-controls-disabled,.vjs-using-native-controls,.vjs-error) .vjs-control-bar.vjs-lock-showing,.pillarbox-js:not(.vjs-controls-disabled,.vjs-using-native-controls,.vjs-error) .vjs-control-bar.vjs-lock-showing{display:flex !important}.vjs-has-started .vjs-control-bar,.vjs-audio-only-mode .vjs-control-bar{display:flex;visibility:visible;opacity:1;transition:visibility .1s,opacity .1s}.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{visibility:visible;opacity:0;pointer-events:none;transition:visibility 1s,opacity 1s}.vjs-controls-disabled .vjs-control-bar,.vjs-using-native-controls .vjs-control-bar,.vjs-error .vjs-control-bar{display:none !important}.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar,.vjs-audio-only-mode.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{opacity:1;visibility:visible;pointer-events:auto}.video-js .vjs-control,.pillarbox-js .vjs-control{position:relative;text-align:center;margin:0;padding:0;height:100%;width:4em;flex:none}.video-js .vjs-control.vjs-visible-text,.pillarbox-js .vjs-control.vjs-visible-text{width:auto;padding-left:1em;padding-right:1em}.vjs-button>.vjs-icon-placeholder:before{font-size:1.8em;line-height:1.67}.vjs-button>.vjs-icon-placeholder{display:block}.vjs-button>.vjs-svg-icon{display:inline-block}.video-js .vjs-control:focus:before,.pillarbox-js .vjs-control:focus:before,.video-js .vjs-control:hover:before,.pillarbox-js .vjs-control:hover:before,.video-js .vjs-control:focus,.pillarbox-js .vjs-control:focus{text-shadow:0em 0em 1em white}.video-js *:not(.vjs-visible-text)>.vjs-control-text,.pillarbox-js *:not(.vjs-visible-text)>.vjs-control-text{border:0;clip:rect(0 0 0 0);height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.video-js .vjs-custom-control-spacer,.pillarbox-js .vjs-custom-control-spacer{display:none}.video-js .vjs-progress-control,.pillarbox-js .vjs-progress-control{cursor:pointer;flex:auto;display:flex;align-items:center;min-width:4em;touch-action:none}.video-js .vjs-progress-control.disabled,.pillarbox-js .vjs-progress-control.disabled{cursor:default}.vjs-live .vjs-progress-control{display:none}.vjs-liveui .vjs-progress-control{display:flex;align-items:center}.video-js .vjs-progress-holder,.pillarbox-js .vjs-progress-holder{flex:auto;transition:all .2s;height:.3em}.video-js .vjs-progress-control .vjs-progress-holder,.pillarbox-js .vjs-progress-control .vjs-progress-holder{margin:0 10px}.video-js .vjs-progress-control:hover .vjs-progress-holder,.pillarbox-js .vjs-progress-control:hover .vjs-progress-holder{font-size:1.6666666667em}.video-js .vjs-progress-control:hover .vjs-progress-holder.disabled,.pillarbox-js .vjs-progress-control:hover .vjs-progress-holder.disabled{font-size:1em}.video-js .vjs-progress-holder .vjs-play-progress,.pillarbox-js .vjs-progress-holder .vjs-play-progress,.video-js .vjs-progress-holder .vjs-load-progress,.pillarbox-js .vjs-progress-holder .vjs-load-progress,.video-js .vjs-progress-holder .vjs-load-progress div,.pillarbox-js .vjs-progress-holder .vjs-load-progress div{position:absolute;display:block;height:100%;margin:0;padding:0;width:0}.video-js .vjs-play-progress,.pillarbox-js .vjs-play-progress{background-color:#fff}.video-js .vjs-play-progress:before,.pillarbox-js .vjs-play-progress:before{font-size:.9em;position:absolute;right:-0.5em;line-height:.35em;z-index:1}.vjs-svg-icons-enabled .vjs-play-progress:before{content:none !important}.vjs-play-progress .vjs-svg-icon{position:absolute;top:-0.35em;right:-0.4em;width:.9em;height:.9em;pointer-events:none;line-height:.15em;z-index:1}.video-js .vjs-load-progress,.pillarbox-js .vjs-load-progress{background:rgba(115, 133, 159, 0.5)}.video-js .vjs-load-progress div,.pillarbox-js .vjs-load-progress div{background:rgba(115, 133, 159, 0.75)}.video-js .vjs-time-tooltip,.pillarbox-js .vjs-time-tooltip{background-color:#fff;background-color:rgba(255, 255, 255, 0.8);border-radius:.3em;color:#000;float:right;font-family:Arial,Helvetica,sans-serif;font-size:1em;padding:6px 8px 8px 8px;pointer-events:none;position:absolute;top:-3.4em;visibility:hidden;z-index:1}.video-js .vjs-progress-holder:focus .vjs-time-tooltip,.pillarbox-js .vjs-progress-holder:focus .vjs-time-tooltip{display:none}.video-js .vjs-progress-control:hover .vjs-time-tooltip,.pillarbox-js .vjs-progress-control:hover .vjs-time-tooltip,.video-js .vjs-progress-control:hover .vjs-progress-holder:focus .vjs-time-tooltip{display:block;font-size:.6em;visibility:visible}.video-js .vjs-progress-control.disabled:hover .vjs-time-tooltip,.pillarbox-js .vjs-progress-control.disabled:hover .vjs-time-tooltip{font-size:1em}.video-js .vjs-progress-control .vjs-mouse-display,.pillarbox-js .vjs-progress-control .vjs-mouse-display{display:none;position:absolute;width:1px;height:100%;background-color:#000;z-index:1}.video-js .vjs-progress-control:hover .vjs-mouse-display,.pillarbox-js .vjs-progress-control:hover .vjs-mouse-display{display:block}.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display,.vjs-user-inactive.pillarbox-js .vjs-progress-control .vjs-mouse-display{visibility:hidden;opacity:0;transition:visibility 1s,opacity 1s}.vjs-mouse-display .vjs-time-tooltip{color:#fff;background-color:#000;background-color:rgba(0, 0, 0, 0.8)}.video-js .vjs-slider,.pillarbox-js .vjs-slider{position:relative;cursor:pointer;padding:0;margin:0 .45em 0 .45em;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:#73859f;background-color:rgba(115, 133, 159, 0.5)}.video-js .vjs-slider.disabled,.pillarbox-js .vjs-slider.disabled{cursor:default}.video-js .vjs-slider:focus,.pillarbox-js .vjs-slider:focus{text-shadow:0em 0em 1em white;box-shadow:0 0 1em #fff}.video-js .vjs-mute-control,.pillarbox-js .vjs-mute-control{cursor:pointer;flex:none}.video-js .vjs-volume-control,.pillarbox-js .vjs-volume-control{cursor:pointer;margin-right:1em;display:flex}.video-js .vjs-volume-control.vjs-volume-horizontal,.pillarbox-js .vjs-volume-control.vjs-volume-horizontal{width:5em}.video-js .vjs-volume-panel .vjs-volume-control,.pillarbox-js .vjs-volume-panel .vjs-volume-control{visibility:visible;opacity:0;width:1px;height:1px;margin-left:-1px}.video-js .vjs-volume-panel,.pillarbox-js .vjs-volume-panel{transition:width 1s}.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control,.pillarbox-js .vjs-volume-panel.vjs-hover .vjs-volume-control,.video-js .vjs-volume-panel:active .vjs-volume-control,.pillarbox-js .vjs-volume-panel:active .vjs-volume-control,.video-js .vjs-volume-panel:focus .vjs-volume-control,.pillarbox-js .vjs-volume-panel:focus .vjs-volume-control,.video-js .vjs-volume-panel .vjs-volume-control:active,.pillarbox-js .vjs-volume-panel .vjs-volume-control:active,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control~.vjs-volume-control,.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active,.pillarbox-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active{visibility:visible;opacity:1;position:relative;transition:visibility .1s,opacity .1s,height .1s,width .1s,left 0s,top 0s}.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-horizontal,.pillarbox-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal,.pillarbox-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal,.pillarbox-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal,.pillarbox-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control~.vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal,.pillarbox-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal{width:5em;height:3em;margin-right:0}.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-vertical,.pillarbox-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-vertical,.pillarbox-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-vertical,.pillarbox-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-vertical,.pillarbox-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-vertical,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control~.vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-vertical,.pillarbox-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-vertical{left:-3.5em;transition:left 0s}.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.pillarbox-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.video-js .vjs-volume-panel.vjs-volume-panel-horizontal:active,.pillarbox-js .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.pillarbox-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active{width:10em;transition:width .1s}.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-mute-toggle-only,.pillarbox-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-mute-toggle-only{width:4em}.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical,.pillarbox-js .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical{height:8em;width:3em;left:-3000em;transition:visibility 1s,opacity 1s,height 1s 1s,width 1s 1s,left 1s 1s,top 1s 1s}.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal,.pillarbox-js .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal{transition:visibility 1s,opacity 1s,height 1s 1s,width 1s,left 1s 1s,top 1s 1s}.video-js .vjs-volume-panel,.pillarbox-js .vjs-volume-panel{display:flex}.video-js .vjs-volume-bar,.pillarbox-js .vjs-volume-bar{margin:1.35em .45em}.vjs-volume-bar.vjs-slider-horizontal{width:5em;height:.3em}.vjs-volume-bar.vjs-slider-vertical{width:.3em;height:5em;margin:1.35em auto}.video-js .vjs-volume-level,.pillarbox-js .vjs-volume-level{position:absolute;bottom:0;left:0;background-color:#fff}.video-js .vjs-volume-level:before,.pillarbox-js .vjs-volume-level:before{position:absolute;font-size:.9em;z-index:1}.vjs-slider-vertical .vjs-volume-level{width:.3em}.vjs-slider-vertical .vjs-volume-level:before{top:-0.5em;left:-0.3em;z-index:1}.vjs-svg-icons-enabled .vjs-volume-level:before{content:none}.vjs-volume-level .vjs-svg-icon{position:absolute;width:.9em;height:.9em;pointer-events:none;z-index:1}.vjs-slider-horizontal .vjs-volume-level{height:.3em}.vjs-slider-horizontal .vjs-volume-level:before{line-height:.35em;right:-0.5em}.vjs-slider-horizontal .vjs-volume-level .vjs-svg-icon{right:-0.3em;transform:translateY(-50%)}.vjs-slider-vertical .vjs-volume-level .vjs-svg-icon{top:-0.55em;transform:translateX(-50%)}.video-js .vjs-volume-panel.vjs-volume-panel-vertical,.pillarbox-js .vjs-volume-panel.vjs-volume-panel-vertical{width:4em}.vjs-volume-bar.vjs-slider-vertical .vjs-volume-level{height:100%}.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level{width:100%}.video-js .vjs-volume-vertical,.pillarbox-js .vjs-volume-vertical{width:3em;height:8em;bottom:8em;background-color:#2b333f;background-color:rgba(43, 51, 63, 0.7)}.video-js .vjs-volume-horizontal .vjs-menu,.pillarbox-js .vjs-volume-horizontal .vjs-menu{left:-2em}.video-js .vjs-volume-tooltip,.pillarbox-js .vjs-volume-tooltip{background-color:#fff;background-color:rgba(255, 255, 255, 0.8);border-radius:.3em;color:#000;float:right;font-family:Arial,Helvetica,sans-serif;font-size:1em;padding:6px 8px 8px 8px;pointer-events:none;position:absolute;top:-3.4em;visibility:hidden;z-index:1}.video-js .vjs-volume-control:hover .vjs-volume-tooltip,.pillarbox-js .vjs-volume-control:hover .vjs-volume-tooltip,.video-js .vjs-volume-control:hover .vjs-progress-holder:focus .vjs-volume-tooltip{display:block;font-size:1em;visibility:visible}.video-js .vjs-volume-vertical:hover .vjs-volume-tooltip,.pillarbox-js .vjs-volume-vertical:hover .vjs-volume-tooltip,.video-js .vjs-volume-vertical:hover .vjs-progress-holder:focus .vjs-volume-tooltip{left:1em;top:-12px}.video-js .vjs-volume-control.disabled:hover .vjs-volume-tooltip,.pillarbox-js .vjs-volume-control.disabled:hover .vjs-volume-tooltip{font-size:1em}.video-js .vjs-volume-control .vjs-mouse-display,.pillarbox-js .vjs-volume-control .vjs-mouse-display{display:none;position:absolute;width:100%;height:1px;background-color:#000;z-index:1}.video-js .vjs-volume-horizontal .vjs-mouse-display,.pillarbox-js .vjs-volume-horizontal .vjs-mouse-display{width:1px;height:100%}.video-js .vjs-volume-control:hover .vjs-mouse-display,.pillarbox-js .vjs-volume-control:hover .vjs-mouse-display{display:block}.video-js.vjs-user-inactive .vjs-volume-control .vjs-mouse-display,.vjs-user-inactive.pillarbox-js .vjs-volume-control .vjs-mouse-display{visibility:hidden;opacity:0;transition:visibility 1s,opacity 1s}.vjs-mouse-display .vjs-volume-tooltip{color:#fff;background-color:#000;background-color:rgba(0, 0, 0, 0.8)}.vjs-poster{display:inline-block;vertical-align:middle;cursor:pointer;margin:0;padding:0;position:absolute;top:0;right:0;bottom:0;left:0;height:100%}.vjs-has-started .vjs-poster,.vjs-using-native-controls .vjs-poster{display:none}.vjs-audio.vjs-has-started .vjs-poster,.vjs-has-started.vjs-audio-poster-mode .vjs-poster,.vjs-pip-container.vjs-has-started .vjs-poster{display:block}.vjs-poster img{width:100%;height:100%;-o-object-fit:contain;object-fit:contain}.video-js .vjs-live-control,.pillarbox-js .vjs-live-control{display:flex;align-items:flex-start;flex:auto;font-size:1em;line-height:3em}.video-js:not(.vjs-live) .vjs-live-control,.pillarbox-js:not(.vjs-live) .vjs-live-control,.video-js.vjs-liveui .vjs-live-control,.vjs-liveui.pillarbox-js .vjs-live-control{display:none}.video-js .vjs-seek-to-live-control,.pillarbox-js .vjs-seek-to-live-control{align-items:center;cursor:pointer;flex:none;display:inline-flex;height:100%;padding-left:.5em;padding-right:.5em;font-size:1em;line-height:3em;width:auto;min-width:4em}.video-js.vjs-live:not(.vjs-liveui) .vjs-seek-to-live-control,.vjs-live.pillarbox-js:not(.vjs-liveui) .vjs-seek-to-live-control,.video-js:not(.vjs-live) .vjs-seek-to-live-control,.pillarbox-js:not(.vjs-live) .vjs-seek-to-live-control{display:none}.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge{cursor:auto}.vjs-seek-to-live-control .vjs-icon-placeholder{margin-right:.5em;color:#888}.vjs-svg-icons-enabled .vjs-seek-to-live-control{line-height:0}.vjs-seek-to-live-control .vjs-svg-icon{width:1em;height:1em;pointer-events:none;fill:#888}.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge .vjs-icon-placeholder{color:red}.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge .vjs-svg-icon{fill:red}.video-js .vjs-time-control,.pillarbox-js .vjs-time-control{flex:none;font-size:1em;line-height:3em;min-width:2em;width:auto;padding-left:1em;padding-right:1em}.vjs-live .vjs-time-control,.vjs-live .vjs-time-divider,.video-js .vjs-current-time,.pillarbox-js .vjs-current-time,.video-js .vjs-duration,.pillarbox-js .vjs-duration{display:none}.vjs-time-divider{display:none;line-height:3em}.video-js .vjs-play-control,.pillarbox-js .vjs-play-control{cursor:pointer}.video-js .vjs-play-control .vjs-icon-placeholder,.pillarbox-js .vjs-play-control .vjs-icon-placeholder{flex:none}.vjs-text-track-display{position:absolute;bottom:3em;left:0;right:0;top:0;pointer-events:none}.vjs-error .vjs-text-track-display{display:none}.video-js.vjs-controls-disabled .vjs-text-track-display,.vjs-controls-disabled.pillarbox-js .vjs-text-track-display,.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display,.vjs-user-inactive.vjs-playing.pillarbox-js .vjs-text-track-display{bottom:1em}.video-js .vjs-text-track,.pillarbox-js .vjs-text-track{font-size:1.4em;text-align:center;margin-bottom:.1em}.vjs-subtitles{color:#fff}.vjs-captions{color:#fc6}.vjs-tt-cue{display:block}video::-webkit-media-text-track-display{transform:translateY(-3em)}.video-js.vjs-controls-disabled video::-webkit-media-text-track-display,.vjs-controls-disabled.pillarbox-js video::-webkit-media-text-track-display,.video-js.vjs-user-inactive.vjs-playing video::-webkit-media-text-track-display,.vjs-user-inactive.vjs-playing.pillarbox-js video::-webkit-media-text-track-display{transform:translateY(-1.5em)}.video-js .vjs-picture-in-picture-control,.pillarbox-js .vjs-picture-in-picture-control{cursor:pointer;flex:none}.video-js.vjs-audio-only-mode .vjs-picture-in-picture-control,.vjs-audio-only-mode.pillarbox-js .vjs-picture-in-picture-control,.vjs-pip-window .vjs-picture-in-picture-control{display:none}.video-js .vjs-fullscreen-control,.pillarbox-js .vjs-fullscreen-control{cursor:pointer;flex:none}.video-js.vjs-audio-only-mode .vjs-fullscreen-control,.vjs-audio-only-mode.pillarbox-js .vjs-fullscreen-control,.vjs-pip-window .vjs-fullscreen-control{display:none}.vjs-playback-rate>.vjs-menu-button,.vjs-playback-rate .vjs-playback-rate-value{position:absolute;top:0;left:0;width:100%;height:100%}.vjs-playback-rate .vjs-playback-rate-value{pointer-events:none;font-size:1.5em;line-height:2;text-align:center}.vjs-playback-rate .vjs-menu{width:4em;left:0em}.vjs-error .vjs-error-display .vjs-modal-dialog-content{font-size:1.4em;text-align:center}.vjs-loading-spinner{display:none;position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);opacity:.85;text-align:left;border:.6em solid rgba(43, 51, 63, 0.7);box-sizing:border-box;background-clip:padding-box;width:5em;height:5em;border-radius:50%;visibility:hidden}.vjs-seeking .vjs-loading-spinner,.vjs-waiting .vjs-loading-spinner{display:flex;justify-content:center;align-items:center;animation:vjs-spinner-show 0s linear .3s forwards}.vjs-error .vjs-loading-spinner{display:none}.vjs-loading-spinner:before,.vjs-loading-spinner:after{content:"";position:absolute;box-sizing:inherit;width:inherit;height:inherit;border-radius:inherit;opacity:1;border:inherit;border-color:transparent;border-top-color:white}.vjs-seeking .vjs-loading-spinner:before,.vjs-seeking .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:after{animation:vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite,vjs-spinner-fade 1.1s linear infinite}.vjs-seeking .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:before{border-top-color:rgb(255, 255, 255)}.vjs-seeking .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:after{border-top-color:rgb(255, 255, 255);animation-delay:.44s}@keyframes vjs-spinner-show{to{visibility:visible}}@keyframes vjs-spinner-spin{100%{transform:rotate(360deg)}}@keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:white}60%{border-top-color:#73859f}100%{border-top-color:#73859f}}.video-js.vjs-audio-only-mode .vjs-captions-button,.vjs-audio-only-mode.pillarbox-js .vjs-captions-button{display:none}.vjs-chapters-button .vjs-menu ul{width:24em}.video-js.vjs-audio-only-mode .vjs-descriptions-button,.vjs-audio-only-mode.pillarbox-js .vjs-descriptions-button{display:none}.vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-svg-icon{width:1.5em;height:1.5em}.video-js .vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder,.pillarbox-js .vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder{vertical-align:middle;display:inline-block;margin-bottom:-0.1em}.video-js .vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before,.pillarbox-js .vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before{font-family:VideoJS;content:"";font-size:1.5em;line-height:inherit}.video-js.vjs-audio-only-mode .vjs-subs-caps-button,.vjs-audio-only-mode.pillarbox-js .vjs-subs-caps-button{display:none}.video-js .vjs-audio-button+.vjs-menu .vjs-description-menu-item .vjs-menu-item-text .vjs-icon-placeholder,.pillarbox-js .vjs-audio-button+.vjs-menu .vjs-description-menu-item .vjs-menu-item-text .vjs-icon-placeholder,.video-js .vjs-audio-button+.vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder,.pillarbox-js .vjs-audio-button+.vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder{vertical-align:middle;display:inline-block;margin-bottom:-0.1em}.video-js .vjs-audio-button+.vjs-menu .vjs-description-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before,.pillarbox-js .vjs-audio-button+.vjs-menu .vjs-description-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before,.video-js .vjs-audio-button+.vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before,.pillarbox-js .vjs-audio-button+.vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before{font-family:VideoJS;content:" ";font-size:1.5em;line-height:inherit}.video-js.vjs-layout-small .vjs-current-time,.vjs-layout-small.pillarbox-js .vjs-current-time,.video-js.vjs-layout-small .vjs-time-divider,.vjs-layout-small.pillarbox-js .vjs-time-divider,.video-js.vjs-layout-small .vjs-duration,.vjs-layout-small.pillarbox-js .vjs-duration,.video-js.vjs-layout-small .vjs-remaining-time,.vjs-layout-small.pillarbox-js .vjs-remaining-time,.video-js.vjs-layout-small .vjs-playback-rate,.vjs-layout-small.pillarbox-js .vjs-playback-rate,.video-js.vjs-layout-small .vjs-volume-control,.vjs-layout-small.pillarbox-js .vjs-volume-control,.video-js.vjs-layout-x-small .vjs-current-time,.vjs-layout-x-small.pillarbox-js .vjs-current-time,.video-js.vjs-layout-x-small .vjs-time-divider,.vjs-layout-x-small.pillarbox-js .vjs-time-divider,.video-js.vjs-layout-x-small .vjs-duration,.vjs-layout-x-small.pillarbox-js .vjs-duration,.video-js.vjs-layout-x-small .vjs-remaining-time,.vjs-layout-x-small.pillarbox-js .vjs-remaining-time,.video-js.vjs-layout-x-small .vjs-playback-rate,.vjs-layout-x-small.pillarbox-js .vjs-playback-rate,.video-js.vjs-layout-x-small .vjs-volume-control,.vjs-layout-x-small.pillarbox-js .vjs-volume-control,.video-js.vjs-layout-tiny .vjs-current-time,.vjs-layout-tiny.pillarbox-js .vjs-current-time,.video-js.vjs-layout-tiny .vjs-time-divider,.vjs-layout-tiny.pillarbox-js .vjs-time-divider,.video-js.vjs-layout-tiny .vjs-duration,.vjs-layout-tiny.pillarbox-js .vjs-duration,.video-js.vjs-layout-tiny .vjs-remaining-time,.vjs-layout-tiny.pillarbox-js .vjs-remaining-time,.video-js.vjs-layout-tiny .vjs-playback-rate,.vjs-layout-tiny.pillarbox-js .vjs-playback-rate,.video-js.vjs-layout-tiny .vjs-volume-control,.vjs-layout-tiny.pillarbox-js .vjs-volume-control{display:none}.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.vjs-layout-small.pillarbox-js .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:active,.vjs-layout-small.pillarbox-js .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.vjs-layout-small.pillarbox-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.vjs-layout-small.pillarbox-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.vjs-layout-x-small.pillarbox-js .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:active,.vjs-layout-x-small.pillarbox-js .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.vjs-layout-x-small.pillarbox-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.vjs-layout-x-small.pillarbox-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.vjs-layout-tiny.pillarbox-js .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:active,.vjs-layout-tiny.pillarbox-js .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.vjs-layout-tiny.pillarbox-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.vjs-layout-tiny.pillarbox-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover{width:auto;width:initial}.video-js.vjs-layout-x-small .vjs-progress-control,.vjs-layout-x-small.pillarbox-js .vjs-progress-control,.video-js.vjs-layout-tiny .vjs-progress-control,.vjs-layout-tiny.pillarbox-js .vjs-progress-control{display:none}.video-js.vjs-layout-x-small .vjs-custom-control-spacer,.vjs-layout-x-small.pillarbox-js .vjs-custom-control-spacer{flex:auto;display:block}.vjs-modal-dialog.vjs-text-track-settings{background-color:#2b333f;background-color:rgba(43, 51, 63, 0.75);color:#fff;height:70%}.vjs-error .vjs-text-track-settings{display:none}.vjs-text-track-settings .vjs-modal-dialog-content{display:table}.vjs-text-track-settings .vjs-track-settings-colors,.vjs-text-track-settings .vjs-track-settings-font,.vjs-text-track-settings .vjs-track-settings-controls{display:table-cell}.vjs-text-track-settings .vjs-track-settings-controls{text-align:right;vertical-align:bottom}@supports(display: grid){.vjs-text-track-settings .vjs-modal-dialog-content{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr;padding:20px 24px 0px 24px}.vjs-track-settings-controls .vjs-default-button{margin-bottom:20px}.vjs-text-track-settings .vjs-track-settings-controls{grid-column:1/-1}.vjs-layout-small .vjs-text-track-settings .vjs-modal-dialog-content,.vjs-layout-x-small .vjs-text-track-settings .vjs-modal-dialog-content,.vjs-layout-tiny .vjs-text-track-settings .vjs-modal-dialog-content{grid-template-columns:1fr}}.vjs-text-track-settings select{font-size:inherit}.vjs-track-setting>select{margin-right:1em;margin-bottom:.5em}.vjs-text-track-settings fieldset{margin:10px;border:none}.vjs-text-track-settings fieldset span{display:inline-block;padding:0 .6em .8em}.vjs-text-track-settings fieldset span>select{max-width:7.3em}.vjs-text-track-settings legend{color:#fff;font-weight:bold;font-size:1.2em}.vjs-text-track-settings .vjs-label{margin:0 .5em .5em 0}.vjs-track-settings-controls button:focus,.vjs-track-settings-controls button:active{outline-style:solid;outline-width:medium;background-image:linear-gradient(0deg, #fff 88%, #73859f 100%)}.vjs-track-settings-controls button:hover{color:rgba(43, 51, 63, 0.75)}.vjs-track-settings-controls button{background-color:#fff;background-image:linear-gradient(-180deg, #fff 88%, #73859f 100%);color:#2b333f;cursor:pointer;border-radius:2px}.vjs-track-settings-controls .vjs-default-button{margin-right:1em}.vjs-title-bar{background:rgba(0, 0, 0, 0.9);background:linear-gradient(180deg, rgba(0, 0, 0, 0.9) 0%, rgba(0, 0, 0, 0.7) 60%, rgba(0, 0, 0, 0) 100%);font-size:1.2em;line-height:1.5;transition:opacity .1s;padding:.666em 1.333em 4em;pointer-events:none;position:absolute;top:0;width:100%}.vjs-error .vjs-title-bar{display:none}.vjs-title-bar-title,.vjs-title-bar-description{margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vjs-title-bar-title{font-weight:bold;margin-bottom:.333em}.vjs-playing.vjs-user-inactive .vjs-title-bar{opacity:0;transition:opacity 1s}.video-js .vjs-skip-forward-5,.pillarbox-js .vjs-skip-forward-5{cursor:pointer}.video-js .vjs-skip-forward-10,.pillarbox-js .vjs-skip-forward-10{cursor:pointer}.video-js .vjs-skip-forward-30,.pillarbox-js .vjs-skip-forward-30{cursor:pointer}.video-js .vjs-skip-backward-5,.pillarbox-js .vjs-skip-backward-5{cursor:pointer}.video-js .vjs-skip-backward-10,.pillarbox-js .vjs-skip-backward-10{cursor:pointer}.video-js .vjs-skip-backward-30,.pillarbox-js .vjs-skip-backward-30{cursor:pointer}@media print{.video-js>*:not(.vjs-tech):not(.vjs-poster),.pillarbox-js>*:not(.vjs-tech):not(.vjs-poster){visibility:hidden}}.vjs-resize-manager{position:absolute;top:0;left:0;width:100%;height:100%;border:none;z-index:-1000}.js-focus-visible .video-js *:focus:not(.focus-visible),.js-focus-visible .pillarbox-js *:focus:not(.focus-visible){outline:none}.video-js *:focus:not(:focus-visible),.pillarbox-js *:focus:not(:focus-visible){outline:none}.pillarbox-js:hover .vjs-big-play-button{background-color:rgba(22,22,22,.5333333333);transition:background-color .25s ease}.pillarbox-js .vjs-big-play-button{width:2em;height:2em;margin:0;font-size:2.25em;background:rgba(0,0,0,0);border:.1em solid #fff;border-radius:50%;transform:translate(-50%, -50%);transition:background-color .25s ease}.pillarbox-js .vjs-big-play-button .vjs-icon-placeholder::before{position:initial;display:flex;align-items:center;justify-content:center;font-size:1.75em}.pillarbox-js .vjs-modal-dialog.vjs-text-track-settings{top:50%;left:50%;max-width:25em;max-height:50em;background:rgba(22,22,22,.95);border-radius:.5em;box-shadow:2px 2px 3px rgba(0,0,0,.3333333333);transform:translate(-50%, -50%);overscroll-behavior:contain}.pillarbox-js .vjs-text-track-settings .vjs-modal-dialog-content{display:flex;flex-direction:column;padding:1em 1.5em 0}.pillarbox-js .vjs-text-track-settings legend{font-size:1em}.pillarbox-js .vjs-text-track-settings fieldset span{padding-inline:0}.pillarbox-js .vjs-text-track-settings fieldset{display:flex;margin:0 0 1em 0;padding:0}.pillarbox-js.video-js .vjs-text-track-settings select,.pillarbox-js .vjs-text-track-settings select{margin:.25em 0 0 0;padding:.5em;color:#fff;background:#3f3f3f;border:none;appearance:auto}.pillarbox-js.video-js .vjs-text-track-settings select:focus-within,.pillarbox-js .vjs-text-track-settings select:focus-within{outline:solid}.pillarbox-js .vjs-track-settings-controls{display:flex;flex-direction:row;gap:1em;justify-content:end}.pillarbox-js .vjs-track-settings-controls button{margin-block:1em;padding:.25em .5em;color:#fff;background:#3f3f3f}.pillarbox-js .vjs-track-settings-controls button:hover{background:#5c5c5c}.pillarbox-js .vjs-track-settings-controls .vjs-default-button{margin-right:0}.pillarbox-js .vjs-control{height:3em}.pillarbox-js:not(.vjs-audio-only-mode) .vjs-control-bar{align-items:flex-end;height:6em;padding-inline:1em;background:linear-gradient(#000 0%, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.7) 100%)}.pillarbox-js.vjs-audio-only-mode .vjs-control-bar{background-color:#1e232c}.pillarbox-js:not(.vjs-audio-only-mode) .vjs-custom-control-spacer{display:block;flex:auto}.pillarbox-js .vjs-error-display .vjs-modal-dialog-content{display:flex;align-items:center;justify-content:center}.pillarbox-js.vjs-layout-tiny{font-size:8px}.pillarbox-js.vjs-layout-x-small{font-size:10px}.pillarbox-js.vjs-layout-small{font-size:12px}.pillarbox-js.vjs-layout-medium{font-size:14px}.pillarbox-js.vjs-layout-large{font-size:16px}.pillarbox-js.vjs-layout-x-large{font-size:18px}.pillarbox-js.vjs-layout-huge{font-size:20px}.pillarbox-js:not(.vjs-layout-tiny,.vjs-layout-x-small,.vjs-live) .vjs-time-divider,.pillarbox-js:not(.vjs-layout-tiny,.vjs-layout-x-small,.vjs-live) .vjs-current-time,.pillarbox-js:not(.vjs-layout-tiny,.vjs-layout-x-small,.vjs-live) .vjs-duration{display:block;padding:0;font-weight:bold}.pillarbox-js.vjs-layout-tiny .vjs-progress-control,.pillarbox-js.vjs-layout-x-small .vjs-progress-control{display:flex}.pillarbox-js.vjs-layout-x-small.vjs-audio-only-mode .vjs-custom-control-spacer{display:none}.pillarbox-js .vjs-loading-spinner{border:.25em solid rgba(0,0,0,0)}.pillarbox-js .vjs-loading-spinner,.pillarbox-js .vjs-loading-spinner{display:flex;align-items:center;justify-content:center}@keyframes vjs-spinner-fade{0%{border-top-color:#333}20%{border-top-color:#333}35%{border-top-color:#fff}60%{border-top-color:#333}100%{border-top-color:#333}}.pillarbox-js .vjs-menu .vjs-menu-item{border-radius:.25em}.pillarbox-js .vjs-menu .vjs-menu-item:not(.vjs-selected):focus,.pillarbox-js .vjs-menu .vjs-menu-item:not(.vjs-selected):hover{background-color:#3f3f3f}.pillarbox-js .vjs-menu .vjs-menu-item.vjs-texttrack-settings:focus,.pillarbox-js .vjs-menu .vjs-menu-item.vjs-texttrack-settings:hover{background-color:rgba(0,0,0,0)}.pillarbox-js .vjs-menu .vjs-menu-item .vjs-selected{color:#222;background-color:#fff;pointer-events:none}.pillarbox-js .vjs-menu-button-popup.vjs-hover .vjs-menu{display:none}.pillarbox-js .vjs-menu-button-popup .vjs-menu{right:0;bottom:0;left:unset;width:100%;margin:0}.pillarbox-js .vjs-menu-button-popup .vjs-menu .vjs-menu-content{right:50%;bottom:5em;display:grid;gap:.25em;min-width:13em;padding:1em .5em;background:rgba(22,22,22,.95);border-radius:.5em;transform:translateX(50%);overscroll-behavior:contain}.pillarbox-js .vjs-slider{background-color:rgba(255,255,255,.3);border-radius:1em}.pillarbox-js .vjs-text-track-display{inset:0 0 4em}.pillarbox-js .vjs-current-time{margin-left:1em}.pillarbox-js .vjs-time-divider{min-width:1em;text-align:center}.pillarbox-js .vjs-remaining-time{display:none}.pillarbox-js.vjs-audio-only-mode .vjs-current-time,.pillarbox-js.vjs-audio-only-mode .vjs-time-divider,.pillarbox-js.vjs-audio-only-mode .vjs-duration{order:1}.pillarbox-js.vjs-audio-only-mode .vjs-duration{margin-right:1em}.pillarbox-js .vjs-title-bar{padding-bottom:2em;background:linear-gradient(rgba(0, 0, 0, 0.6) 0%, transparent 100%)}.pillarbox-js:not(.vjs-audio-only-mode) .vjs-progress-control{position:absolute;bottom:3em;width:calc(100% - 2em);height:1em}.pillarbox-js .vjs-progress-holder{margin:0}.pillarbox-js .vjs-load-progress{background:rgba(255,255,255,.3);border-radius:1em}.pillarbox-js .vjs-load-progress div{background:rgba(0,0,0,0)}.pillarbox-js.vjs-scrubbing .vjs-play-progress .vjs-time-tooltip,.pillarbox-js.vjs-seeking .vjs-play-progress .vjs-time-tooltip{display:none}.pillarbox-js .vjs-play-progress{color:#af001e;background:#af001e;border-radius:1em}.pillarbox-js .vjs-play-progress::before{font-size:0px;text-shadow:0px 0px 1px #000}.pillarbox-js .vjs-progress-control:hover .vjs-play-progress::before{font-size:.9em}.pillarbox-js .vjs-progress-control:hover .vjs-time-tooltip{right:0% !important;transform:translateX(50%)}.pillarbox-js .vjs-progress-holder:focus-visible .vjs-play-progress::before{font-size:.9em}.pillarbox-js .vjs-time-tooltip,.pillarbox-js .vjs-mouse-display .vjs-time-tooltip{top:-3em;padding:.4em;color:#fff;font-weight:bold;text-shadow:1px 1px 3px #000,1px 1px 2px #000;background-color:rgba(0,0,0,0)}.pillarbox-js .vjs-volume-level{border-radius:1em}.pillarbox-js .vjs-volume-tooltip{top:-2em;padding:.4em;font-weight:bold;text-shadow:1px 1px 3px #000;background-color:rgba(0,0,0,0)}/*# sourceMappingURL=pillarbox.min.css.map */