├── .github └── ISSUE_TEMPLATE │ ├── problema---bug.md │ └── sugest-o---feature.md ├── Crunchyroll_Premium.zip ├── Crunchyroll_Premium ├── background.js ├── content.css ├── content.js ├── cors.json ├── icon.png ├── interceptor.js ├── logo.png ├── manifest.json ├── popup.html └── popup.js ├── README.md ├── Screenshots ├── 01.png ├── README.md ├── instalacao-1.png ├── instalacao-2.png ├── instalacao-3.png ├── instalacao-4.png ├── instalacao-5.png ├── instalacao-kiwi-1.png ├── instalacao-kiwi-2.png ├── instalacao-kiwi-3.png └── instalacao-kiwi-4.png ├── assets ├── css │ ├── download_dialog.css │ └── player.css ├── font │ ├── SFProDisplay-Regular.eot │ ├── SFProDisplay-Regular.svg │ ├── SFProDisplay-Regular.ttf │ ├── SFProDisplay-Regular.woff │ ├── SFProDisplay-Regular.woff2 │ ├── SFProDisplay-Semibold.eot │ ├── SFProDisplay-Semibold.svg │ ├── SFProDisplay-Semibold.ttf │ ├── SFProDisplay-Semibold.woff │ └── SFProDisplay-Semibold.woff2 ├── icon │ ├── download_icon.svg │ ├── fetching-icon.svg │ ├── forward-30s.svg │ ├── loading-icon.svg │ ├── replay-10s.svg │ ├── update_icon.svg │ └── webvideocaster_icon.png └── js │ ├── jwplayer.js │ ├── player.js │ └── search.js └── index.html /.github/ISSUE_TEMPLATE/problema---bug.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Problema / Bug 3 | about: Criar uma issue para um bug 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## Descrição 11 | Descreva o problema. 12 | Procure nas issues para ver se alguem já teve o mesmo problema. 13 | Verifique se está usando a extensão atualizada! 14 | 15 | ## Link 16 | Caso seu problema esteja acontecendo em algum episódio/série em específico, informe o link. 17 | 18 | ## Informações Adicionais 19 | Se julgar importante, você pode informar seu navegador (chrome/opera/kiwi), inserir um print da tela ou até mesmo enviar os logs do Console. 20 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/sugest-o---feature.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Sugestão / Feature 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: sugestão 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## Descrição 11 | Descreva sua sugestão. 12 | Procure nas issues para ver se alguem já teve a mesma sugestão. 13 | 14 | ## Informações Adicionais 15 | Se julgar importante, você pode inserir informações adicionais, um print da tela, videos ou links. 16 | -------------------------------------------------------------------------------- /Crunchyroll_Premium.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/c64635a3882911251fbfca67c314a935804ccbe2/Crunchyroll_Premium.zip -------------------------------------------------------------------------------- /Crunchyroll_Premium/background.js: -------------------------------------------------------------------------------- 1 | chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) { 2 | console.log(request.options); 3 | fetch(request.url, request.options) 4 | .then(async response => { 5 | console.log(response); 6 | sendResponse({ result: await response.text() }); 7 | }) 8 | .catch(error => sendResponse({ error: error })); 9 | return true; 10 | }); 11 | 12 | chrome.webRequest.onBeforeSendHeaders.addListener( 13 | function (details) { 14 | details.requestHeaders = details.requestHeaders.filter(header => header.name.toLowerCase() !== 'origin' && header.name.toLowerCase() !== 'referer'); 15 | return { 16 | requestHeaders: details.requestHeaders 17 | }; 18 | }, 19 | { 20 | urls: ['*://dev4mod.github.io/*', '*://pl.crunchyroll.com/*', '*://localhost/*', '*://*.vrv.co/*', 'https://prod.gccrunchyroll.com/*', 'https://a-vrv.akamaized.net/*'] 21 | }, 22 | ['blocking', 'requestHeaders', 'extraHeaders'] 23 | ); 24 | 25 | chrome.webRequest.onHeadersReceived.addListener( 26 | function (details) { 27 | details.responseHeaders.push({ 28 | 'name': 'Access-Control-Allow-Origin', 29 | 'value': '*' 30 | }); 31 | return { responseHeaders: details.responseHeaders }; 32 | }, 33 | { 34 | urls: ['*://dev4mod.github.io/*', '*://*.crunchyroll.com/*', '*://localhost/*', '*://*.vrv.co/*', 'https://prod.gccrunchyroll.com/*', 'https://a-vrv.akamaized.net/*'] 35 | }, 36 | ['blocking', 'responseHeaders'] 37 | ); 38 | 39 | chrome.webRequest.onHeadersReceived.addListener( 40 | function (details) { 41 | details.responseHeaders.push({ 42 | name: 'content-security-policy', 43 | value: "default-src 'self' 'unsafe-inline' 'unsafe-eval' data: *.betrad.com 8f2bfa24-f12a-458a-89ac-391b91f711e3.redfastlabs.com accounts.crunchyroll.com api-manga.crunchyroll.com api.amplitude.com api.crunchyroll.com api.segment.io bam.nr-data.net beta-api.crunchyroll.com beta.crunchyroll.com boards-api.greenhouse.io cdimg1.crunchyroll.com cdimg2.crunchyroll.com cdimg3.crunchyroll.com cdn.amplitude.com cdn.cookielaw.org cdn.segment.com cdn.segment.io cdn.shopify.com cdnjs.cloudflare.com cms.crunchyroll.com conduit.redfast.com cr-eec.etp-prod.com crunchyroll.com crunchyroll.surveymonkey.com crunchyroll.zendesk.com customer.iad-03.braze.com eec.crunchyroll.com ekr.zdassets.com fy.v.vrv.co geolocation.onetrust.com img1.ak.crunchyroll.com img1.cdn.crunchyroll.com img1.crunchyroll.com img1.lln.crunchyroll.com img2.ak.crunchyroll.com img2.cdn.crunchyroll.com img2.lln.crunchyroll.com img3.ak.crunchyroll.com img3.cdn.crunchyroll.com img3.lln.crunchyroll.com js-agent.newrelic.com ll.v.vrv.co pl.crunchyroll.com privacyportal-eu.onetrust.com sa.crunchyroll.com sa.etp-prod.com sa.etp-proto0.com secure.crunchyroll.com static.ak.crunchyroll.com static.crunchyroll.com static.cx-proto0.com static.vrv.co static.zdassets.com store.crunchyroll.com v.vrv.co widget.surveymonkey.com wiki.crunchyroll.com www.crunchyroll.com www.google.com www.gstatic.com www.riddle.com www.surveymonkey.com www.zendesk.com *.deviantart.com *.fanpop.com *.fastpic.ru *.fls.doubleclick.net *.gfycat.com *.giphy.com *.imageshack.us *.imgbox.com *.imgflip.com *.imgur.com *.narvii.com *.photobucket.com *.photomania.com *.pinimg.com *.servimg.com *.static.flickr.com *.tenor.com *.tinypic.com *.tumblr.com *.twimg.com *.wikia.nocookie.net 1f2e7.v.fwmrm.net 5fd74.v.fwmrm.net 965432598.privacysandbox.googleadservices.com 982007020.privacysandbox.googleadservices.com ad.doubleclick.net ads.stickyadstv.com ads.yahoo.com ag.gbc.criteo.com ams01-event.spotxchange.com ams01-search.spotxchange.com analytics.tiktok.com analytics.twitter.com api.realytics.io apiservices.krxd.net bea4.v.fwmrm.net beacon.krxd.net bid.g.doubleclick.net cdn-eu.realytics.net cdn.krxd.net cdn.polyfill.io cl.qualaroo.com cm.g.doubleclick.net connect.facebook.net consumer.krxd.net crfeaturesbiz.wpcomstaging.com criteo-partners.tremorhub.com csm.da.us.criteo.net csm.va.us.criteo.net dntcl.qualaroo.com eq97f.publishers.tremorhub.com event.spotxchange.com fonts.googleapis.com fonts.gstatic.com gem.gbc.criteo.com googleads.g.doubleclick.net googleads4.g.doubleclick.net graph.instagram.com gum.criteo.com i.cdn.turner.com i.realytics.io iad02-event.spotxchange.com iad02-search.spotxchange.com insight.adsrvr.org instagram.com js.adsrvr.org jslog.krxd.net mssl.fwmrm.net pixel.advertising.com platform.twitter.com player.vimeo.com quiz.tryinteract.com r.casalemedia.com sb.scorecardresearch.com search.spotxchange.com sp.analytics.yahoo.com ssl.google-analytics.com sslwidget.criteo.com static.ads-twitter.com static.criteo.net static.doubleclick.net stats.g.doubleclick.net sync.search.spotxchange.com syndication.twitter.com t.co tp.realytics.io ups.analytics.yahoo.com usermatch.krxd.net vimeo.com widget.us.criteo.com www.facebook.com www.google-analytics.com www.googleadservices.com www.googletagmanager.com www.instagram.com www.youtube.com wvc-x-callback:" 44 | }); 45 | return { responseHeaders: details.responseHeaders }; 46 | }, 47 | { 48 | urls: ['*://*.crunchyroll.com/*'] 49 | }, 50 | ['blocking', 'responseHeaders'] 51 | ); 52 | -------------------------------------------------------------------------------- /Crunchyroll_Premium/content.css: -------------------------------------------------------------------------------- 1 | #showmedia_video_player{ 2 | display: none; 3 | } -------------------------------------------------------------------------------- /Crunchyroll_Premium/content.js: -------------------------------------------------------------------------------- 1 | var s = document.createElement('script'); 2 | s.src = chrome.runtime.getURL('interceptor.js'); 3 | s.onload = function () { 4 | this.remove(); 5 | }; 6 | (document.head || document.documentElement).appendChild(s); 7 | 8 | const query = qry => document.body.querySelector(qry); 9 | var preservedState = null; 10 | 11 | //function que pega algo dentro dentro do html. 12 | function pegaString(str, first_character, last_character) { 13 | if (str == null || str.match(first_character + '(.*)' + last_character) == null) { 14 | return null; 15 | } else { 16 | new_str = str.match(first_character + '(.*)' + last_character)[1].trim(); 17 | return new_str; 18 | } 19 | } 20 | 21 | //function para remover elementos da página 22 | function remove(element, name, untilRemoved = false, callback = () => {}) { 23 | let tries = 0; 24 | if (untilRemoved) { 25 | const finishRemove = setInterval(() => { 26 | if (query(element) != null) { 27 | clearInterval(finishRemove); 28 | console.log(`[CR Premium] Removendo ${name}...`); 29 | const closeBtn = query(element + ' > .close-button'); 30 | if (closeBtn) closeBtn.click(); 31 | else query(element).style.display = 'none'; 32 | 33 | callback(); 34 | } else if (tries > 250) clearInterval(finishRemove); 35 | else tries++; 36 | }, 20); 37 | } else if (query(element) != null) { 38 | console.log(`[CR Premium] Removendo ${name}...`); 39 | query(element).style.display = 'none'; 40 | } 41 | } 42 | 43 | //renderiza player 44 | function importPlayer(ready = false) { 45 | var videoPlayer = query('.video-player') || query('#frame'); 46 | if (!ready) { 47 | setTimeout(() => importPlayer(!!videoPlayer), 100); 48 | return; 49 | } 50 | var lastWatchedPlayer = query('#frame'); 51 | if (query('.video-player') && lastWatchedPlayer) lastWatchedPlayer.parentNode.removeChild(lastWatchedPlayer); 52 | 53 | var titleLink = query('.show-title-link'); 54 | if (titleLink) titleLink.style.zIndex = '2'; 55 | 56 | console.log('[CR] Removendo player da Crunchyroll...'); 57 | remove('.video-player-placeholder', 'Video Placeholder'); 58 | remove('.video-player', 'Video Player', true); 59 | remove('.blocked-stream-overlay', 'Blocked Overlay', true); 60 | 61 | console.log('[CR Premium] Removendo overlays...'); 62 | remove('.erc-modal-portal > .overlay > .content-wrapper', 'Free Trial Modal', true, () => (document.body.classList = [])); 63 | remove('.erc-watch-premium-upsell', 'Premium Sidebar', true); 64 | remove('.erc-watch-premium-dub-upsell', 'New Premium Sidebar', true); 65 | 66 | videoPlayer.src = ''; 67 | const appendTo = videoPlayer.parentNode; 68 | 69 | console.log('[CR] Pegando dados da stream...'); 70 | // var ep_lang = preservedState.localization.locale.replace('-', ''); 71 | // var ep_id = preservedState.watch.id; 72 | // var ep = preservedState.content.media.byId[ep_id]; 73 | var lang = location.href.match(/\/(.*?)\/watch/)[1].split('-'); 74 | var ep_id = location.href.match(/watch\/(.*?)\//)[1]; 75 | 76 | var episode = document.querySelector('.erc-current-media-info > h1')?.textContent; 77 | var up_next = document.querySelector('[data-t="next-episode"] > a'); 78 | var up_next_title = document.querySelector('[data-t="next-episode"] h4')?.textContent; 79 | var up_next_thumbnail = document.querySelector('[data-t="next-episode"] img')?.src; 80 | //var thumbnail = document.querySelector('.video-player-wrapper picture > img')?.src; 81 | var thumbnail = ''; //ep.images.thumbnail[0][7].source; //pegando a imagem do player 82 | var playback = ''; //ep.playback; 83 | var series = document.querySelector('.show-title-link > h4')?.innerText; 84 | 85 | var message = { 86 | 'playback': playback, 87 | 'id': ep_id, 88 | 'lang': '', 89 | 'up_next': up_next ? up_next.href : undefined, 90 | 'series': series ? series : undefined, 91 | 'episode': episode ? episode : undefined, 92 | 'thumbnail': thumbnail ? thumbnail : undefined, 93 | 'up_next_thumbnail': up_next_thumbnail ? up_next_thumbnail : undefined, 94 | 'up_next_title': up_next_title ? up_next_title : undefined 95 | }; 96 | 97 | console.log('[CR Beta] Adicionando o jwplayer...'); 98 | addPlayer(appendTo, message, true); 99 | } 100 | 101 | function addPlayer(element, playerInfo, beta = false) { 102 | console.log('[CR Premium] Adicionando o jwplayer...'); 103 | var ifrm = document.createElement('iframe'); 104 | ifrm.setAttribute('id', 'frame'); 105 | ifrm.setAttribute('src', 'https://dev4mod.github.io/crp-iframe-player/'); 106 | // ifrm.setAttribute('src', 'http://localhost:5500/'); 107 | ifrm.setAttribute('width', '100%'); 108 | ifrm.setAttribute('height', '100%'); 109 | ifrm.setAttribute('frameborder', '0'); 110 | ifrm.setAttribute('scrolling', 'no'); 111 | ifrm.setAttribute('allowfullscreen', 'allowfullscreen'); 112 | ifrm.setAttribute('allow', 'autoplay; encrypted-media *'); 113 | 114 | element.appendChild(ifrm); 115 | 116 | chrome.storage.sync.get(['forcemp4', 'aseguir', 'cooldown', 'webvideocaster'], function (items) { 117 | ifrm.onload = async function () { 118 | let media = await getData(playerInfo.id); 119 | playerInfo['video_config_media'] = media[0]; 120 | playerInfo['lang'] = media[1].replace('-', ''); 121 | playerInfo['webvideocaster'] = items.webvideocaster === undefined ? false : items.webvideocaster; 122 | playerInfo['up_next_cooldown'] = items.cooldown === undefined ? 5 : items.cooldown; 123 | playerInfo['up_next_enable'] = items.aseguir === undefined ? true : items.aseguir; 124 | playerInfo['force_mp4'] = items.forcemp4 === undefined ? false : items.forcemp4; 125 | playerInfo['version'] = '1.4.0'; 126 | playerInfo['noproxy'] = true; 127 | ifrm.contentWindow.postMessage(playerInfo, '*'); 128 | }; 129 | }); 130 | } 131 | 132 | async function getData(video_id) { 133 | for (let i = 0; i < 2; i++) { 134 | await getToken(); 135 | console.log('[CR Premium] Pegando dados da stream...'); 136 | 137 | let localToken = localStorage.getItem('token'); 138 | let allTokens = JSON.parse(localToken); 139 | let mediaInfo = await getMediaInfo(video_id, allTokens.token); 140 | if (mediaInfo == null) { 141 | localStorage.removeItem('token'); 142 | continue; 143 | } 144 | let mediaId = mediaInfo[0]; 145 | let url = `https://beta-api.crunchyroll.com/cms/v2${allTokens.cms.bucket}/videos/${mediaId}/streams?Policy=${allTokens.cms.policy}&Signature=${allTokens.cms.signature}&Key-Pair-Id=${allTokens.cms.key_pair_id}`; 146 | let response_media = await fetchByPass(url, { 147 | method: 'GET', 148 | headers: { 149 | 'Content-Type': 'application/json', 150 | 'authorization': `${allTokens.token.token_type} ${allTokens.token.access_token}` 151 | } 152 | }); 153 | if (response_media.includes('error')) { 154 | localStorage.removeItem('token'); 155 | continue; 156 | } 157 | return [response_media, mediaInfo[1]]; 158 | } 159 | console.log('[CR Premium] Erro ao pegar dados da stream...'); 160 | } 161 | 162 | async function getMediaInfo(video_id, token) { 163 | let resp = await fetchByPass(`https://beta-api.crunchyroll.com/content/v2/cms/objects/${video_id}?ratings=true&locale=pt-BR`, { 164 | method: 'GET', 165 | headers: { 166 | 'Content-Type': 'application/json', 167 | 'authorization': `${token.token_type} ${token.access_token}` 168 | } 169 | }); 170 | if (resp.includes('error')) { 171 | localStorage.removeItem('token'); 172 | return null; 173 | } 174 | let json = JSON.parse(resp); 175 | let lang = json.data[0].episode_metadata.subtitle_locales[0]; 176 | if (json.data[0].episode_metadata.is_dubbed) { 177 | lang = json.data[0].episode_metadata.audio_locale; 178 | } 179 | return [json.data[0].episode_metadata.versions[0].media_guid, lang]; 180 | } 181 | 182 | async function getToken() { 183 | let token = localStorage.getItem('token'); 184 | if (token == null || typeof token === 'undefined') { 185 | console.log('[CR Premium] Token expirado, gerando novo token...'); 186 | let tokenData = JSON.parse(await getRequest()); 187 | console.log(tokenData); 188 | let newToken = await fetchByPass('https://beta-api.crunchyroll.com/index/v2', { 189 | method: 'GET', 190 | headers: { 191 | 'authorization': `${tokenData.token_type} ${tokenData.access_token}` 192 | } 193 | }); 194 | let allTokens = JSON.parse(newToken); 195 | allTokens['token'] = tokenData; 196 | localStorage.setItem('token', JSON.stringify(allTokens)); 197 | } 198 | } 199 | 200 | async function getRequest() { 201 | let refreshToken = await fetchByPass('https://raw.githubusercontent.com/Samfun75/File-host/main/aniyomi/refreshToken.txt'); 202 | refreshToken = refreshToken.replace(/[\n\r]/gi, ''); 203 | console.log(refreshToken); 204 | 205 | const data = new URLSearchParams(); 206 | data.append('grant_type', 'refresh_token'); 207 | data.append('refresh_token', refreshToken); 208 | data.append('scope', 'offline_access'); 209 | 210 | let resp = await fetchByPass('https://beta-api.crunchyroll.com/auth/v1/token', { 211 | method: 'POST', 212 | headers: { 213 | 'Content-Type': 'application/x-www-form-urlencoded', 214 | 'Authorization': 'Basic a3ZvcGlzdXZ6Yy0teG96Y21kMXk6R21JSTExenVPVnRnTjdlSWZrSlpibzVuLTRHTlZ0cU8=' 215 | }, 216 | body: data.toString() 217 | }); 218 | return resp; 219 | } 220 | 221 | function fetchByPass(url, options) { 222 | return new Promise((resolve, reject) => { 223 | chrome.runtime.sendMessage({ url, options }, response => { 224 | if (response.error) { 225 | reject(response.error); 226 | } else { 227 | resolve(response.result); 228 | } 229 | }); 230 | }); 231 | } 232 | 233 | //function ao carregar pagina. 234 | function onloadfunction() { 235 | importPlayer(); // beta CR 236 | registerChangeEpisode(); 237 | } 238 | 239 | // function pra atualizar pagina quando mudar de episodio pela UI beta 240 | var currentURL = window.location.href; 241 | 242 | function registerChangeEpisode() { 243 | setInterval(async () => { 244 | if (currentURL !== window.location.href) { 245 | currentURL = window.location.href; 246 | if (currentURL.includes('/watch/')) { 247 | remove('.erc-watch-premium-upsell', 'New Premium Sidebar', true); 248 | remove('.erc-watch-premium-dub-upsell', 'New Premium Sidebar', true); 249 | const HTML = await fetch(currentURL); 250 | console.log('[CR Beta] Searching for new INITIAL_STATE'); 251 | preservedState = JSON.parse(pegaString(HTML, '__INITIAL_STATE__ = ', ';')); 252 | importPlayer(false); 253 | } 254 | } 255 | }, 50); 256 | } 257 | 258 | function fetch(url) { 259 | return new Promise(async (resolve, reject) => { 260 | var xhr = new XMLHttpRequest(); 261 | xhr.open('GET', url, true); 262 | xhr.withCredentials = true; 263 | xhr.onreadystatechange = () => { 264 | if (xhr.readyState == 4) 265 | if (xhr.status == 200) resolve(xhr.responseText); 266 | else reject(xhr.statusText); 267 | }; 268 | xhr.send(); 269 | }); 270 | } 271 | 272 | document.addEventListener('DOMContentLoaded', onloadfunction, false); 273 | document.onreadystatechange = function () { 274 | if (document.readyState === 'interactive') { 275 | console.log('[CR Beta] Searching for INITIAL_STATE'); 276 | const HTML = '' + document.body.innerHTML; 277 | preservedState = JSON.parse(pegaString(HTML, '__INITIAL_STATE__ = ', ';')); 278 | } 279 | 280 | const crBetaStyle = document.createElement('style'); 281 | crBetaStyle.innerHTML = `.video-player-wrapper { 282 | margin-bottom: calc(-3vh - 7vw); 283 | height: 57.25vw !important; 284 | margin-left: auto; 285 | margin-right: auto; 286 | width: 80% !important; 287 | }`; 288 | document.head.appendChild(crBetaStyle); 289 | }; 290 | 291 | function fetch(url) { 292 | return new Promise(async (resolve, reject) => { 293 | var xhr = new XMLHttpRequest(); 294 | xhr.open('GET', url, true); 295 | xhr.withCredentials = true; 296 | xhr.onreadystatechange = () => { 297 | if (xhr.readyState == 4) 298 | if (xhr.status == 200) resolve(xhr.responseText); 299 | else reject(xhr.statusText); 300 | }; 301 | xhr.send(); 302 | }); 303 | } 304 | -------------------------------------------------------------------------------- /Crunchyroll_Premium/cors.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 1, 4 | "priority": 1, 5 | "action": { 6 | "type": "modifyHeaders", 7 | "responseHeaders": [ 8 | { 9 | "header": "Access-Control-Allow-Origin", 10 | "operation": "set", 11 | "value": "*" 12 | }, 13 | { 14 | "header": "Access-Control-Allow-Credentials", 15 | "operation": "set", 16 | "value": "true" 17 | }, 18 | { 19 | "header": "Access-Control-Allow-Origin", 20 | "operation": "set", 21 | "value": "*" 22 | } 23 | ] 24 | }, 25 | "condition": { 26 | "regexFilter": "^https?://(v\\.vrv\\.co|.*\\.crunchyroll\\.com|api\\.kamyroll\\.tech|dev4mod\\.github\\.io)/", 27 | "resourceTypes": ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"] 28 | } 29 | }, 30 | { 31 | "id": 2, 32 | "priority": 1, 33 | "action": { 34 | "type": "modifyHeaders", 35 | "requestHeaders": [ 36 | { 37 | "header": "Origin", 38 | "operation": "set", 39 | "value": "https://www.crunchyroll.com" 40 | }, 41 | { 42 | "header": "Referer", 43 | "operation": "set", 44 | "value": "https://www.crunchyroll.com" 45 | } 46 | ] 47 | }, 48 | "condition": { 49 | "initiatorDomains": ["https://v.vrv.co"], 50 | "resourceTypes": ["xmlhttprequest"] 51 | } 52 | }, 53 | { 54 | "id": 3, 55 | "priority": 1, 56 | "action": { 57 | "type": "modifyHeaders", 58 | "responseHeaders": [ 59 | { 60 | "header": "content-security-policy", 61 | "operation": "append", 62 | "value": "default-src 'self' 'unsafe-inline' 'unsafe-eval' data: *.betrad.com 8f2bfa24-f12a-458a-89ac-391b91f711e3.redfastlabs.com accounts.crunchyroll.com api-manga.crunchyroll.com api.amplitude.com api.crunchyroll.com api.segment.io bam.nr-data.net beta-api.crunchyroll.com beta.crunchyroll.com boards-api.greenhouse.io cdimg1.crunchyroll.com cdimg2.crunchyroll.com cdimg3.crunchyroll.com cdn.amplitude.com cdn.cookielaw.org cdn.segment.com cdn.segment.io cdn.shopify.com cdnjs.cloudflare.com cms.crunchyroll.com conduit.redfast.com cr-eec.etp-prod.com crunchyroll.com crunchyroll.surveymonkey.com crunchyroll.zendesk.com customer.iad-03.braze.com eec.crunchyroll.com ekr.zdassets.com fy.v.vrv.co geolocation.onetrust.com img1.ak.crunchyroll.com img1.cdn.crunchyroll.com img1.crunchyroll.com img1.lln.crunchyroll.com img2.ak.crunchyroll.com img2.cdn.crunchyroll.com img2.lln.crunchyroll.com img3.ak.crunchyroll.com img3.cdn.crunchyroll.com img3.lln.crunchyroll.com js-agent.newrelic.com ll.v.vrv.co pl.crunchyroll.com privacyportal-eu.onetrust.com sa.crunchyroll.com sa.etp-prod.com sa.etp-proto0.com secure.crunchyroll.com static.ak.crunchyroll.com static.crunchyroll.com static.cx-proto0.com static.vrv.co static.zdassets.com store.crunchyroll.com v.vrv.co widget.surveymonkey.com wiki.crunchyroll.com www.crunchyroll.com www.google.com www.gstatic.com www.riddle.com www.surveymonkey.com www.zendesk.com *.deviantart.com *.fanpop.com *.fastpic.ru *.fls.doubleclick.net *.gfycat.com *.giphy.com *.imageshack.us *.imgbox.com *.imgflip.com *.imgur.com *.narvii.com *.photobucket.com *.photomania.com *.pinimg.com *.servimg.com *.static.flickr.com *.tenor.com *.tinypic.com *.tumblr.com *.twimg.com *.wikia.nocookie.net 1f2e7.v.fwmrm.net 5fd74.v.fwmrm.net 965432598.privacysandbox.googleadservices.com 982007020.privacysandbox.googleadservices.com ad.doubleclick.net ads.stickyadstv.com ads.yahoo.com ag.gbc.criteo.com ams01-event.spotxchange.com ams01-search.spotxchange.com analytics.tiktok.com analytics.twitter.com api.realytics.io apiservices.krxd.net bea4.v.fwmrm.net beacon.krxd.net bid.g.doubleclick.net cdn-eu.realytics.net cdn.krxd.net cdn.polyfill.io cl.qualaroo.com cm.g.doubleclick.net connect.facebook.net consumer.krxd.net crfeaturesbiz.wpcomstaging.com criteo-partners.tremorhub.com csm.da.us.criteo.net csm.va.us.criteo.net dntcl.qualaroo.com eq97f.publishers.tremorhub.com event.spotxchange.com fonts.googleapis.com fonts.gstatic.com gem.gbc.criteo.com googleads.g.doubleclick.net googleads4.g.doubleclick.net graph.instagram.com gum.criteo.com i.cdn.turner.com i.realytics.io iad02-event.spotxchange.com iad02-search.spotxchange.com insight.adsrvr.org instagram.com js.adsrvr.org jslog.krxd.net mssl.fwmrm.net pixel.advertising.com platform.twitter.com player.vimeo.com quiz.tryinteract.com r.casalemedia.com sb.scorecardresearch.com search.spotxchange.com sp.analytics.yahoo.com ssl.google-analytics.com sslwidget.criteo.com static.ads-twitter.com static.criteo.net static.doubleclick.net stats.g.doubleclick.net sync.search.spotxchange.com syndication.twitter.com t.co tp.realytics.io ups.analytics.yahoo.com usermatch.krxd.net vimeo.com widget.us.criteo.com www.facebook.com www.google-analytics.com www.googleadservices.com www.googletagmanager.com www.instagram.com www.youtube.com wvc-x-callback:;img-src * 'self' data: https:;" 63 | } 64 | ] 65 | }, 66 | "condition": { 67 | "urlFilter": "crunchyroll.com", 68 | "resourceTypes": ["main_frame", "sub_frame"] 69 | } 70 | } 71 | ] 72 | -------------------------------------------------------------------------------- /Crunchyroll_Premium/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/c64635a3882911251fbfca67c314a935804ccbe2/Crunchyroll_Premium/icon.png -------------------------------------------------------------------------------- /Crunchyroll_Premium/interceptor.js: -------------------------------------------------------------------------------- 1 | window.evidon_dg = {} 2 | 3 | Object.defineProperty(window.evidon_dg, "evidonCriticalDomains", { 4 | get: function () { return ['wvc-x-callback:']; }, 5 | }); 6 | Object.defineProperty(window.evidon_dg, "productNames", { 7 | get: function () { return {}; }, 8 | }); 9 | Object.defineProperty(window.evidon_dg, "loadedProducts", { 10 | get: function () { return []; }, 11 | }); 12 | Object.defineProperty(window.evidon_dg, "productIds", { 13 | get: function () { return []; }, 14 | }); 15 | 16 | console.log("[CR XHR] Configurando interceptor...") 17 | var rawOpen = XMLHttpRequest.prototype.open; 18 | 19 | XMLHttpRequest.prototype.open = function () { 20 | if (!this._hooked) { 21 | this._hooked = true; 22 | setupHook(this); 23 | } 24 | rawOpen.apply(this, arguments); 25 | } 26 | 27 | function setupHook(xhr) { 28 | let toggle = false; 29 | function getter() { 30 | delete xhr.responseText; 31 | var ret = xhr.responseText; 32 | try { 33 | if (toggle = !toggle) handleIntercept(JSON.parse(ret)); 34 | } catch (e) { } 35 | setup(); 36 | return ret; 37 | } 38 | 39 | function setup() { 40 | Object.defineProperty(xhr, 'responseText', { 41 | get: getter, 42 | configurable: true 43 | }); 44 | } 45 | setup(); 46 | } 47 | 48 | const verbose = false; 49 | // Intercepta response das requests (network) 50 | function handleIntercept(jsonResponse) { 51 | if (verbose) console.log("[CR XHR]", jsonResponse); 52 | 53 | // Salva IDs externos dos panels no localStorage 54 | if (jsonResponse.items) jsonResponse.items.forEach(item => { 55 | if (item.id && item.external_id) { 56 | console.log("[CR XHR] Panel found:", item); 57 | storeExternalId(item.id, item.external_id) 58 | } 59 | }) 60 | } 61 | 62 | function storeExternalId(id, external_id) { 63 | let externalIds = localStorage.getItem('externalIds'); 64 | if (externalIds) externalIds = JSON.parse(externalIds) 65 | else externalIds = {}; 66 | externalIds[id] = external_id; 67 | localStorage.setItem('externalIds', JSON.stringify(externalIds)); 68 | } 69 | -------------------------------------------------------------------------------- /Crunchyroll_Premium/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/c64635a3882911251fbfca67c314a935804ccbe2/Crunchyroll_Premium/logo.png -------------------------------------------------------------------------------- /Crunchyroll_Premium/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Crunchyroll iFrame Player", 3 | "version": "1.4.0", 4 | "description": "Permite ver todos os vídeos do crunchyroll gratuitamente.", 5 | "author": "itallolegal", 6 | "icons": { 7 | "48": "icon.png" 8 | }, 9 | "browser_action": { 10 | "default_title": "Crunchyroll iFrame Player", 11 | "default_popup": "popup.html", 12 | "default_icon": "icon.png" 13 | }, 14 | "permissions": ["webRequest", "webRequestBlocking", "storage", ""], 15 | "background": { 16 | "scripts": ["background.js"] 17 | }, 18 | "content_scripts": [ 19 | { 20 | "matches": ["https://*.crunchyroll.com/*"], 21 | "css": ["content.css"], 22 | "js": ["content.js"], 23 | "run_at": "document_start" 24 | } 25 | ], 26 | "manifest_version": 2, 27 | "web_accessible_resources": ["interceptor.js"] 28 | } 29 | -------------------------------------------------------------------------------- /Crunchyroll_Premium/popup.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Crunchyroll iFrame Player 6 | 7 | 8 | 9 | 10 | 11 |
12 |
13 |
14 | 15 |
16 |

Crunchyroll
iFrame Player

17 |

Projeto open-source, sinta-se livre para consultar o código fonte.

18 |
19 | 20 | 21 |
22 | 23 | 24 |
25 | 26 | 27 |
28 |
29 | Exibir faltando segundos. 30 |

31 | Baixe o WebVideoCaster aqui. 32 | 33 | 34 | 40 | 43 | 46 | 47 |
35 |

Itallolegal 37 |
Criador 38 |

39 |
41 |

Hyper-Tx
Contribuidor

42 |
44 |

Mateus7G
Mantedor

45 |
48 | 49 |
    50 |
  • 52 |
  • 54 |
55 |
56 |
57 |
58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /Crunchyroll_Premium/popup.js: -------------------------------------------------------------------------------- 1 | const globalDefault = { 'webvideocaster': false, 'cooldown': 5, 'aseguir': true, 'forcemp4': false } 2 | const globalVariables = Object.keys(globalDefault) 3 | 4 | chrome.storage.sync.get(globalVariables, function (items) { 5 | globalVariables.forEach(popupElement => { 6 | const value = items[popupElement] === undefined ? globalDefault[popupElement] : items[popupElement] 7 | setValue(popupElement, value) 8 | }) 9 | }) 10 | 11 | globalVariables.forEach(popupElement => { 12 | document.getElementById(popupElement).addEventListener("input", () => { 13 | let syncValue = {} 14 | syncValue[popupElement] = getValue(popupElement) 15 | 16 | chrome.storage.sync.set(syncValue); 17 | }) 18 | }) 19 | 20 | function getValue(id) { 21 | const element = document.getElementById(id) 22 | if (element.type === 'checkbox') return element.checked 23 | else return element.value 24 | } 25 | 26 | function setValue(id, value) { 27 | const element = document.getElementById(id) 28 | if (element.type === 'checkbox') element.checked = value 29 | else element.value = value 30 | } 31 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Crunchyroll iFrame Player [![Built with love](https://img.shields.io/badge/made%20with-javascript-yellow?style=for-the-badge)](https://github.com/Dev4Mod/crp-iframe-player/releases/latest) [![Downloads](https://img.shields.io/github/downloads/Dev4Mod/crp-iframe-player/total.svg?style=for-the-badge)](https://github.com/Dev4Mod/crp-iframe-player/releases/latest) 2 | 3 | Essa é uma extensão da comunidade que permite assistir todo conteúdo da Crunchyroll. 4 | Originalmente criada por [itallolegal](https://github.com/itallolegal) (desativado) e [Hyper-Tx](https://github.com/Hyper-Tx), atualmente mantida por [mateus7g](https://github.com/mateus7g) e atualizado por [Dev4Mod](https://github.com/Dev4Mod). 5 | Um agradecimento especial a todos os colaboradores. 6 | 7 | Obrigado por utilizar. :) 8 | 9 | ## Download 10 | 11 | Você pode encontrar as últimas versões disponíveis abaixo: 12 | 13 | Desktop 14 | 15 | #### Desktop (PC) 16 | 17 | Atualmente a versão para Desktop está disponível [aqui](https://github.com/Dev4Mod/crp-iframe-player/releases/latest). 18 | Para instalar veja o passo a passo [para pc](#%EF%B8%8F-como-instalar-desktop). 19 | 20 | ## 🖥️ Como instalar? (desktop) 21 | 22 | A extensão para Desktop funciona apenas em navegadores **baseados em Chromium**, como: Google Chrome, Opera, etc. 23 | Verifique se o seu browser está atualizado e prossiga: 24 | 25 | Extraindo arquivo baixado 26 | 27 | **1** ➜ Faça o [download](#download) do arquivo `Crunchyroll_Premium.zip`, e extraia-o: 28 | 29 | **2** ➜ Entre na aba de [extensões](https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/master/Screenshots/instalacao-1.png?raw=true) do seu navegador (ou acesse diretamente [`chrome://extensions`](chrome://extensions)) 30 | 31 | **3** ➜ Habilite o **Modo programador**, e então clique no botão **Carregar expandida**: 32 | 33 | ![Habilitando modo programador, e carregando extensão](https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/master/Screenshots/instalacao-2.png?raw=true) 34 | 35 | **4** ➜ Selecione a pasta [que foi extraída](https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/master/Screenshots/instalacao-4.png?raw=true) no começo do tutorial 36 | 37 | Detalhes da extensão instalada 38 | 39 | **5** ➜ Se você fez tudo certo, você deverá ver um card como este no seu navegador. 40 | 41 | **6** ➜ Agora é só assistir 😉 42 | 43 |


44 | 45 | **Mensagens que podem atualmente ser mandadas para o player via script:** 46 | 47 | ```yml 48 | tampermonkey: usa um proxy para fazer as requests 49 | lang: código do locale/idioma padrão 50 | playback: sem uso atualmente 51 | beta: caso esteja usando o crunchyroll na versão beta (requer passar old_url) 52 | old_url: url do video na versão antiga do site 53 | up_next_enable: pular episódios automaticamente (quando up_next for informado) 54 | up_next_cooldown: segundos para acabar e mostrar o popup do próximo episódio (0 para desativar popup) 55 | up_next: url do próximo vídeo a ser tocado/redirecionado (requer up_next_enable) 56 | force_mp4: força os vídeos a tocar em mp4 e não m3u8 (ativar essa opção deixará o loading mais lento, recomendado apenas para chromecasting) 57 | webvideocaster: troca o botão de download por casting do WebVideoCaster 58 | ``` 59 | 60 | ## 📝 Aviso Crunchyroll Beta 61 | 62 | O novo site do Crunchyroll **quebra completamente** a extensão: [26#issuecomment-1006569041](https://github.com/Dev4Mod/crp-iframe-player/issues/26#issuecomment-1006569041) 63 | 64 | As novas versões (v1.1.0+) **ainda** são compatíveis pois ao acessar o novo site, seu navegador puxa os dados do vídeo do site antigo. 65 | Isso quer dizer que, se a versão antiga do Crunchyroll for **completamente substituída** a extensão irá parar de funcionar permanentemente. 66 | -------------------------------------------------------------------------------- /Screenshots/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/c64635a3882911251fbfca67c314a935804ccbe2/Screenshots/01.png -------------------------------------------------------------------------------- /Screenshots/README.md: -------------------------------------------------------------------------------- 1 | # Screenshots por Hyper 2 | https://github.com/Hyper1025 3 | 4 | Obrigado pela ajuda! 😃 5 | -------------------------------------------------------------------------------- /Screenshots/instalacao-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/c64635a3882911251fbfca67c314a935804ccbe2/Screenshots/instalacao-1.png -------------------------------------------------------------------------------- /Screenshots/instalacao-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/c64635a3882911251fbfca67c314a935804ccbe2/Screenshots/instalacao-2.png -------------------------------------------------------------------------------- /Screenshots/instalacao-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/c64635a3882911251fbfca67c314a935804ccbe2/Screenshots/instalacao-3.png -------------------------------------------------------------------------------- /Screenshots/instalacao-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/c64635a3882911251fbfca67c314a935804ccbe2/Screenshots/instalacao-4.png -------------------------------------------------------------------------------- /Screenshots/instalacao-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/c64635a3882911251fbfca67c314a935804ccbe2/Screenshots/instalacao-5.png -------------------------------------------------------------------------------- /Screenshots/instalacao-kiwi-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/c64635a3882911251fbfca67c314a935804ccbe2/Screenshots/instalacao-kiwi-1.png -------------------------------------------------------------------------------- /Screenshots/instalacao-kiwi-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/c64635a3882911251fbfca67c314a935804ccbe2/Screenshots/instalacao-kiwi-2.png -------------------------------------------------------------------------------- /Screenshots/instalacao-kiwi-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/c64635a3882911251fbfca67c314a935804ccbe2/Screenshots/instalacao-kiwi-3.png -------------------------------------------------------------------------------- /Screenshots/instalacao-kiwi-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/c64635a3882911251fbfca67c314a935804ccbe2/Screenshots/instalacao-kiwi-4.png -------------------------------------------------------------------------------- /assets/css/download_dialog.css: -------------------------------------------------------------------------------- 1 | @font-face {font-family: "SFProDisplay-Regular"; 2 | src: url("../../assets/font/SFProDisplay-Regular.eot"); /* IE9*/ 3 | src: url("../../assets/font/SFProDisplay-Regular.eot?#iefix") format("embedded-opentype"), /* IE6-IE8 */ 4 | url("../../assets/font/SFProDisplay-Regular.woff2") format("woff2"), /* chrome firefox */ 5 | url("../../assets/font/SFProDisplay-Regular.woff") format("woff"), /* chrome firefox */ 6 | url("../../assets/font/SFProDisplay-Regular.ttf") format("truetype"), /* chrome firefox opera Safari, Android, iOS 4.2+*/ 7 | url("../../assets/font/SFProDisplay-Regular.svg#SFProDisplay-Regular") format("svg"); /* iOS 4.1- */ 8 | } 9 | @font-face {font-family: "SFProDisplay-Semibold"; 10 | src: url("../../assets/font/SFProDisplay-Semibold.eot"); /* IE9*/ 11 | src: url("../../assets/font/SFProDisplay-Semibold.eot?#iefix") format("embedded-opentype"), /* IE6-IE8 */ 12 | url("../../assets/font/SFProDisplay-Semibold.woff2") format("woff2"), /* chrome firefox */ 13 | url("../../assets/font/SFProDisplay-Semibold.woff") format("woff"), /* chrome firefox */ 14 | url("../../assets/font/SFProDisplay-Semibold.ttf") format("truetype"), /* chrome firefox opera Safari, Android, iOS 4.2+*/ 15 | url("../../assets/font/SFProDisplay-Semibold.svg#SFProDisplay-Semibold") format("svg"); /* iOS 4.1- */ 16 | } 17 | 18 | .modal::-webkit-scrollbar { 19 | width: 8px!important; 20 | } 21 | .modal::-webkit-scrollbar-thumb { 22 | background: #888!important; 23 | } 24 | .modal::-webkit-scrollbar-track { 25 | background: #a7a7a7!important; 26 | } 27 | .modal { 28 | background: #3f3f3f; 29 | text-align: center; 30 | width: 230px; 31 | height: 270px; 32 | z-index: 2147483647; 33 | position: absolute; 34 | top: 0; 35 | left: 0; 36 | bottom: 0; 37 | right: 0; 38 | border-radius: 3px; 39 | margin: auto; 40 | padding: 20px; 41 | -webkit-filter: url(#blur); 42 | filter: url(#blur); 43 | -webkit-transform: translate3d(0, -900%, 0); 44 | transform: translate3d(0, -900%, 0); 45 | } 46 | .close-modal { 47 | background: none; 48 | border: none; 49 | position: absolute; 50 | font-size: 20px; 51 | cursor: pointer; 52 | right: 10px; 53 | top: 10px; 54 | color: #eee; 55 | outline: none; 56 | } 57 | .download-item { 58 | display: table; 59 | vertical-align: middle; 60 | height: 55px; 61 | width: 100%; 62 | } 63 | .partdditem { 64 | display: table-cell; 65 | vertical-align: middle; 66 | margin: 6%; 67 | } 68 | .not-copyable { 69 | -webkit-touch-callout: none; 70 | -webkit-user-select: none; 71 | -khtml-user-select: none; 72 | -moz-user-select: none; 73 | -ms-user-select: none; 74 | user-select: none; 75 | } 76 | 77 | .size { 78 | color: #eee; 79 | font-family: SFProDisplay-Regular; 80 | font-size: 15px; 81 | text-align: left; 82 | width: 14%; 83 | opacity: .7; 84 | } 85 | 86 | .size > img { 87 | position: relative; 88 | top: 4px; 89 | min-width: 15px; 90 | width: 15px; 91 | max-width: 15px; 92 | } 93 | 94 | .quality { 95 | color: #eee; 96 | font-family: SFProDisplay-Semibold; 97 | font-size: 15px; 98 | width: 13%; 99 | text-align: left; 100 | padding-left: 20px; 101 | } 102 | 103 | .quality > sup { 104 | font-family: 'Roboto', sans-serif; 105 | color: rgb(244, 117, 33); 106 | font-size: 10px; 107 | } 108 | .down-icon { 109 | transition: filter 0.08s ease; 110 | -moz-transition: filter 0.08s ease; 111 | -ms-transition: filter 0.08s ease; 112 | -o-transition: filter 0.08s ease; 113 | -webkit-transition: filter 0.08s ease; 114 | background-image: url(https://fonts.gstatic.com/s/i/materialicons/get_app/v5/24px.svg?download=true); 115 | -webkit-filter: invert(98%) sepia(1%) saturate(99%) hue-rotate(314deg) brightness(117%) contrast(87%); 116 | filter: invert(98%) sepia(1%) saturate(99%) hue-rotate(314deg) brightness(117%) contrast(87%); 117 | cursor: pointer; 118 | width: 12%; 119 | background-position: center; 120 | background-repeat: no-repeat; 121 | } 122 | .down-icon:hover { 123 | -webkit-filter: invert(49%) sepia(98%) saturate(1501%) hue-rotate(348deg) brightness(99%) contrast(92%);; 124 | filter: invert(49%) sepia(98%) saturate(1501%) hue-rotate(348deg) brightness(99%) contrast(92%); 125 | } 126 | -------------------------------------------------------------------------------- /assets/css/player.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0px; 3 | padding: 0; 4 | width: 100%; 5 | height: 100%; 6 | border: none; 7 | } 8 | 9 | video { 10 | outline: none; 11 | } 12 | 13 | #player_div { 14 | height: 100%!important; 15 | } 16 | 17 | #player_div.beta-layout { 18 | height: 80vh !important; 19 | } 20 | 21 | #player_div .jw-button-color.jw-toggle:not(.jw-icon-cast), 22 | #player_div .jw-button-color:hover:not(.jw-icon-cast), 23 | #player_div .jw-button-color:focus:not(.jw-icon-cast), 24 | #player_div .jw-button-color.jw-toggle.jw-off:hover:not(.jw-icon-cast) { 25 | color: rgb(244, 117, 33)!important; 26 | } 27 | 28 | #player_div .jw-option.jw-active-option, 29 | #player_div .jw-option:not(.jw-active-option):hover, 30 | #player_div .jw-option:not(.jw-active-option):focus, 31 | #player_div .jw-settings-content-item:hover, 32 | #player_div .jw-nextup-tooltip:hover, 33 | #player_div .jw-nextup-tooltip:focus, 34 | #player_div .jw-nextup-close:hover { 35 | color: rgb(244, 117, 33)!important; 36 | } 37 | 38 | .jw-progress { 39 | background-color: rgb(244, 117, 33)!important; 40 | } 41 | 42 | .loading_container { 43 | background-color: #000; 44 | border-radius: 2px; 45 | -webkit-border-radius: 2px; 46 | -moz-border-radius: 2px; 47 | display: flex; 48 | flex-direction: row; 49 | -webkit-flex-direction: row; 50 | -moz-flex-direction: row; 51 | align-items: stretch; 52 | -webkit-align-items: stretch; 53 | padding: 20px; 54 | top: 50%; 55 | left: 50%; 56 | position: absolute; 57 | transform: translate(-50%, -50%); 58 | -webkit-transform: translate(-50%, -50%); 59 | -ms-transform: translate(-50%, -50%); 60 | -moz-transform: translate(-50%, -50%); 61 | -o-transform: translate(-50%, -50%); 62 | } 63 | 64 | .loading_icon { 65 | height: 30px; 66 | width: 30px; 67 | margin-right: 20px; 68 | flex: 0 0 auto; 69 | -webkit-flex: 0 0 auto; 70 | -ms-flex: 0 0 auto; 71 | -moz-flex: 0 0 auto; 72 | align-self: center; 73 | -webkit-align-self: center; 74 | } 75 | 76 | .loading_text_container { 77 | display: flex; 78 | flex: 1 1 auto; 79 | flex-flow: column; 80 | margin: 0; 81 | overflow-y: auto; 82 | padding: 0; 83 | } 84 | 85 | .loading_text { 86 | text-align: start; 87 | color: #FFF; 88 | font: 14px/1.35 Arial, Helvetica, sans-serif; 89 | } 90 | 91 | .corta_linha { 92 | display: block; 93 | } 94 | 95 | .creator-message span { 96 | font-size: 13px; 97 | color: white; 98 | } 99 | 100 | .creator-message { 101 | display: none; 102 | font-family: 'Roboto', sans-serif; 103 | background-color: #323232; 104 | padding: 12px 12px; 105 | align-items: center; 106 | -webkit-box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2); 107 | box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2); 108 | } 109 | 110 | .jw-button-color:hover:not(.jw-icon-cast) .jw-button-image { 111 | filter: brightness(0) saturate(100%) invert(65%) sepia(69%) saturate(4314%) hue-rotate(348deg) brightness(100%) contrast(129%); 112 | } 113 | 114 | [button="webvideocaster-video-button"] .jw-button-image { 115 | filter: saturate(0%) !important; 116 | } 117 | 118 | [button="webvideocaster-video-button"]:hover .jw-button-image { 119 | filter: none !important; 120 | } 121 | -------------------------------------------------------------------------------- /assets/font/SFProDisplay-Regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/c64635a3882911251fbfca67c314a935804ccbe2/assets/font/SFProDisplay-Regular.eot -------------------------------------------------------------------------------- /assets/font/SFProDisplay-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/c64635a3882911251fbfca67c314a935804ccbe2/assets/font/SFProDisplay-Regular.ttf -------------------------------------------------------------------------------- /assets/font/SFProDisplay-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/c64635a3882911251fbfca67c314a935804ccbe2/assets/font/SFProDisplay-Regular.woff -------------------------------------------------------------------------------- /assets/font/SFProDisplay-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/c64635a3882911251fbfca67c314a935804ccbe2/assets/font/SFProDisplay-Regular.woff2 -------------------------------------------------------------------------------- /assets/font/SFProDisplay-Semibold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/c64635a3882911251fbfca67c314a935804ccbe2/assets/font/SFProDisplay-Semibold.eot -------------------------------------------------------------------------------- /assets/font/SFProDisplay-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/c64635a3882911251fbfca67c314a935804ccbe2/assets/font/SFProDisplay-Semibold.ttf -------------------------------------------------------------------------------- /assets/font/SFProDisplay-Semibold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/c64635a3882911251fbfca67c314a935804ccbe2/assets/font/SFProDisplay-Semibold.woff -------------------------------------------------------------------------------- /assets/font/SFProDisplay-Semibold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/c64635a3882911251fbfca67c314a935804ccbe2/assets/font/SFProDisplay-Semibold.woff2 -------------------------------------------------------------------------------- /assets/icon/download_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /assets/icon/fetching-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /assets/icon/forward-30s.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/icon/loading-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /assets/icon/replay-10s.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/icon/update_icon.svg: -------------------------------------------------------------------------------- 1 | 2 | crunchyroll 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icon/webvideocaster_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Dev4Mod/crp-iframe-player/c64635a3882911251fbfca67c314a935804ccbe2/assets/icon/webvideocaster_icon.png -------------------------------------------------------------------------------- /assets/js/jwplayer.js: -------------------------------------------------------------------------------- 1 | window.jwplayer=function(t){function e(e){for(var n,i,o=e[0],u=e[1],a=0,s=[];a2;if(null==t&&(t=[]),p&&t.reduce===p)return r&&(e=$(e,r)),i?t.reduce(e,n):t.reduce(e);if(k(t,function(t,o,u){i?n=e.call(r,n,t,o,u):(n=t,i=!0)}),!i)throw new TypeError("Reduce of empty array with no initial value");return n},T=S,E=S,A=function(t,e,n){var r;return N(t,function(t,i,o){if(e.call(n,t,i,o))return r=t,!0}),r},_=A,F=function(t,e,n){var r=[];return null==t?r:v&&t.filter===v?t.filter(e,n):(k(t,function(t,i,o){e.call(n,t,i,o)&&r.push(t)}),r)},I=F,M=function(t,e,n){e||(e=Ct);var r=!0;return null==t?r:g&&t.every===g?t.every(e,n):(k(t,function(t,o,u){if(!(r=r&&e.call(n,t,o,u)))return i}),!!r)},L=M,N=function(t,e,n){e||(e=Ct);var r=!1;return null==t?r:m&&t.some===m?t.some(e,n):(k(t,function(t,o,u){if(r||(r=e.call(n,t,o,u)))return i}),!!r)},R=N,D=function(t){return null==t?0:t.length===+t.length?t.length:ot(t).length},B=function(t,e){var n;return function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=null),n}},z=function(t){return null==t?Ct:gt(t)?t:Pt(t)},q=function(t){return function(e,n,r){var i={};return n=z(n),k(e,function(o,u){var a=n.call(r,o,u,e);t(i,a,o)}),i}},V=q(function(t,e,n){kt(t,e)?t[e].push(n):t[e]=[n]}),H=q(function(t,e,n){t[e]=n}),Q=function(t,e,n,r){for(var i=(n=z(n)).call(r,e),o=0,u=t.length;o>>1;n.call(r,t[a])=0)},U=W,X=function(t,e){return F(t,St(e))},Y=function(t,e){return A(t,St(e))},J=function(t){var e=s.apply(o,c.call(arguments,1));return F(t,function(t){return!W(e,t)})},K=function(t,e,n){if(null==t)return-1;var r=0,i=t.length;if(n){if("number"!=typeof n)return t[r=Q(t,e)]===e?r:-1;r=n<0?Math.max(0,i+n):n}if(b&&t.indexOf===b)return t.indexOf(e,n);for(;ri&&(r=t,i=a)}),r},memoize:et,now:Tt,omit:function(t){var e={},n=s.apply(o,c.call(arguments,1));for(var r in t)W(n,r)||(e[r]=t[r]);return e},once:tt,partial:G,pick:lt,pluck:function(t,e){return x(t,Pt(e))},property:Pt,propertyOf:function(t){return null==t?function(){}:function(e){return t[e]}},reduce:S,reject:function(t,e,n){return F(t,function(t,r,i){return!e.call(n,t,r,i)},n)},result:function(t,e){if(null!=t){var n=t[e];return gt(n)?n.call(t):n}},select:I,size:D,some:R,sortedIndex:Q,throttle:it,where:X,without:function(t){return J(t,c.call(arguments,1))}}},function(t,e,n){"use strict";n.d(e,"y",function(){return i}),n.d(e,"x",function(){return o}),n.d(e,"w",function(){return u}),n.d(e,"t",function(){return a}),n.d(e,"u",function(){return c}),n.d(e,"a",function(){return s}),n.d(e,"c",function(){return l}),n.d(e,"v",function(){return f}),n.d(e,"d",function(){return d}),n.d(e,"h",function(){return p}),n.d(e,"e",function(){return h}),n.d(e,"k",function(){return v}),n.d(e,"i",function(){return g}),n.d(e,"j",function(){return m}),n.d(e,"b",function(){return b}),n.d(e,"f",function(){return y}),n.d(e,"g",function(){return j}),n.d(e,"o",function(){return w}),n.d(e,"l",function(){return O}),n.d(e,"m",function(){return k}),n.d(e,"n",function(){return C}),n.d(e,"p",function(){return x}),n.d(e,"q",function(){return P}),n.d(e,"r",function(){return S}),n.d(e,"s",function(){return T}),n.d(e,"A",function(){return E}),n.d(e,"z",function(){return A}),n.d(e,"B",function(){return _});var r=n(0),i=1e5,o=100001,u=100002,a=101e3,c=102e3,s=200001,l=202e3,f=104e3,d=203e3,p=203640,h=204e3,v=210001,g=21e4,m=214e3,b=306e3,y=308e3,j=308640,w="cantPlayVideo",O="badConnection",k="cantLoadPlayer",C="cantPlayInBrowser",x="liveStreamDown",P="protectedContent",S="technicalError",T=function(){function t(t,e,n){this.code=Object(r.z)(e)?e:0,this.sourceError=n||null,t&&(this.key=t)}return t.logMessage=function(t){var e=t%1e3,n=Math.floor((t-e)/1e3),r=t.toString();return e>=400&&e<600&&(r=n+"400-"+n+"599"),"JW Player "+(t>299999&&t<4e5?"Warning":"Error")+" "+t+". For more information see https://developer.jwplayer.com/jw-player/docs/developer-guide/api/errors-reference#"+r},t}();function E(t,e,n){return n instanceof T&&n.code?n:new T(t,e,n)}function A(t,e){var n=E(S,e,t);return n.code=(t&&t instanceof T&&t.code||0)+e,n}function _(t){var e=t.name,n=t.message;switch(e){case"AbortError":return/pause/.test(n)?303213:/load/.test(n)?303212:303210;case"NotAllowedError":return 303220;case"NotSupportedError":return 303230;default:return 303200}}},function(t,e,n){"use strict";n.d(e,"i",function(){return o}),n.d(e,"e",function(){return u}),n.d(e,"j",function(){return a}),n.d(e,"a",function(){return c}),n.d(e,"b",function(){return s}),n.d(e,"g",function(){return l}),n.d(e,"d",function(){return f}),n.d(e,"f",function(){return d}),n.d(e,"h",function(){return p}),n.d(e,"c",function(){return h});var r=n(0),i=window.parseFloat;function o(t){return t.replace(/^\s+|\s+$/g,"")}function u(t,e,n){for(t=""+t,n=n||"0";t.length-1?t.substr(t.lastIndexOf(".")+1,t.length).toLowerCase():""}function s(t){var e=(t/60|0)%60,n=t%60;return u((t/3600|0).toString(),2)+":"+u(e.toString(),2)+":"+u(n.toFixed(3),6)}function l(t,e){if(!t)return 0;if(Object(r.z)(t))return t;var n=t.replace(",","."),o=n.slice(-1),u=n.split(":"),a=u.length,c=0;if("s"===o)c=i(n);else if("m"===o)c=60*i(n);else if("h"===o)c=3600*i(n);else if(a>1){var s=a-1;4===a&&(e&&(c=i(u[s])/e),s-=1),c+=i(u[s]),c+=60*i(u[s-1]),a>=3&&(c+=3600*i(u[s-2]))}else c=i(n);return Object(r.z)(c)?c:0}function f(t,e,n){if(Object(r.x)(t)&&"%"===t.slice(-1)){var o=i(t);return e&&Object(r.z)(e)&&Object(r.z)(o)?e*o/100:null}return l(t,n)}function d(t,e){return t.map(function(t){return e+t})}function p(t,e){return t.map(function(t){return t+e})}function h(t){return!!t&&Object(r.x)(t)&&"%"===t.slice(-1)}},function(t,e,n){"use strict";n.d(e,"kb",function(){return r}),n.d(e,"nb",function(){return i}),n.d(e,"lb",function(){return o}),n.d(e,"pb",function(){return u}),n.d(e,"qb",function(){return a}),n.d(e,"mb",function(){return c}),n.d(e,"ob",function(){return s}),n.d(e,"rb",function(){return l}),n.d(e,"s",function(){return f}),n.d(e,"u",function(){return d}),n.d(e,"t",function(){return p}),n.d(e,"n",function(){return h}),n.d(e,"q",function(){return v}),n.d(e,"sb",function(){return g}),n.d(e,"r",function(){return m}),n.d(e,"Z",function(){return b}),n.d(e,"W",function(){return y}),n.d(e,"v",function(){return j}),n.d(e,"Y",function(){return w}),n.d(e,"w",function(){return O}),n.d(e,"ub",function(){return k}),n.d(e,"a",function(){return C}),n.d(e,"b",function(){return x}),n.d(e,"c",function(){return P}),n.d(e,"d",function(){return S}),n.d(e,"e",function(){return T}),n.d(e,"h",function(){return E}),n.d(e,"F",function(){return A}),n.d(e,"hb",function(){return _}),n.d(e,"Q",function(){return F}),n.d(e,"C",function(){return I}),n.d(e,"B",function(){return M}),n.d(e,"E",function(){return L}),n.d(e,"p",function(){return N}),n.d(e,"cb",function(){return R}),n.d(e,"m",function(){return D}),n.d(e,"G",function(){return B}),n.d(e,"H",function(){return z}),n.d(e,"N",function(){return q}),n.d(e,"O",function(){return V}),n.d(e,"R",function(){return H}),n.d(e,"jb",function(){return Q}),n.d(e,"bb",function(){return W}),n.d(e,"D",function(){return U}),n.d(e,"S",function(){return X}),n.d(e,"P",function(){return Y}),n.d(e,"T",function(){return J}),n.d(e,"V",function(){return K}),n.d(e,"M",function(){return Z}),n.d(e,"L",function(){return $}),n.d(e,"K",function(){return G}),n.d(e,"I",function(){return tt}),n.d(e,"J",function(){return et}),n.d(e,"U",function(){return nt}),n.d(e,"o",function(){return rt}),n.d(e,"y",function(){return it}),n.d(e,"ib",function(){return ot}),n.d(e,"db",function(){return ut}),n.d(e,"eb",function(){return at}),n.d(e,"f",function(){return ct}),n.d(e,"g",function(){return st}),n.d(e,"ab",function(){return lt}),n.d(e,"A",function(){return ft}),n.d(e,"l",function(){return dt}),n.d(e,"k",function(){return pt}),n.d(e,"fb",function(){return ht}),n.d(e,"gb",function(){return vt}),n.d(e,"tb",function(){return gt}),n.d(e,"z",function(){return mt}),n.d(e,"j",function(){return bt}),n.d(e,"X",function(){return yt}),n.d(e,"i",function(){return jt}),n.d(e,"x",function(){return wt});var r="buffering",i="idle",o="complete",u="paused",a="playing",c="error",s="loading",l="stalled",f="drag",d="dragStart",p="dragEnd",h="click",v="doubleClick",g="tap",m="doubleTap",b="over",y="move",j="enter",w="out",O=c,k="warning",C="adClick",x="adPause",P="adPlay",S="adSkipped",T="adTime",E="autostartNotAllowed",A=o,_="ready",F="seek",I="beforePlay",M="beforeComplete",L="bufferFull",N="displayClick",R="playlistComplete",D="cast",B="mediaError",z="firstFrame",q="playAttempt",V="playAttemptFailed",H="seeked",Q="setupError",W="state",U="bufferChange",X="time",Y="ratechange",J="mediaType",K="volume",Z="mute",$="metadataCueParsed",G="meta",tt="levels",et="levelsChanged",nt="visualQuality",rt="controls",it="fullscreen",ot="resize",ut="playlistItem",at="playlist",ct="audioTracks",st="audioTrackChanged",lt="playbackRateChanged",ft="logoClick",dt="captionsList",pt="captionsChanged",ht="providerChanged",vt="providerFirstFrame",gt="userAction",mt="instreamClick",bt="breakpoint",yt="fullscreenchange",jt="bandwidthEstimate",wt="float"},function(t,e,n){"use strict";n.d(e,"b",function(){return i}),n.d(e,"d",function(){return o}),n.d(e,"a",function(){return u}),n.d(e,"c",function(){return a});var r=n(2);function i(t){var e="";return t&&(t.localName?e=t.localName:t.baseName&&(e=t.baseName)),e}function o(t){var e="";return t&&(t.textContent?e=Object(r.i)(t.textContent):t.text&&(e=Object(r.i)(t.text))),e}function u(t,e){return t.childNodes[e]}function a(t){return t.childNodes?t.childNodes.length:0}},function(t,e,n){"use strict";n.r(e);var r=n(7);function i(t,e){var n;return t&&t.length>e&&(n=t[e]),n}var o=n(0);n.d(e,"Browser",function(){return c}),n.d(e,"OS",function(){return s}),n.d(e,"Features",function(){return l});var u=navigator.userAgent,a=function(){},c={},s={},l={};Object.defineProperties(c,{androidNative:{get:Object(o.C)(r.c),enumerable:!0},chrome:{get:Object(o.C)(r.d),enumerable:!0},edge:{get:Object(o.C)(r.e),enumerable:!0},facebook:{get:Object(o.C)(r.g),enumerable:!0},firefox:{get:Object(o.C)(r.f),enumerable:!0},ie:{get:Object(o.C)(r.i),enumerable:!0},msie:{get:Object(o.C)(r.n),enumerable:!0},safari:{get:Object(o.C)(r.q),enumerable:!0},version:{get:Object(o.C)(function(t,e){var n,r,i,o;return t.chrome?n=-1!==e.indexOf("Chrome")?e.substring(e.indexOf("Chrome")+7):e.substring(e.indexOf("CriOS")+6):t.safari?n=e.substring(e.indexOf("Version")+8):t.firefox?n=e.substring(e.indexOf("Firefox")+8):t.edge?n=e.substring(e.indexOf("Edge")+5):t.ie&&(-1!==e.indexOf("rv:")?n=e.substring(e.indexOf("rv:")+3):-1!==e.indexOf("MSIE")&&(n=e.substring(e.indexOf("MSIE")+5))),n&&(-1!==(o=n.indexOf(";"))&&(n=n.substring(0,o)),-1!==(o=n.indexOf(" "))&&(n=n.substring(0,o)),-1!==(o=n.indexOf(")"))&&(n=n.substring(0,o)),r=parseInt(n,10),i=parseInt(n.split(".")[1],10)),{version:n,major:r,minor:i}}.bind(void 0,c,u)),enumerable:!0}}),Object.defineProperties(s,{android:{get:Object(o.C)(r.b),enumerable:!0},iOS:{get:Object(o.C)(r.j),enumerable:!0},mobile:{get:Object(o.C)(r.o),enumerable:!0},mac:{get:Object(o.C)(r.p),enumerable:!0},iPad:{get:Object(o.C)(r.k),enumerable:!0},iPhone:{get:Object(o.C)(r.l),enumerable:!0},windows:{get:Object(o.C)(function(){return u.indexOf("Windows")>-1}),enumerable:!0},tizen:{get:Object(o.C)(r.r),enumerable:!0},version:{get:Object(o.C)(function(t,e){var n,r,o;if(t.windows)switch(n=i(/Windows(?: NT|)? ([._\d]+)/.exec(e),1)){case"6.1":n="7.0";break;case"6.2":n="8.0";break;case"6.3":n="8.1"}else t.android?n=i(/Android ([._\d]+)/.exec(e),1):t.iOS?n=i(/OS ([._\d]+)/.exec(e),1):t.mac?n=i(/Mac OS X (10[._\d]+)/.exec(e),1):t.tizen&&(n=i(/Tizen ([._\d]+)/.exec(e),1));if(n){r=parseInt(n,10);var u=n.split(/[._]/);u&&(o=parseInt(u[1],10))}return{version:n,major:r,minor:o}}.bind(void 0,s,u)),enumerable:!0}}),Object.defineProperties(l,{flash:{get:Object(o.C)(r.h),enumerable:!0},flashVersion:{get:Object(o.C)(r.a),enumerable:!0},iframe:{get:Object(o.C)(r.m),enumerable:!0},passiveEvents:{get:Object(o.C)(function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){return t=!0}});window.addEventListener("testPassive",a,e),window.removeEventListener("testPassive",a,e)}catch(t){}return t}),enumerable:!0},backgroundLoading:{get:Object(o.C)(function(){return!(s.iOS||c.safari||s.tizen)}),enumerable:!0}})},function(t,e,n){"use strict";n.d(e,"i",function(){return s}),n.d(e,"e",function(){return l}),n.d(e,"q",function(){return f}),n.d(e,"j",function(){return d}),n.d(e,"s",function(){return p}),n.d(e,"r",function(){return h}),n.d(e,"u",function(){return v}),n.d(e,"d",function(){return b}),n.d(e,"a",function(){return y}),n.d(e,"o",function(){return j}),n.d(e,"p",function(){return w}),n.d(e,"v",function(){return O}),n.d(e,"t",function(){return k}),n.d(e,"h",function(){return C}),n.d(e,"b",function(){return x}),n.d(e,"g",function(){return P}),n.d(e,"c",function(){return S}),n.d(e,"m",function(){return T}),n.d(e,"k",function(){return E}),n.d(e,"n",function(){return A}),n.d(e,"l",function(){return _}),n.d(e,"f",function(){return F});var r,i=n(0),o=n(2),u=n(5),a=window.DOMParser,c=!0;function s(t,e){return t.classList.contains(e)}function l(t){return d(t).firstChild}function f(t,e){C(t),function(t,e){if(e){for(var n=document.createDocumentFragment(),r=d(e).childNodes,i=0;i-1?e.documentElement.innerHTML=t:e.body.innerHTML=t,e.body}(t);p(e);for(var n=e.querySelectorAll("*"),i=n.length;i--;)h(n[i]);return e}function p(t){for(var e=t.querySelectorAll("script,object,iframe"),n=e.length;n--;){var r=e[n];r.parentNode.removeChild(r)}return t}function h(t){for(var e=t.attributes,n=e.length;n--;){var r=e[n].name;if(/^on/.test(r)&&t.removeAttribute(r),/href/.test(r)){var i=e[n].value;/javascript:|javascript:/.test(i)&&t.removeAttribute(r)}}return t}function v(t){return t+(t.toString().indexOf("%")>0?"":"px")}function g(t){return Object(i.x)(t.className)?t.className.split(" "):[]}function m(t,e){e=Object(o.i)(e),t.className!==e&&(t.className=e)}function b(t){return t.classList?t.classList:g(t)}function y(t,e){var n=g(t);(Array.isArray(e)?e:e.split(" ")).forEach(function(t){Object(i.e)(n,t)||n.push(t)}),m(t,n.join(" "))}function j(t,e){var n=g(t),r=Array.isArray(e)?e:e.split(" ");m(t,Object(i.h)(n,r).join(" "))}function w(t,e,n){var r=t.className||"";e.test(r)?r=r.replace(e,n):n&&(r+=" "+n),m(t,r)}function O(t,e,n){var r=s(t,e);(n=Object(i.r)(n)?n:!r)!==r&&(n?y(t,e):j(t,e))}function k(t,e,n){t.setAttribute(e,n)}function C(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function x(t){var e=document.createElement("link");e.rel="stylesheet",e.href=t,document.getElementsByTagName("head")[0].appendChild(e)}function P(t){t&&C(t)}function S(t){var e={left:0,right:0,width:0,height:0,top:0,bottom:0};if(!t||!document.body.contains(t))return e;var n=t.getBoundingClientRect(),r=window.pageYOffset,i=window.pageXOffset;return n.width||n.height||n.left||n.top?(e.left=n.left+i,e.right=n.right+i,e.top=n.top+r,e.bottom=n.bottom+r,e.width=n.right-n.left,e.height=n.bottom-n.top,e):e}function T(t,e){t.insertBefore(e,t.firstChild)}function E(t){return t.nextElementSibling}function A(t){return t.previousElementSibling}function _(t,e,n){void 0===n&&(n={});var r=document.createElement("a");r.href=t,r.target=e,r=Object(i.j)(r,n),u.Browser.firefox?r.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0,view:window})):r.click()}function F(){var t=window.screen.orientation;return!!t&&("landscape-primary"===t.type||"landscape-secondary"===t.type)||90===window.orientation||-90===window.orientation}},function(t,e,n){"use strict";n.d(e,"h",function(){return u}),n.d(e,"f",function(){return c}),n.d(e,"l",function(){return l}),n.d(e,"k",function(){return f}),n.d(e,"p",function(){return d}),n.d(e,"g",function(){return p}),n.d(e,"e",function(){return h}),n.d(e,"n",function(){return v}),n.d(e,"r",function(){return g}),n.d(e,"d",function(){return m}),n.d(e,"i",function(){return b}),n.d(e,"q",function(){return y}),n.d(e,"j",function(){return j}),n.d(e,"c",function(){return w}),n.d(e,"b",function(){return O}),n.d(e,"o",function(){return k}),n.d(e,"m",function(){return C}),n.d(e,"a",function(){return x});var r=navigator.userAgent;function i(t){return null!==r.match(t)}function o(t){return function(){return i(t)}}function u(){var t=x();return!!(t&&t>=18)}var a=function(){return"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1},c=o(/gecko\//i),s=o(/trident\/.+rv:\s*11/i),l=o(/iP(hone|od)/i),f=function(){return i(/iPad/i)||a()},d=function(){return i(/Macintosh/i)&&!a()},p=o(/FBAV/i);function h(){return i(/\sEdge\/\d+/i)}function v(){return i(/msie/i)}function g(){return i(/SMART-TV/)}function m(){return i(/\s(?:(?:Headless)?Chrome|CriOS)\//i)&&!h()&&!i(/UCBrowser/i)&&!g()}function b(){return h()||s()||v()}function y(){return i(/safari/i)&&!i(/(?:Chrome|CriOS|chromium|android|phantom)/i)||g()}function j(){return i(/iP(hone|ad|od)/i)||a()}function w(){return!(i(/chrome\/[123456789]/i)&&!i(/chrome\/18/i)&&!c())&&O()}function O(){return i(/Android/i)&&!i(/Windows Phone/i)}function k(){return j()||O()||i(/Windows Phone/i)}function C(){try{return window.self!==window.top}catch(t){return!0}}function x(){if(O())return 0;var t,e=navigator.plugins;if(e&&(t=e.namedItem("Shockwave Flash"))&&t.description)return parseFloat(t.description.replace(/\D+(\d+\.?\d*).*/,"$1"));if(void 0!==window.ActiveXObject){try{if(t=new window.ActiveXObject("ShockwaveFlash.ShockwaveFlash"))return parseFloat(t.GetVariable("$version").split(" ")[1].replace(/\s*,\s*/,"."))}catch(t){return 0}return t}return 0}},function(t,e,n){"use strict";n.r(e),n.d(e,"exists",function(){return i}),n.d(e,"isHTTPS",function(){return o}),n.d(e,"isFileProtocol",function(){return u}),n.d(e,"isRtmp",function(){return a}),n.d(e,"isYouTube",function(){return c}),n.d(e,"typeOf",function(){return s}),n.d(e,"isDeepKeyCompliant",function(){return l});var r=window.location.protocol;function i(t){switch(typeof t){case"string":return t.length>0;case"object":return null!==t;case"undefined":return!1;default:return!0}}function o(){return"https:"===r}function u(){return"file:"===r}function a(t,e){return 0===t.indexOf("rtmp:")||"rtmp"===e}function c(t,e){return"youtube"===e||/^(http|\/\/).*(youtube\.com|youtu\.be)\/.+/.test(t)}function s(t){if(null===t)return"null";var e=typeof t;return"object"===e&&Array.isArray(t)?"array":e}function l(t,e,n){var r=Object.keys(t);return Object.keys(e).length>=r.length&&r.every(function(r){var i=t[r],o=e[r];return i&&"object"==typeof i?!(!o||"object"!=typeof o)&&l(i,o,n):n(r,t)})}},function(t,e,n){"use strict";n.d(e,"a",function(){return r}),n.d(e,"c",function(){return i}),n.d(e,"d",function(){return o}),n.d(e,"b",function(){return u}),n.d(e,"e",function(){return a}),n.d(e,"f",function(){return c});var r=function(){function t(){}var e=t.prototype;return e.on=function(t,e,n){if(!l(this,"on",t,[e,n])||!e)return this;var r=this._events||(this._events={});return(r[t]||(r[t]=[])).push({callback:e,context:n}),this},e.once=function(t,e,n){if(!l(this,"once",t,[e,n])||!e)return this;var r=0,i=this,o=function n(){r++||(i.off(t,n),e.apply(this,arguments))};return o._callback=e,this.on(t,o,n)},e.off=function(t,e,n){if(!this._events||!l(this,"off",t,[e,n]))return this;if(!t&&!e&&!n)return delete this._events,this;for(var r=t?[t]:Object.keys(this._events),i=0,o=r.length;i1?e-1:0),r=1;r1?e-1:0),r=1;r-1?t:parseInt(t.replace("px",""),10)}function l(t,e){if(Object(i.u)(t)&&(t=parseInt(t.toString())),Object(i.u)(t)||!isFinite(t)||t<=0&&!e)return"00:00";var n=t<0?"-":"";t=Math.abs(t);var r=Math.floor(t/3600),o=Math.floor((t-3600*r)/60),u=Math.floor(t%60);return n+(r?r+":":"")+(o<10?"0":"")+o+":"+(u<10?"0":"")+u}},function(t,e,n){"use strict";n.d(e,"a",function(){return a});var r=n(33),i=n(17),o=n(60),u=n(0);function a(t){var e=t.getName().name;if(!r.a[e]){if(!Object(u.l)(i.a,Object(u.B)({name:e}))){if(!Object(u.t)(t.supports))throw new Error("Tried to register a provider with an invalid object");i.a.unshift({name:e,supports:t.supports})}Object(u.g)(t.prototype,o.a),r.a[e]=t}}},function(t,e,n){"use strict";n.d(e,"j",function(){return p}),n.d(e,"d",function(){return h}),n.d(e,"b",function(){return v}),n.d(e,"e",function(){return m}),n.d(e,"g",function(){return y}),n.d(e,"h",function(){return j}),n.d(e,"c",function(){return w}),n.d(e,"f",function(){return k}),n.d(e,"i",function(){return C}),n.d(e,"a",function(){return x});var r=n(0),i=n(7),o=n(29),u=n(8),a=n(42),c={},s={zh:"Chinese",nl:"Dutch",en:"English",fr:"French",de:"German",it:"Italian",ja:"Japanese",pt:"Portuguese",ru:"Russian",es:"Spanish",el:"Greek",fi:"Finnish",id:"Indonesian",ko:"Korean",th:"Thai",vi:"Vietnamese"},l=Object(r.q)(s);function f(t){var e=d(t),n=e.indexOf("_");return-1===n?e:e.substring(0,n)}function d(t){return t.toLowerCase().replace("-","_")}function p(t){return t?Object.keys(t).reduce(function(e,n){return e[d(n)]=t[n],e},{}):{}}function h(t){if(t)return 3===t.length?t:s[f(t)]||t}function v(t){return l[t]||""}function g(t){var e=t.querySelector("html");return e?e.getAttribute("lang"):null}function m(){var t=g(document);if(!t&&Object(i.m)())try{t=g(window.top.document)}catch(t){}return t||navigator.language||"en"}var b=["ar","da","de","el","es","fi","fr","he","id","it","ja","ko","nl","no","oc","pt","ro","ru","sl","sv","th","tr","vi","zh"];function y(t){return 8207===t.charCodeAt(0)||/^[\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC]/.test(t)}function j(t){return b.indexOf(f(t))>=0}function w(t,e,n){return Object(r.j)({},function(t){var e=t.advertising,n=t.related,i=t.sharing,o=t.abouttext,u=Object(r.j)({},t.localization);e&&(u.advertising=u.advertising||{},O(u.advertising,e,"admessage"),O(u.advertising,e,"cuetext"),O(u.advertising,e,"loadingAd"),O(u.advertising,e,"podmessage"),O(u.advertising,e,"skipmessage"),O(u.advertising,e,"skiptext")),"string"==typeof u.related?u.related={heading:u.related}:u.related=u.related||{},n&&O(u.related,n,"autoplaymessage"),i&&(u.sharing=u.sharing||{},O(u.sharing,i,"heading"),O(u.sharing,i,"copied")),o&&O(u,t,"abouttext");var a=u.close||u.nextUpClose;return a&&(u.close=a),u}(t),e[f(n)],e[d(n)])}function O(t,e,n){var r=t[n]||e[n];r&&(t[n]=r)}function k(t){return Object(u.isDeepKeyCompliant)(a.a,t,function(t,e){return"string"==typeof e[t]})}function C(t,e){var n=c[e];if(!n){var r=t+"translations/"+f(e)+".json";c[e]=n=new Promise(function(t,n){Object(o.b)({url:r,oncomplete:t,onerror:function(t,r,i,o){c[e]=null,n(o)},responseType:"json"})})}return n}function x(t,e){var n=Object(r.j)({},t,e);return P(n,"errors",t,e),P(n,"related",t,e),P(n,"sharing",t,e),P(n,"advertising",t,e),P(n,"shortcuts",t,e),P(n,"captionsStyles",t,e),n}function P(t,e,n,i){t[e]=Object(r.j)({},n[e],i[e])}},function(t,e,n){"use strict";e.a=[]},function(t,e,n){"use strict";e.a={debug:!1}},function(t,e,n){"use strict";var r=n(28),i=n(5),o=n(23),u=n(0),a=n(8),c=n(36),s=Object(u.l)(r.a,Object(u.B)({name:"html5"})),l=s.supports;function f(t){var e=window.MediaSource;return Object(u.a)(t,function(t){return!!e&&!!e.isTypeSupported&&e.isTypeSupported(t)})}function d(t){if(t.drm)return!1;var e=t.file.indexOf(".m3u8")>-1,n="hls"===t.type||"m3u8"===t.type;if(!e&&!n)return!1;var r=i.Browser.chrome||i.Browser.firefox||i.Browser.edge||i.Browser.ie&&11===i.Browser.version.major,o=i.OS.android&&!1===t.hlsjsdefault,u=i.Browser.safari&&!!t.safarihlsjs;return f(t.mediaTypes||['video/mp4;codecs="avc1.4d400d,mp4a.40.2"'])&&(r||u)&&!o}s.supports=function(t,e){var n=l.apply(this,arguments);if(n&&t.drm&&"hls"===t.type){var r=Object(o.a)(e)("drm");if(r&&t.drm.fairplay){var i=window.WebKitMediaKeys;return i&&i.isTypeSupported&&i.isTypeSupported("com.apple.fps.1_0","video/mp4")}return r}return n},r.a.push({name:"shaka",supports:function(t){return!(t.drm&&!Object(c.a)(t.drm))&&!(!window.HTMLVideoElement||!window.MediaSource)&&f(t.mediaTypes)&&("dash"===t.type||"mpd"===t.type||(t.file||"").indexOf("mpd-time-csf")>-1)}}),r.a.unshift({name:"hlsjs",supports:function(t){return d(t)}}),r.a.unshift({name:"hlsjsProgressive",supports:function(t){return t._hlsjsProgressive&&d(t)}}),r.a.push({name:"flash",supports:function(t){if(!i.Features.flash||t.drm)return!1;var e=t.type;return"hls"===e||"m3u8"===e||!Object(a.isRtmp)(t.file,e)&&["flv","f4v","mov","m4a","m4v","mp4","aac","f4a","mp3","mpeg","smil"].indexOf(e)>-1}}),e.a=r.a},function(t,e,n){"use strict";n.d(e,"a",function(){return r});var r=Date.now||function(){return(new Date).getTime()}},function(t,e,n){"use strict";n.r(e),n.d(e,"getScriptPath",function(){return o}),n.d(e,"repo",function(){return u}),n.d(e,"versionCheck",function(){return a}),n.d(e,"loadFrom",function(){return c});var r=n(31),i=n(8),o=function(t){for(var e=document.getElementsByTagName("script"),n=0;n=0)return r.substr(0,i+1)}}return""},u=function(){return(Object(i.isFileProtocol)()?"https:":"")+"//ssl.p.jwpcdn.com/player/v/8.15.1/"},a=function(t){var e=("0"+t).split(/\W/),n=r.a.split(/\W/),i=parseFloat(e[0]),o=parseFloat(n[0]);return!(i>o||i===o&&parseFloat("0"+e[1])>parseFloat(n[1]))},c=function(){return u()}},function(t,e,n){"use strict";n.d(e,"a",function(){return i}),n.d(e,"c",function(){return o}),n.d(e,"b",function(){return u});var r=n(39),i=r.a,o=r.c;function u(t){var e=Object(r.b)(t);if(!t)return e;switch(Object(r.c)(t)){case"jwpsrv":e=305001;break;case"googima":e=305002;break;case"vast":e=305003;break;case"freewheel":e=305004;break;case"dai":e=305005;break;case"gapro":e=305006;break;case"bidding":e=305007}return e}},,,function(t,e,n){"use strict";function r(t){var e={setup:["free","starter","business","premium","enterprise","developer","ads","unlimited","trial","platinum"],drm:["enterprise","developer","ads","unlimited","trial"],ads:["ads","unlimited","trial","platinum","enterprise","developer","business"],jwpsrv:["free","starter","business","premium","enterprise","developer","ads","trial","platinum","invalid"],discovery:["ads","enterprise","developer","trial","unlimited"]};return function(n){return e[n]&&e[n].indexOf(t)>-1}}n.d(e,"a",function(){return r})},function(t,e,n){"use strict";var r=n(0),i={none:!0,metadata:!0,auto:!0};function o(t,e){return i[t]?t:i[e]?e:"metadata"}var u=n(30),a=n(34),c=n(44),s=n(1);function l(t,e,n){var i=Object(r.j)({},n);return delete i.playlist,t.map(function(t){return d(e,t,i)}).filter(function(t){return!!t})}function f(t){if(!Array.isArray(t)||0===t.length)throw new s.s(s.o,630)}function d(t,e,n){var i=t.getProviders(),u=t.get("preload"),a=Object(r.j)({},e);if(a.preload=o(e.preload,u),a.allSources=v(e,t),a.sources=g(a.allSources,i),a.sources.length)return a.file=a.sources[0].file,a.feedData=n,function(t){var e=t.sources[0].liveSyncDuration;return t.dvrSeekLimit=t.liveSyncDuration=e,t}(a)}function p(t,e){var n=(parseInt(t,10)||0)%e;return n<0&&(n+=e),n}n.d(e,"b",function(){return l}),n.d(e,"e",function(){return f}),n.d(e,"d",function(){return d}),n.d(e,"f",function(){return p}),n.d(e,"c",function(){return h});var h=function(t,e){return g(v(t,e),e.getProviders())};function v(t,e){var n=e.attributes,r=t.sources,i=t.allSources,u=t.preload,c=t.drm,s=m(t.withCredentials,n.withCredentials);return(i||r).map(function(e){if(e!==Object(e))return null;b(e,n,"androidhls"),b(e,n,"hlsjsdefault"),b(e,n,"safarihlsjs"),function(t,e,n){t.liveSyncDuration||b(t,e.liveSyncDuration?e:n,"liveSyncDuration")}(e,t,n),b(e,n,"_hlsjsProgressive"),e.preload=o(e.preload,u);var r=e.drm||c||n.drm;r&&(e.drm=r);var i=m(e.withCredentials,s);return void 0!==i&&(e.withCredentials=i),Object(a.a)(e)}).filter(function(t){return!!t})}function g(t,e){e&&e.choose||(e=new c.a);var n=function(t,e){for(var n=0;n2){n=a[1];var c=parseInt(a[2]);c>0&&(u=new Date).setTime(c)}}catch(t){e="invalid"}this.edition=function(){return e},this.token=function(){return n},this.expiration=function(){return u},this.duration=function(){return u?u.getTime()-(new Date).getTime():0},this.error=function(){}}},function(t,e,n){"use strict";n.d(e,"b",function(){return c});var r=n(68),i=n(8),o=n(41),u={aac:"audio/mp4",mp4:"video/mp4",f4v:"video/mp4",m4v:"video/mp4",mov:"video/mp4",mp3:"audio/mpeg",mpeg:"audio/mpeg",ogv:"video/ogg",ogg:"video/ogg",oga:"video/ogg",vorbis:"video/ogg",webm:"video/webm",f4a:"video/aac",m3u8:"application/vnd.apple.mpegurl",m3u:"application/vnd.apple.mpegurl",hls:"application/vnd.apple.mpegurl"},a=[{name:"html5",supports:c}];function c(t){if(!1===Object(r.a)(t))return!1;if(!o.a.canPlayType)return!1;var e=t.file,n=t.type;if(Object(i.isRtmp)(e,n))return!1;var a=t.mimeType||u[n];if(!a)return!1;var c=t.mediaTypes;return c&&c.length&&(a=[a].concat(c.slice()).join("; ")),!!o.a.canPlayType(a)}e.a=a},function(t,e,n){"use strict";n.d(e,"b",function(){return c}),n.d(e,"a",function(){return s});var r=n(0),i=n(12),o=n(8),u=n(1),a=function(){};function c(t,e,n,d){var p;t===Object(t)&&(t=(d=t).url);var h=Object(r.j)({xhr:null,url:t,withCredentials:!1,retryWithoutCredentials:!1,timeout:6e4,timeoutId:-1,oncomplete:e||a,onerror:n||a,mimeType:d&&!d.responseType?"text/xml":"",requireValidXML:!1,responseType:d&&d.plainText?"text":"",useDomParser:!1,requestFilter:null},d),v=function(t,e){return function(t,n){var i=t.currentTarget||e.xhr;if(clearTimeout(e.timeoutId),e.retryWithoutCredentials&&e.xhr.withCredentials)return s(i),void c(Object(r.j)({},e,{xhr:null,withCredentials:!1,retryWithoutCredentials:!1}));!n&&i.status>=400&&i.status<600&&(n=i.status),l(e,n?u.o:u.r,n||6,t)}}(0,h);if("XMLHttpRequest"in window){if(p=h.xhr=h.xhr||new window.XMLHttpRequest,"function"==typeof h.requestFilter){var g;try{g=h.requestFilter({url:t,xhr:p})}catch(t){return v(t,5),p}g&&"open"in g&&"send"in g&&(p=h.xhr=g)}p.onreadystatechange=function(t){return function(e){var n=e.currentTarget||t.xhr;if(4===n.readyState){clearTimeout(t.timeoutId);var a=n.status;if(a>=400)return void l(t,u.o,a<600?a:6);if(200===a)return function(t){return function(e){var n=e.currentTarget||t.xhr;if(clearTimeout(t.timeoutId),t.responseType){if("json"===t.responseType)return function(t,e){if(!t.response||"string"==typeof t.response&&'"'!==t.responseText.substr(1))try{t=Object(r.j)({},t,{response:JSON.parse(t.responseText)})}catch(t){return void l(e,u.o,611,t)}return e.oncomplete(t)}(n,t)}else{var o,a=n.responseXML;if(a)try{o=a.firstChild}catch(t){}if(a&&o)return f(n,a,t);if(t.useDomParser&&n.responseText&&!a&&(a=Object(i.parseXML)(n.responseText))&&a.firstChild)return f(n,a,t);if(t.requireValidXML)return void l(t,u.o,602)}t.oncomplete(n)}}(t)(e);0===a&&Object(o.isFileProtocol)()&&!/^[a-z][a-z0-9+.-]*:/.test(t.url)&&l(t,u.o,7)}}}(h),p.onerror=v,"overrideMimeType"in p?h.mimeType&&p.overrideMimeType(h.mimeType):h.useDomParser=!0;try{t=t.replace(/#.*$/,""),p.open("GET",t,!0)}catch(t){return v(t,3),p}if(h.responseType)try{p.responseType=h.responseType}catch(t){}h.timeout&&(h.timeoutId=setTimeout(function(){s(p),l(h,u.r,1)},h.timeout),p.onabort=function(){clearTimeout(h.timeoutId)});try{h.withCredentials&&"withCredentials"in p&&(p.withCredentials=!0),p.send()}catch(t){v(t,4)}return p}l(h,u.r,2)}function s(t){t.onload=null,t.onprogress=null,t.onreadystatechange=null,t.onerror=null,"abort"in t&&t.abort()}function l(t,e,n,r){t.onerror(e,t.url,t.xhr,new u.s(e,n,r))}function f(t,e,n){var i=e.documentElement;if(!n.requireValidXML||"parsererror"!==i.nodeName&&!i.getElementsByTagName("parsererror").length)return t.responseXML||(t=Object(r.j)({},t,{responseXML:e})),n.oncomplete(t);l(n,u.o,601)}},function(t,e,n){"use strict";var r=n(0),i=n(34),o=["captions","metadata","thumbnails","chapters"],u=function(t){if(t&&t.file){var e,n=Object(r.j)({},{kind:"captions",default:!1},t);return n.kind=(e=n.kind,-1!==o.indexOf(e)?n.kind:"captions"),n.default=!!n.default,n}},a=Array.isArray;e.a=function(t){a((t=t||{}).tracks)||delete t.tracks;var e=Object(r.j)({},{sources:[],tracks:[],minDvrWindow:120,dvrSeekLimit:25},t);e.sources!==Object(e.sources)||a(e.sources)||(e.sources=[Object(i.a)(e.sources)]),a(e.sources)&&0!==e.sources.length||(t.levels?e.sources=t.levels:e.sources=[Object(i.a)(t)]);for(var n=0;n36&&(x(t,u.u,e),t.dragged=!0,x(t,u.s,e))}n||"touchmove"!==e.type||S(e)},h=function(n){if(clearTimeout(r),t.el)if(k(t),O(t,"window"),t.dragged)t.dragged=!1,x(t,u.t,n);else if(-1===n.type.indexOf("cancel")&&e.contains(n.target)){if(Object(c.a)()-t.lastStart>500)return;var i="pointerup"===n.type||"pointercancel"===n.type,o="mouseup"===n.type||i&&"mouse"===n.pointerType;!function(t,e,n){if(t.enableDoubleTap)if(Object(c.a)()-t.lastClick<300){x(t,n?u.q:u.r,e),t.lastClick=0}else t.lastClick=Object(c.a)()}(t,n,o),o?x(t,u.n,n):(x(t,u.sb,n),"touchend"!==n.type||p||S(n))}};f?w(t,"init","pointerdown",a,o):(d&&w(t,"init","mousedown",a,o),w(t,"init","touchstart",a,o)),i||(i=new v(document).on("interaction")),w(t,"init","blur",function(){Object(s.o)(e,"jw-tab-focus")}),w(t,"init","focus",function(){i.event&&"keydown"===i.event.type&&Object(s.a)(e,"jw-tab-focus")})}}var y={drag:function(t){b(t)},dragStart:function(t){b(t)},dragEnd:function(t){b(t)},click:function(t){b(t)},tap:function(t){if(o.OS.iOS&&o.OS.version.major<11){var e=document.body;e&&(e.ontouchstart=e.ontouchstart||function(){})}b(t)},doubleTap:function(t){t.enableDoubleTap=!0,b(t)},doubleClick:function(t){t.enableDoubleTap=!0,b(t)},longPress:function(t){if(o.OS.iOS){var e=function(){clearTimeout(r)};w(t,"longPress","touchstart",function(n){e(),r=setTimeout(function(){x(t,"longPress",n)},500)}),w(t,"longPress","touchmove",e),w(t,"longPress","touchcancel",e),w(t,"longPress","touchend",e)}else t.el.oncontextmenu=function(e){return x(t,"longPress",e),!1}},focus:function(t){w(t,"focus","focus",function(e){C(t,"focus",e)})},blur:function(t){w(t,"blur","blur",function(e){C(t,"blur",e)})},over:function(t){(f||d)&&w(t,u.Z,f?"pointerover":"mouseover",function(e){"touch"!==e.pointerType&&x(t,u.Z,e)})},out:function(t){if(f){var e=t.el;w(t,u.Y,"pointerout",function(n){if("touch"!==n.pointerType&&"x"in n){var r=document.elementFromPoint(n.x,n.y);e.contains(r)||x(t,u.Y,n)}})}else d&&w(t,u.Y,"mouseout",function(e){x(t,u.Y,e)})},move:function(t){(f||d)&&w(t,u.W,f?"pointermove":"mousemove",function(e){"touch"!==e.pointerType&&x(t,u.W,e)})},enter:function(t){w(t,u.v,"keydown",function(e){"Enter"!==e.key&&13!==e.keyCode||(e.stopPropagation(),C(t,u.v,e))})},keydown:function(t){w(t,"keydown","keydown",function(e){C(t,"keydown",e)},!1)},gesture:function(t){var e=function(e){return x(t,"gesture",e)};w(t,"gesture","click",e),w(t,"gesture","keydown",e)},interaction:function(t){var e=function(e){t.event=e};w(t,"interaction","mousedown",e,!0),w(t,"interaction","keydown",e,!0)}};function j(t){var e=t.ownerDocument||t;return e.defaultView||e.parentWindow||window}function w(t,e,n,r,i){void 0===i&&(i=h);var o=t.handlers[e],u=t.options[e];if(o||(o=t.handlers[e]={},u=t.options[e]={}),o[n])throw new Error(e+" "+n+" already registered");o[n]=r,u[n]=i;var a=t.el;("window"===e?j(a):a).addEventListener(n,r,i)}function O(t,e){var n=t.el,r=t.handlers,i=t.options,o="window"===e?j(n):n,u=r[e],a=i[e];u&&(Object.keys(u).forEach(function(t){var e=a[t];"boolean"==typeof e?o.removeEventListener(t,u[t],e):o.removeEventListener(t,u[t])}),r[e]=null,i[e]=null)}function k(t){var e=t.el;null!==t.pointerId&&(e.releasePointerCapture(t.pointerId),t.pointerId=null)}function C(t,e,n){var r=t.el,i=n.target;t.trigger(e,{type:e,sourceEvent:n,currentTarget:r,target:i})}function x(t,e,n){var r=function(t,e,n){var r,i=e.target,o=e.touches,u=e.changedTouches,a=e.pointerType;o||u?(r=o&&o.length?o[0]:u[0],a=a||"touch"):(r=e,a=a||"mouse");var c=r;return{type:t,pointerType:a,pageX:c.pageX,pageY:c.pageY,sourceEvent:e,currentTarget:n,target:i}}(e,n,t.el);t.trigger(e,r)}function P(t){return 0===t.type.indexOf("touch")?(t.originalEvent||t).changedTouches[0]:t}function S(t){t.preventDefault&&t.preventDefault()}},function(t,e,n){"use strict";n.d(e,"b",function(){return c}),n.d(e,"d",function(){return s}),n.d(e,"c",function(){return l}),n.d(e,"a",function(){return f});var r,i=n(23),o=[{configName:"clearkey",keyName:"org.w3.clearkey"},{configName:"widevine",keyName:"com.widevine.alpha"},{configName:"playready",keyName:"com.microsoft.playready"}],u=[],a={};function c(t){return t.some(function(t){return!!t.drm||t.sources.some(function(t){return!!t.drm})})}function s(t){return r||((navigator.requestMediaKeySystemAccess&&MediaKeySystemAccess.prototype.getConfiguration||window.MSMediaKeys)&&Object(i.a)(t)("drm")?(o.forEach(function(t){var e,n,r=(e=t.keyName,n=[{initDataTypes:["cenc"],videoCapabilities:[{contentType:'video/mp4;codecs="avc1.4d401e"'}],audioCapabilities:[{contentType:'audio/mp4;codecs="mp4a.40.2"'}]}],navigator.requestMediaKeySystemAccess?navigator.requestMediaKeySystemAccess(e,n):new Promise(function(t,n){var r;try{r=new window.MSMediaKeys(e)}catch(t){return void n(t)}t(r)})).then(function(){a[t.configName]=!0}).catch(function(){a[t.configName]=!1});u.push(r)}),r=Promise.all(u)):Promise.resolve())}function l(t){return a[t]}function f(t){if(r)return Object.keys(t).some(function(t){return l(t)})}},,function(t,e,n){"use strict";var r=n(0),i=n(19),o=n(8),u=n(12),a=n(2),c=n(32),s=n(16);function l(t,e){this.name=t,this.message=e.message||e.toString(),this.error=e}var f=n(7),d=n(6),p=n(11),h=n(29),v=n(55),g=n(49),m=n(56),b=Object(r.j)({},u,o,i,{addClass:d.a,hasClass:d.i,removeClass:d.o,replaceClass:d.p,toggleClass:d.v,classList:d.d,styleDimension:d.u,createElement:d.e,emptyElement:d.h,addStyleSheet:d.b,bounds:d.c,openLink:d.l,replaceInnerHtml:d.q,css:p.b,clearCss:p.a,style:p.d,transform:p.e,getRgba:p.c,ajax:h.b,crossdomain:function(t){var e=document.createElement("a"),n=document.createElement("a");e.href=location.href;try{return n.href=t,n.href=n.href,e.protocol+"//"+e.host!=n.protocol+"//"+n.host}catch(t){}return!0},tryCatch:function(t,e,n){if(void 0===n&&(n=[]),s.a.debug)return t.apply(e||this,n);try{return t.apply(e||this,n)}catch(e){return new l(t.name,e)}},Error:l,Timer:c.a,log:g.a,genId:m.b,between:v.a,foreach:function(t,e){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e(n,t[n])},flashVersion:f.a,isIframe:f.m,indexOf:r.p,trim:a.i,pad:a.e,extension:a.a,hms:a.b,seconds:a.g,prefix:a.f,suffix:a.h,noop:function(){}});e.a=b},function(t,e,n){"use strict";n.d(e,"c",function(){return i}),n.d(e,"b",function(){return o}),n.d(e,"a",function(){return u});var r=n(0),i=function(t){return t.replace(/^(.*\/)?([^-]*)-?.*\.(js)$/,"$2")};function o(t){return 305e3}function u(t,e,n){var i=t.name,o=document.createElement("div");o.id=n.id+"_"+i,o.className="jw-plugin jw-reset";var u=Object(r.j)({},e),a=t.getNewInstance(n,u,o);return n.addPlugin(i,a),a}},function(t,e,n){"use strict";n.d(e,"a",function(){return o}),n.d(e,"b",function(){return u});var r=n(10),i=null,o={};function u(){return i||(i=n.e(2).then(function(t){var e=n(21).default;return o.controls=e,e}.bind(null,n)).catch(function(){i=null,Object(r.c)(301130)()})),i}},function(t,e,n){"use strict";var r=document.createElement("video");e.a=r},function(t,e,n){"use strict";e.a={advertising:{admessage:"This ad will end in xx",cuetext:"Advertisement",displayHeading:"Advertisement",loadingAd:"Loading ad",podmessage:"Ad __AD_POD_CURRENT__ of __AD_POD_LENGTH__.",skipmessage:"Skip ad in xx",skiptext:"Skip"},airplay:"AirPlay",audioTracks:"Audio Tracks",auto:"Auto",buffer:"Loading",cast:"Chromecast",cc:"Closed Captions",close:"Close",errors:{badConnection:"This video cannot be played because of a problem with your internet connection.",cantLoadPlayer:"Sorry, the video player failed to load.",cantPlayInBrowser:"The video cannot be played in this browser.",cantPlayVideo:"This video file cannot be played.",errorCode:"Error Code",liveStreamDown:"The live stream is either down or has ended.",protectedContent:"There was a problem providing access to protected content.",technicalError:"This video cannot be played because of a technical error."},exitFullscreen:"Exit Fullscreen",fullscreen:"Fullscreen",hd:"Quality",liveBroadcast:"Live",logo:"Logo",mute:"Mute",next:"Next",nextUp:"Next Up",notLive:"Not Live",off:"Off",pause:"Pause",play:"Play",playback:"Play",playbackRates:"Playback Rates",player:"Video Player",poweredBy:"Powered by",prev:"Previous",related:{autoplaymessage:"Next up in xx",heading:"More Videos"},replay:"Replay",rewind:"Rewind 10 Seconds",settings:"Settings",sharing:{copied:"Copied",email:"Email",embed:"Embed",heading:"Share",link:"Link"},slider:"Seek",stop:"Stop",unmute:"Unmute",videoInfo:"About This Video",volume:"Volume",volumeSlider:"Volume",shortcuts:{playPause:"Play/Pause",volumeToggle:"Mute/Unmute",fullscreenToggle:"Fullscreen/Exit Fullscreen",seekPercent:"Seek %",keyboardShortcuts:"Keyboard Shortcuts",increaseVolume:"Increase Volume",decreaseVolume:"Decrease Volume",seekForward:"Seek Forward",seekBackward:"Seek Backward",spacebar:"SPACE",captionsToggle:"Captions On/Off"},captionsStyles:{subtitleSettings:"Subtitle Settings",color:"Font Color",fontOpacity:"Font Opacity",userFontScale:"Font Size",fontFamily:"Font Family",edgeStyle:"Character Edge",backgroundColor:"Background Color",backgroundOpacity:"Background Opacity",windowColor:"Window Color",windowOpacity:"Window Opacity",white:"White",black:"Black",red:"Red",green:"Green",blue:"Blue",yellow:"Yellow",magenta:"Magenta",cyan:"Cyan",none:"None",raised:"Raised",depressed:"Depressed",uniform:"Uniform",dropShadow:"Drop Shadow"},disabled:"Disabled",enabled:"Enabled",reset:"Reset"}},function(t,e){var n,r,i={},o={},u=(n=function(){return document.head||document.getElementsByTagName("head")[0]},function(){return void 0===r&&(r=n.apply(this,arguments)),r});function a(t){var e=document.createElement("style");return e.type="text/css",e.setAttribute("data-jwplayer-id",t),function(t){u().appendChild(t)}(e),e}function c(t,e){var n,r,i,u=o[t];u||(u=o[t]={element:a(t),counter:0});var c=u.counter++;return n=u.element,i=function(){f(n,c,"")},(r=function(t){f(n,c,t)})(e.css),function(t){if(t){if(t.css===e.css&&t.media===e.media)return;r((e=t).css)}else i()}}t.exports={style:function(t,e){!function(t,e){for(var n=0;n
'+(e||"")+''+(r?("("+n+": "+r+")").replace(/\s+/g," "):"")+"
"}(t.get("id"),n,t.get("localization").errors.errorCode,o.toString()),a=t.get("width"),c=t.get("height"),s=Object(r.e)(u);return Object(i.d)(s,{width:a.toString().indexOf("%")>0?a:a+"px",height:c.toString().indexOf("%")>0?c:c+"px"}),s}n.d(e,"a",function(){return o})},function(t,e,n){"use strict";function r(t){return t.slice&&"px"===t.slice(-2)&&(t=t.slice(0,-2)),t}function i(t,e){if(-1===e.toString().indexOf("%"))return 0;if("string"!=typeof t||!t)return 0;if(/^\d*\.?\d+%$/.test(t))return t;var n=t.indexOf(":");if(-1===n)return 0;var r=parseFloat(t.substr(0,n)),i=parseFloat(t.substr(n+1));return r<=0||i<=0?0:i/r*100+"%"}n.d(e,"b",function(){return r}),n.d(e,"a",function(){return i})},function(t,e,n){"use strict";n.d(e,"a",function(){return r});var r=window.atob},function(t,e,n){"use strict";var r=n(4),i=n(2);function o(t){var e={zh:"Chinese",nl:"Dutch",en:"English",fr:"French",de:"German",it:"Italian",ja:"Japanese",pt:"Portuguese",ru:"Russian",es:"Spanish"};return e[t]?e[t]:t}function u(t){for(var e=[],n=0;n0&&(n=t(s,n));break;case"title":n.title=Object(r.d)(s);break;case"description":n.description=Object(r.d)(s);break;case"guid":n.mediaid=Object(r.d)(s);break;case"thumbnail":n.image||(n.image=Object(i.j)(s,"url"));break;case"group":t(s,n);break;case"subtitle":var d={file:Object(i.j)(s,"url"),kind:"captions"};Object(i.j)(s,"lang").length>0&&(d.label=o(Object(i.j)(s,"lang"))),a.push(d)}}}n.tracks||(n.tracks=[]);for(var p=0;p0&&(d[n]="true"===o[f][n],d.label||delete d.label,e.sources.push(d))}}if(u.length){e.tracks=[];for(var p=0;p0&&(h[n]="true"===u[p][n],h.kind=u[p].kind.length?u[p].kind:"captions",h.label||delete h.label,e.tracks.push(h))}}return e},l=n(30);function f(t){var e=[];e.feedData={};for(var n=0;n>>2&3;for(var p=s-1;p>=0;p--)o=((l=a[p>0?p-1:s-1])>>>5^f<<2)+(f>>>3^l<<4)^(d^f)+(c[3&p^u]^l),f=a[p]-=o;d-=2654435769}return function(t){try{return decodeURIComponent(escape(t))}catch(e){return t}}(function(t){for(var e=new Array(t.length),n=0;n>>8&255,t[n]>>>16&255,t[n]>>>24&255);return e.join("")}(a).replace(/\0+$/,""))}},function(t,e,n){"use strict";n.d(e,"b",function(){return r}),n.d(e,"a",function(){return i});var r=window.requestAnimationFrame||function(t){return setTimeout(t,17)},i=window.cancelAnimationFrame||clearTimeout},function(t,e,n){"use strict";n.d(e,"b",function(){return r}),n.d(e,"a",function(){return i});var r={audioMode:!1,flashBlocked:!1,itemMeta:{},playbackRate:1,playRejected:!1,state:n(3).nb,itemReady:!1,controlsEnabled:!1},i={position:0,duration:0,buffer:0,currentTime:0}},,function(t,e,n){"use strict";n.d(e,"a",function(){return l}),n.d(e,"c",function(){return f});var r=n(0),i=n(46),o=n(19),u=n(12),a=n(5),c=n(42),s=n(14),l={autoPause:{viewability:!1,pauseAds:!1},autostart:!1,bandwidthEstimate:null,bitrateSelection:null,castAvailable:!1,controls:!0,cues:[],defaultPlaybackRate:1,displaydescription:!0,displaytitle:!0,displayPlaybackLabel:!1,enableShortcuts:!0,height:360,intl:{},item:0,language:"en",liveTimeout:null,localization:c.a,mute:!1,nextUpDisplay:!0,playbackRateControls:!1,playbackRates:[.5,1,1.25,1.5,2],renderCaptionsNatively:!1,repeat:!1,stretching:"uniform",volume:90,width:640};function f(t){return t?t<5?5:t>30?30:t:25}e.b=function(t,e){var d=Object(r.j)({},(window.jwplayer||{}).defaults,e,t);!function(t){Object.keys(t).forEach(function(e){"id"!==e&&(t[e]=Object(u.serialize)(t[e]))})}(d);var p=d.forceLocalizationDefaults?l.language:Object(s.e)(),h=Object(s.j)(d.intl);d.localization=Object(s.a)(c.a,Object(s.c)(d,h,p));var v=Object(r.j)({},l,d);"."===v.base&&(v.base=Object(o.getScriptPath)("jwplayer.js")),v.base=(v.base||Object(o.loadFrom)()).replace(/\/?$/,"/"),n.p=v.base,v.width=Object(i.b)(v.width),v.height=Object(i.b)(v.height),v.aspectratio=Object(i.a)(v.aspectratio,v.width),v.volume=Object(r.z)(v.volume)?Math.min(Math.max(0,v.volume),100):l.volume,v.mute=!!v.mute,v.language=p,v.intl=h;var g=v.playlistIndex;g&&(v.item=g),Object(r.v)(v.item)||(v.item=0);var m=d.autoPause;m&&(v.autoPause.viewability=!("viewability"in m&&!m.viewability));var b=v.playbackRateControls;if(b){var y=v.playbackRates;Array.isArray(b)&&(y=b),(y=y.filter(function(t){return Object(r.v)(t)&&t>=.25&&t<=4}).map(function(t){return Math.round(100*t)/100})).indexOf(1)<0&&y.push(1),y.sort(),v.playbackRateControls=!0,v.playbackRates=y}(!v.playbackRateControls||v.playbackRates.indexOf(v.defaultPlaybackRate)<0)&&(v.defaultPlaybackRate=1),v.playbackRate=v.defaultPlaybackRate,v.aspectratio||delete v.aspectratio;var j=v.playlist;if(j)Array.isArray(j.playlist)&&(v.feedData=j,v.playlist=j.playlist);else{var w=Object(r.D)(v,["title","description","type","mediaid","image","images","file","sources","tracks","preload","duration"]);v.playlist=[w]}v.qualityLabels=v.qualityLabels||v.hlslabels,delete v.duration;var O=v.liveTimeout;null!==O&&(Object(r.z)(O)?0!==O&&(O=Math.max(30,O)):O=null,v.liveTimeout=O);var k,C,x=parseFloat(v.bandwidthEstimate),P=parseFloat(v.bitrateSelection);return v.bandwidthEstimate=Object(r.z)(x)?x:(k=v.defaultBandwidthEstimate,C=parseFloat(k),Object(r.z)(C)?Math.max(C,1):l.bandwidthEstimate),v.bitrateSelection=Object(r.z)(P)?P:l.bitrateSelection,v.liveSyncDuration=f(v.liveSyncDuration),v.backgroundLoading=Object(r.r)(v.backgroundLoading)?v.backgroundLoading:a.Features.backgroundLoading,v}},function(t,e,n){"use strict";n.d(e,"a",function(){return r});var r=function(t,e,n){return Math.max(Math.min(t,n),e)}},function(t,e,n){"use strict";n.d(e,"a",function(){return r}),n.d(e,"b",function(){return o});var r=12;function i(){try{var t=window.crypto||window.msCrypto;if(t&&t.getRandomValues)return t.getRandomValues(new Uint32Array(1))[0].toString(36)}catch(t){}return Math.random().toString(36).slice(2,9)}function o(t){for(var e="";e.length0;){var e=r.shift(),n=e.command,o=e.args;(i[n]||t[n]).apply(t,o)}}e.forEach(function(e){var u=t[e];i[e]=u,t[e]=function(){for(var t=arguments.length,i=new Array(t),a=0;a0)return 0;var n=t.indexOf("/"),r=Object(u.a)(t);return!(e<0&&n<0)||r&&isNaN(r)?1:2}},l=function(t){this.url=t,this.promise_=null};Object.defineProperties(l.prototype,{promise:{get:function(){return this.promise_||this.load()},set:function(){}}}),Object(r.j)(l.prototype,{load:function(){var t=this,e=this.promise_;if(!e){if(2===s(this.url))e=Promise.resolve(this);else{var n=new i.a(function(t){switch(s(t)){case 0:return t;case 1:return Object(o.getAbsolutePath)(t,window.location.href)}}(this.url));this.loader=n,e=n.load().then(function(){return t})}this.promise_=e}return e},registerPlugin:function(t,e,n){this.name=t,this.target=e,this.js=n},getNewInstance:function(t,e,n){var r=this.js;if("function"!=typeof r)throw new a.s(null,Object(c.b)(this.url)+100);var i=new r(t,e,n);return i.addToPlayer=function(){var e=t.getContainer().querySelector(".jw-overlays");e&&(n.left=e.style.left,n.top=e.style.top,e.appendChild(n),i.displayArea=e)},i.resizeHandler=function(){var t=i.displayArea;t&&i.resize(t.clientWidth,t.clientHeight)},i}}),e.a=l},function(t,e,n){"use strict";var r=n(0),i=n(3),o=n(4),u=n(48),a=n(29),c=n(9),s=n(1);e.a=function(){var t=Object(r.j)(this,c.a);function e(e){try{var a,c=e.responseXML?e.responseXML.childNodes:null,l=null;if(c){for(var f=0;f-1&&(y.playlist=function(t,e){var n=(t.querySelector("title")||{}).textContent,r=l(t,'meta[property="og:title"]'),i=encodeURIComponent(r||n||""),o=l(t,'meta[property="og:description"]')||l(t,'meta[name="description"]');return o&&(i+="&page_description="+encodeURIComponent(o)),e.replace("__CONTEXTUAL__",i)}(document,y.playlist),y.contextual=!0),Object(a.isFileProtocol)()){var C=y,x=C.playlist,P=C.related;h(x)&&(y.playlist=v(x)),P&&h(P.file)&&(P.file=v(P.file))}return y.__abSendDomainToFeeds&&(b=y.playlist,/\.jwplatform.com|\.jwplayer.com/.test(b))&&(y.playlist=(f=y.playlist,f+=(-1!==f.indexOf("?")?"&":"?")+"page_domain="+encodeURIComponent(Object(p.a)()))),y},y=n(10),j=n(26),w=n(3),O=n(62),k=n(24),C=n(25),x=n(1),P=n(14);function S(t){var e=t.get("playlist");return new Promise(function(n,r){if("string"!=typeof e){var i=t.get("feedData")||{};return T(t,e,i),n()}var o=new O.a;o.on(w.eb,function(e){var r=e.playlist;delete e.playlist,T(t,r,e),n()}),o.on(w.w,function(e){T(t,[],{}),r(Object(x.z)(e,x.u))}),o.load(e)})}function T(t,e,n){var r=t.attributes;r.playlist=Object(k.a)(e),r.feedData=n}function E(t){return t.attributes._destroyed}var A=n(36),_=function(t,e){return/isAMP/.test(document.location.search)?n.e(1).then(function(r){var i=new(0,n(167).default)(e);return t.attributes.ampController=i,Promise.resolve()}.bind(null,n)).catch(Object(y.b)(x.t+130)):Promise.resolve()};function F(t){return L(t)?Promise.resolve():S(t).then(function(){if(t.get("drm")||Object(A.b)(t.get("playlist")))return Object(A.d)(t.get("edition"))}).then(function(){return S(e=t).then(function(){if(!E(e)){var t=Object(k.b)(e.get("playlist"),e);e.attributes.playlist=t;try{Object(k.e)(t)}catch(t){throw t.code+=x.u,t}var n=e.getProviders(),r=Object(k.f)(e.get("item"),t.length),i=n.choose(t[r].sources[0]),o=i.provider,u=i.name;return"function"==typeof o?o:y.a.html5&&"html5"===u?y.a.html5:n.load(u).catch(function(t){throw Object(x.z)(t,x.v)})}});var e})}function I(t,e){var n=[M(t),_(t,e)];return L(t)||n.push(Promise.resolve()),Promise.all(n)}function M(t){var e=t.attributes,n=e.error;if(n&&n.code===c.a){var r=e.pid,i=e.ph,o=new c.b(e.key);if(i>0&&i<4&&r&&o.duration()>-7776e6)return new C.a("//content.jwplatform.com/libraries/"+r+".js").load().then(function(){var t=window.jwplayer.defaults.key,n=new c.b(t);n.error()||n.token()!==o.token()||(e.key=t,e.edition=n.edition(),e.error=n.error())}).catch(function(){})}return Promise.resolve()}function L(t){var e=t.get("advertising");return!(!e||!e.outstream)}var N=function(t){var e=t.get("skin")?t.get("skin").url:void 0;return"string"!=typeof e||function(t){for(var e=document.styleSheets,n=0,r=e.length;n=4.4:null}},function(t,e,n){"use strict";function r(){var t,e,n=window.location.host;if(window.top!==window.self){n=(document.referrer?(t=document.referrer,(e=document.createElement("a")).href=t,e):{}).host;try{n=n||window.top.location.host}catch(t){}}return n}n.d(e,"a",function(){return r})},function(t,e){t.exports=''},function(t,e,n){"use strict";var r,i=n(65),o=n(5),u=n(6),a=[],c=[],s=[],l={},f="screen"in window&&"orientation"in window.screen,d=o.OS.android&&o.Browser.chrome,p=!1;function h(t,e){for(var n=e.length;n--;){var r=e[n];if(t.target===r.getContainer()){r.setIntersection(t);break}}}function v(){a.forEach(function(t){var e=t.model;if(!(e.get("audioMode")||!e.get("controls")||e.get("visibility")<.75)){var n=e.get("state"),r=Object(u.f)();!r&&"paused"===n&&t.api.getFullscreen()?t.api.setFullscreen(!1):"playing"===n&&t.api.setFullscreen(r)}})}function g(){a.forEach(function(t){t.model.set("activeTab",Object(i.a)())})}function m(t,e){var n=e.indexOf(t);-1!==n&&e.splice(n,1)}function b(t){s.forEach(function(e){e(t)})}document.addEventListener("visibilitychange",g),document.addEventListener("webkitvisibilitychange",g),d&&f&&window.screen.orientation.addEventListener("change",v),window.addEventListener("beforeunload",function(){document.removeEventListener("visibilitychange",g),document.removeEventListener("webkitvisibilitychange",g),window.removeEventListener("scroll",b),d&&f&&window.screen.orientation.removeEventListener("change",v)}),e.a={add:function(t){a.push(t)},remove:function(t){m(t,a)},addScrollHandler:function(t){p||(p=!0,window.addEventListener("scroll",b)),s.push(t)},removeScrollHandler:function(t){var e=s.indexOf(t);-1!==e&&s.splice(e,1)},addWidget:function(t){c.push(t)},removeWidget:function(t){m(t,c)},size:function(){return a.length},observe:function(t){var e;e=window.IntersectionObserver,r||(r=new e(function(t){if(t&&t.length)for(var e=t.length;e--;){var n=t[e];h(n,a),h(n,c)}},{threshold:[0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1]})),l[t.id]||(l[t.id]=!0,r.observe(t))},unobserve:function(t){r&&l[t.id]&&(delete l[t.id],r.unobserve(t))}}},function(t,e,n){"use strict";n.d(e,"a",function(){return l});var r=n(0),i=n(51),o=n(6),u=n(11),a=[],c=-1;function s(){Object(i.a)(c),c=Object(i.b)(function(){a.forEach(function(t){t.view.updateBounds();var e=t.view.model.get("containerWidth");t.resized=t.width!==e,t.width=e}),a.forEach(function(t){t.contractElement.scrollLeft=2*t.width}),a.forEach(function(t){Object(u.d)(t.expandChild,{width:t.width+1}),t.resized&&t.view.model.get("visibility")&&t.view.updateStyles()}),a.forEach(function(t){t.expandElement.scrollLeft=t.width+1}),a.forEach(function(t){t.resized&&t.view.checkResized()})})}var l=function(){function t(t,e,n){var i={display:"block",position:"absolute",top:0,left:0},c={width:"100%",height:"100%"},l=Object(o.e)('
'),f=l.firstChild,d=f.firstChild,p=f.nextSibling;Object(u.d)([f,p],Object(r.j)({overflow:"auto"},i,c)),Object(u.d)(l,Object(r.j)({},i,c)),this.expandElement=f,this.expandChild=d,this.contractElement=p,this.hiddenElement=l,this.element=t,this.view=e,this.model=n,this.width=0,this.resized=!1,t.firstChild?t.insertBefore(l,t.firstChild):t.appendChild(l),t.addEventListener("scroll",s,!0),a.push(this),s()}return t.prototype.destroy=function(){if(this.view){var t=a.indexOf(this);-1!==t&&a.splice(t,1),this.element.removeEventListener("scroll",s,!0),this.element.removeChild(this.hiddenElement),this.view=this.model=null}},t}()},function(t,e,n){"use strict";n.r(e);var r=n(0),i=setTimeout;function o(){}function u(t){if(!(this instanceof u))throw new TypeError("Promises must be constructed via new");if("function"!=typeof t)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],d(t,this)}function a(t,e){for(;3===t._state;)t=t._value;0!==t._state?(t._handled=!0,u._immediateFn(function(){var n=1===t._state?e.onFulfilled:e.onRejected;if(null!==n){var r;try{r=n(t._value)}catch(t){return void s(e.promise,t)}c(e.promise,r)}else(1===t._state?c:s)(e.promise,t._value)})):t._deferreds.push(e)}function c(t,e){try{if(e===t)throw new TypeError("A promise cannot be resolved with itself.");if(e&&("object"==typeof e||"function"==typeof e)){var n=e.then;if(e instanceof u)return t._state=3,t._value=e,void l(t);if("function"==typeof n)return void d((r=n,i=e,function(){r.apply(i,arguments)}),t)}t._state=1,t._value=e,l(t)}catch(e){s(t,e)}var r,i}function s(t,e){t._state=2,t._value=e,l(t)}function l(t){2===t._state&&0===t._deferreds.length&&u._immediateFn(function(){t._handled||u._unhandledRejectionFn(t._value)});for(var e=0,n=t._deferreds.length;e-1)return K(r),e;if(["createInstream","setCurrentAudioTrack","setCurrentCaptions","setCurrentQuality"].indexOf(r)>-1)return K(r),null}if(l||c.push([r,a]),s)return Z(n,c),n[r].apply(e,u);!function(t,e){var n={reason:Object(U.a)()?"interaction":"external"};switch(t){case"play":case"pause":case"playToggle":case"playlistNext":case"playlistPrev":case"next":e[0]=n;break;case"seek":case"playlistItem":e[1]=n}}(r,u);var f=n[r].apply(n,u);return"remove"===r?n.off.call(e):"setup"===r&&(n.off.call(e),n.off(a.events,null,n),n.on.call(e,a.events,null,e),n.on("all",function(r,u){if("ready"===r){var a=Object.keys(n).filter(function(t){return"_"!==t[0]&&-1===i.indexOf(t)&&"function"==typeof n[t]}),s=i.concat(a);a.forEach(function(r){e[r]=t(e,n,r,s,o)})}n.trigger.call(e,r,u),Z(n,c)})),Z(n,c),f===n?e:f}}(t,e,o,i,r):"_events"===o?t._events={}:Object.defineProperty(t,o,{enumerable:!0,get:function(){return n[o]}})})}function K(t){console.warn("The API method jwplayer()."+t+"() is disabled in the free edition of JW Player.")}function Z(t,e){if(e.length){var n=t.getPlugin("jwpsrv");n&&n.trackExternalAPIUsage&&(e.forEach(function(t){!function(t,e,n){try{var r=function(t,e){switch(t){case"setup":return!!e;case"getSafeRegion":case"pauseAd":case"setControls":case"setFullscreen":case"setMute":return!!e===e?e:void 0;case"setPlaylistItem":case"getPlaylistItem":return(0|e)===e?e:void 0;case"setPlaybackRate":case"setVolume":return Number(e);case"setConfig":return Object.keys(Object(e)).join(",");case"on":case"once":case"off":case"trigger":case"getPlugin":case"addPlugin":case"registerPlugin":return""+e}return null}(e,n);t.trackExternalAPIUsage(e,r)}catch(t){O.a.debug&&console.warn(t)}}(n,t[0],t[1])}),e.length=0)}}var $=window;Object(r.j)(N,W);var G=function(t){var e=N(t);return e.uniqueId?e._publicApi||(e._publicApi=new Y(e)):e};Object(r.j)(G,W),L(G),"function"==typeof $.define&&$.define.amd&&$.define([],function(){return G});var tt=G;$.jwplayer&&(tt=$.jwplayer),e.default=tt}]).default;var jwDefaults={aspectratio:"16:9",autostart:!1,cast:{appid:"00000000"},controls:!0,displaydescription:!0,displaytitle:!0,flashplayer:"//ssl.p.jwpcdn.com/player/v/8.15.1/jwplayer.flash.swf",height:"100%",key:"",mute:!1,ph:1,pid:"",playbackRateControls:!1,preload:"metadata",repeat:!1,stagevideo:!1,stretching:"uniform",width:"100%"};jwplayer.defaults=jwDefaults; 2 | -------------------------------------------------------------------------------- /assets/js/player.js: -------------------------------------------------------------------------------- 1 | window.addEventListener('message', async e => { 2 | // Meta para testar o player APENAS em localhost 3 | const href = window.location.href; 4 | if (href.startsWith('http://127.0.0.1') || href.startsWith('http://localhost')) { 5 | let meta = document.createElement('meta'); 6 | meta.httpEquiv = 'Content-Security-Policy'; 7 | meta.content = 'upgrade-insecure-requests'; 8 | document.getElementsByTagName('head')[0].appendChild(meta); 9 | } 10 | 11 | console.log('[CR Premium] Player encontrado!'); 12 | 13 | // Variáveis principais 14 | const r = { 0: '720', 1: '1080', 2: '480', 3: '360', 4: '240' }; 15 | const lgLangs = { 'ptBR': 'Português (BR)', 'enUS': 'English (US)', 'enGB': 'English (UK)', 'esLA': 'Español (LA)', 'esES': 'Español (ES)', 'ptPT': 'Português (PT)', 'frFR': 'Français (FR)', 'deDE': 'Deutsch (DE)', 'arME': '(ME) عربي', 'itIT': 'Italiano (IT)', 'ruRU': 'Русский (RU)' }; 16 | const epLangs = { 'ptBR': 'Episódio', 'enUS': 'Episode', 'enGB': 'Episode', 'esLA': 'Episodio', 'esES': 'Episodio', 'ptPT': 'Episódio', 'frFR': 'Épisode', 'deDE': 'Folge', 'arME': 'الحلقة', 'itIT': 'Episodio', 'ruRU': 'Серия' }; 17 | const fnLangs = { 'ptBR': 'FINAL', 'enUS': 'FINAL', 'enGB': 'FINAL', 'esLA': 'FINAL', 'esES': 'FINAL', 'ptPT': 'FINAL', 'frFR': 'FINALE', 'deDE': 'FINALE', 'arME': 'نهائي', 'itIT': 'FINALE', 'ruRU': 'ФИНАЛЬНЫЙ' }; 18 | 19 | let is_beta = e.data.beta; 20 | let force_mp4 = e.data.force_mp4; 21 | let tampermonkey = e.data.tampermonkey; 22 | let webvideocaster = e.data.webvideocaster; 23 | let streamrgx = /_,(\d+.mp4),(\d+.mp4),(\d+.mp4),(?:(\d+.mp4),(\d+.mp4),)?.*?m3u8/; 24 | let video_config_media = JSON.parse(e.data.video_config_media); 25 | let video_id = video_config_media['media_id']; 26 | let up_next_cooldown = e.data.up_next_cooldown; 27 | let up_next_enable = e.data.up_next_enable; 28 | let up_next = e.data.up_next; 29 | let next_thumb = up_next ? e.data.up_next_thumbnail : []; 30 | let version = e.data.version; 31 | let user_lang = e.data.lang; 32 | let series = e.data.series; 33 | let video_stream_url = ''; 34 | let stream_languages = []; 35 | let video_m3u8_array = {}; 36 | let video_mp4_array = {}; 37 | let rows_number = {}; 38 | let tracks = {}; 39 | let dlSize = []; 40 | let dlUrl = []; 41 | let media_data = e.data; 42 | for (let idx in r) { 43 | dlSize[idx] = document.getElementById(r[idx] + '_down_size'); 44 | dlUrl[idx] = document.getElementById(r[idx] + '_down_url'); 45 | } 46 | 47 | if (force_mp4) console.log('[CR Premium] Forçando MP4 (chromecast workaround)'); 48 | 49 | // Obter streams 50 | const streamlist = getStreams(video_config_media['streams']); 51 | 52 | if (!streamlist || streamlist.length === 0) { 53 | displayError(`Não foi possível obter os streams do vídeo.`); 54 | return; 55 | } 56 | 57 | const sourceLocale = getSourceLocale(); 58 | 59 | for (let stream of streamlist) { 60 | let streamLang = stream.hardsub_locale ? stream.hardsub_locale : 'off'; 61 | streamLang = streamLang.replace('-', ''); 62 | if (!video_mp4_array[streamLang]) { 63 | stream_languages.push(streamLang); 64 | tracks[streamLang] = []; 65 | video_mp4_array[streamLang] = []; 66 | rows_number[streamLang] = -1; 67 | } 68 | 69 | // Padrão 70 | if (stream.type == 'adaptive_hls') { 71 | video_stream_url = stream.url; 72 | video_m3u8_array[streamLang] = force_mp4 ? mp4ListFromStream(video_stream_url) : video_stream_url; 73 | video_mp4_array[streamLang] = mp4ListFromStream(video_stream_url); 74 | } 75 | // Premium 76 | else if (stream.type == 'trailer_hls') 77 | if (++rows_number[streamLang] <= 4) { 78 | // TODO: video_m3u8_array.push(await getDirectStream(stream.url, rows_number[streamLang])); 79 | const arr_idx = rows_number[streamLang] === 0 ? 2 : rows_number[streamLang] === 2 ? 0 : rows_number[streamLang]; 80 | video_mp4_array[streamLang][arr_idx] = getDirectFile(stream.url); 81 | video_m3u8_array[streamLang] = video_mp4_array[streamLang]; 82 | } 83 | } 84 | 85 | // Popular tracks e carregar player 86 | stream_languages.forEach(lang => { 87 | if (Array.isArray(video_m3u8_array[lang])) for (let idx of [1, 0, 2, 3, 4]) tracks[lang].push({ file: video_m3u8_array[lang][idx], label: toResolution(r[idx]) }); 88 | else tracks[lang] = { file: video_m3u8_array[lang], type: 'm3u' }; 89 | }); 90 | 91 | (() => { 92 | // Inicia o player 93 | let playerInstance = jwplayer('player_div'); 94 | playerInstance 95 | .setup({ 96 | 'playlist': [ 97 | { 98 | 'title': getLocalEpisodeTitle(), 99 | 'description': '', 100 | 'image': media_data['thumbnail'], 101 | 'sources': tracks[sourceLocale] || tracks['off'], 102 | 'tracks': buildTracks(tracks) 103 | }, 104 | up_next_enable && up_next 105 | ? { 106 | 'autoplaytimer': 0, 107 | 'title': media_data.up_next_title, //video_config_media['metadata']['up_next']['display_episode_number'] + ' - ' + video_config_media['metadata']['up_next']['series_title'], 108 | 'file': 'https://i.imgur.com/8wEeX0R.mp4', 109 | 'repeat': true, 110 | 'image': next_thumb 111 | } 112 | : {} 113 | ], 114 | 'related': { displayMode: 'none' }, 115 | 'nextupoffset': -up_next_cooldown, 116 | 'width': '100%', 117 | 'height': '100%', 118 | 'autostart': false, 119 | 'displayPlaybackLabel': true, 120 | 'primary': 'html5', 121 | 'cast': {}, 122 | 'playbackRateControls': [0.5, 0.75, 1, 1.25, 1.5, 2] 123 | }) 124 | .on('playlistItem', e => { 125 | // tocar próximo ep 126 | if (e.index > 0 && up_next_enable && up_next) { 127 | jwplayer().setControls(false); 128 | jwplayer().setConfig({ 129 | repeat: true 130 | }); 131 | jwplayer().play(); 132 | localStorage.setItem('next_up', true); 133 | localStorage.setItem('next_up_fullscreen', jwplayer().getFullscreen()); 134 | window.top.location.href = up_next; 135 | } 136 | }) 137 | .on('captionsChanged', el => { 138 | const { tracks: captions, track: captionIndex } = el; 139 | const position = jwplayer().getPosition(); 140 | playlist = jwplayer().getPlaylist(); 141 | trackId = captions[captionIndex].id; 142 | track = trackId === 'off' ? tracks['off'] : trackId === 'default' ? tracks[locale] || tracks['off'] : trackId; 143 | playlist[0].file = undefined; 144 | playlist[0].allSources = undefined; 145 | playlist[0].sources = track; 146 | playlist[0].tracks = buildTracks(tracks); 147 | jwplayer().load(playlist); 148 | jwplayer().play(); 149 | const seek = setInterval(el => { 150 | if (jwplayer().getState() === 'playing') { 151 | jwplayer().seek(position); 152 | clearInterval(seek); 153 | } 154 | }, 5); 155 | updateWebVideoCasterAnchor(); 156 | }); 157 | 158 | // Variaveis para os botões. 159 | let update_iconPath = 'assets/icon/update_icon.svg'; 160 | let update_id = 'update-video-button'; 161 | let update_tooltipText = 'Atualização Disponível'; 162 | 163 | let rewind_iconPath = 'assets/icon/replay-10s.svg'; 164 | let rewind_id = 'rewind-video-button'; 165 | let rewind_tooltipText = 'Voltar 10s'; 166 | 167 | let forward_iconPath = 'assets/icon/forward-30s.svg'; 168 | let forward_id = 'forward-video-button'; 169 | let forward_tooltipText = 'Avançar 30s'; 170 | 171 | let webvideocaster_iconPath = 'assets/icon/webvideocaster_icon.png'; 172 | let webvideocaster_id = 'webvideocaster-video-button'; 173 | let webvideocaster_tooltipText = 'Abrir no WebVideoCaster'; 174 | 175 | let download_iconPath = 'assets/icon/download_icon.svg'; 176 | let download_id = 'download-video-button'; 177 | let download_tooltipText = 'Download'; 178 | let didDownload = false; 179 | 180 | const downloadModal = document.querySelectorAll('.modal')[0]; 181 | const updateModal = document.querySelectorAll('.modal')[1]; 182 | document.querySelectorAll('button.close-modal')[0].onclick = () => (downloadModal.style.visibility = 'hidden'); 183 | document.querySelectorAll('button.close-modal')[1].onclick = () => (updateModal.style.visibility = 'hidden'); 184 | 185 | const rewind_ButtonClickAction = () => jwplayer().seek(jwplayer().getPosition() - 10); 186 | const forward_ButtonClickAction = () => jwplayer().seek(jwplayer().getPosition() + 30); 187 | 188 | function download_ButtonClickAction() { 189 | if (jwplayer().getEnvironment().OS.mobile == true) { 190 | downloadModal.style.height = '170px'; 191 | downloadModal.style.overflow = 'auto'; 192 | } 193 | downloadModal.style.visibility = downloadModal.style.visibility === 'hidden' ? 'visible' : 'hidden'; 194 | if (!didDownload) { 195 | didDownload = true; 196 | console.log('[CR Premium] Baixando sources:'); 197 | for (let id of [1, 0, 2, 3, 4]) linkDownload(id); 198 | } 199 | } 200 | 201 | function update_ButtonClickAction() { 202 | if (jwplayer().getEnvironment().OS.mobile == true) { 203 | updateModal.style.height = '170px'; 204 | updateModal.style.overflow = 'auto'; 205 | } 206 | updateModal.style.visibility = updateModal.style.visibility === 'hidden' ? 'visible' : 'hidden'; 207 | } 208 | 209 | const forwardBtn = [forward_iconPath, forward_tooltipText, forward_ButtonClickAction, forward_id]; 210 | const rewindBtn = [rewind_iconPath, rewind_tooltipText, rewind_ButtonClickAction, rewind_id]; 211 | const webvideocasterBtn = [webvideocaster_iconPath, webvideocaster_tooltipText, () => {}, webvideocaster_id]; 212 | const downloadBtn = [download_iconPath, download_tooltipText, download_ButtonClickAction, download_id]; 213 | const updateBtn = [update_iconPath, update_tooltipText, update_ButtonClickAction, update_id]; 214 | 215 | playerInstance.addButton(...forwardBtn); 216 | playerInstance.addButton(...rewindBtn); 217 | if (webvideocaster) playerInstance.addButton(...webvideocasterBtn); 218 | else playerInstance.addButton(...downloadBtn); 219 | if (!tampermonkey && version !== '1.4.0') playerInstance.addButton(...updateBtn); 220 | 221 | // Definir URL e Tamanho na lista de download 222 | for (let id of [1, 0, 2, 3, 4]) { 223 | const sourceLang = getSourceLocale(); 224 | dlUrl[id].href = video_mp4_array[sourceLang][id]; 225 | dlUrl[id].download = media_data.episode; //video_config_media['metadata']['title']; 226 | } 227 | 228 | // Funções para o player 229 | jwplayer() 230 | .on('ready', () => { 231 | // Seta o tempo do video pro salvo no localStorage 232 | if (localStorage.getItem(video_id) != null) { 233 | const t = localStorage.getItem(video_id); 234 | document.getElementsByTagName('video')[0].currentTime = t >= 5 ? t - 5 : t; 235 | } 236 | // Mantem fullscreen + autoplay caso tenha sido redirecionado usando a função "A seguir"/"Next up" 237 | if (localStorage.getItem('next_up') === 'true') { 238 | localStorage.setItem('next_up', false); 239 | // jwplayer().setFullscreen(localStorage.getItem("next_up_fullscreen")); <- problemas com fullscreen automatico 240 | jwplayer().play(); 241 | } 242 | 243 | document.body.querySelector('.loading_container').style.display = 'none'; 244 | }) 245 | .on('viewable', () => { 246 | updateWebVideoCasterAnchor(); 247 | const old = document.querySelector('.jw-button-container > .jw-icon-rewind'); 248 | if (!old) return; 249 | const btn = query => document.querySelector(`div[button="${query}"]`); 250 | const btnContainer = old.parentElement; 251 | if (btn(rewind_id)) { 252 | btnContainer.insertBefore(btn(rewind_id), old); 253 | btnContainer.insertBefore(btn(forward_id), old); 254 | btnContainer.removeChild(old); 255 | } 256 | if (is_beta && document.getElementById('player_div')) document.getElementById('player_div').classList.add('beta-layout'); 257 | }) 258 | .on('error', e => { 259 | displayError(`Mais informações no Console.\n${linkIssue(`Código: ${e.code}`)}`); 260 | console.error(e); 261 | }) 262 | .on('audioTrackChanged', () => updateWebVideoCasterAnchor()) 263 | .on('levelsChanged', () => updateWebVideoCasterAnchor()) 264 | .on('visualQuality', () => updateWebVideoCasterAnchor()); 265 | 266 | // Salva o tempo do video a cada 7 segundos. 267 | setInterval(() => { 268 | if (jwplayer().getState() == 'playing') localStorage.setItem(video_id, jwplayer().getPosition()); 269 | }, 7000); 270 | })(); 271 | 272 | /* ~~~~~~~~~~ FUNÇÕES ~~~~~~~~~~ */ 273 | function getStreams(streams) { 274 | var array_streams = []; 275 | var adaptive_hls = streams.adaptive_hls; 276 | Object.keys(adaptive_hls).forEach(lang => { 277 | var stream = adaptive_hls[lang]; 278 | stream['type'] = 'adaptive_hls'; 279 | array_streams.push(stream); 280 | }); 281 | return array_streams; 282 | } 283 | 284 | // MP4 (download) - Premium: Obtem o link direto pelo trailer 285 | function getDirectFile(url) { 286 | return url 287 | .replace(/\/clipFrom.*?index.m3u8/, '') 288 | .replace('_,', '_') 289 | .replace(url.split('/')[2], 'fy.v.vrv.co'); 290 | } 291 | 292 | // MP4 (download) - Grátis: Obtem o link direto pelo padrão 293 | function mp4ListFromStream(url) { 294 | const cleanUrl = url.replace('evs1', 'evs').replace(url.split('/')[2], 'fy.v.vrv.co'); 295 | const res = streamrgx 296 | .exec(cleanUrl) 297 | .slice(1) 298 | .map(streamfile => streamfile && cleanUrl.replace(streamrgx, `_${streamfile}`)) 299 | .filter(el => el !== undefined); 300 | 301 | if (res.length === 3) { 302 | const [el1, el2, ...tail] = res; 303 | return [el2, el1, ...tail]; 304 | } 305 | return url; 306 | } 307 | 308 | // Checa se o URL do video_mp4_array[lang][id] existe e calcula o tamanho p/ download 309 | function linkDownload(id, tentativas = 0) { 310 | const sourceLang = getSourceLocale(); 311 | console.log(' - Baixando (' + sourceLang + '): ', r[id]); 312 | let video_mp4_url = video_mp4_array[sourceLang][id]; 313 | if (!video_mp4_url) return disableDownload(id); 314 | 315 | let fileSize = ''; 316 | let http = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'); 317 | http.onreadystatechange = () => { 318 | if (http.readyState == 4 && http.status == 200) { 319 | fileSize = http.getResponseHeader('content-length'); 320 | if (!fileSize) return setTimeout(() => linkDownload(id), 5000); 321 | else { 322 | let sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB']; 323 | if (fileSize == 0) return console.log('addSource#fileSize == 0'); 324 | let i = parseInt(Math.floor(Math.log(fileSize) / Math.log(1024))); 325 | if (i == 0) return console.log('addSource#i == 0'); 326 | let return_fileSize = (fileSize / Math.pow(1024, i)).toFixed(1) + ' ' + sizes[i]; 327 | dlSize[id].innerText = return_fileSize; 328 | return console.log(`[CR Premium] Source adicionado: ${r[id]} (${return_fileSize})`); 329 | } 330 | } else if (http.readyState == 4 && tentativas < 3) return setTimeout(() => linkDownload(id, tentativas + 1), 5000); 331 | else if (http.readyState == 4) return disableDownload(id); 332 | }; 333 | http.open('HEAD', video_mp4_url, true); 334 | http.send(null); 335 | } 336 | 337 | function getLocalEpisodeTitle() { 338 | const episode_translate = `${epLangs[user_lang[0]] ? epLangs[user_lang[0]] : 'Episode'} `; 339 | const final_translate = ` (${fnLangs[user_lang[0]] ? fnLangs[user_lang[0]] : 'FINAL'})`; 340 | 341 | if (series) { 342 | return series + ' - ' + media_data.episode; //+ episode_translate + video_config_media['metadata']['display_episode_number']; 343 | } else if (video_config_media['metadata']['up_next']) { 344 | let prox_ep_number = video_config_media['metadata']['up_next']['display_episode_number']; 345 | return video_config_media['metadata']['up_next']['series_title'] + ' - ' + prox_ep_number.replace(/\d+|OVA/g, '') + video_config_media['metadata']['display_episode_number']; 346 | } else return episode_translate + video_config_media['metadata']['display_episode_number'] + final_translate; 347 | } 348 | 349 | function toResolution(resolution) { 350 | return parseInt(resolution) >= 720 ? `${resolution}pHD` : `${resolution}p`; 351 | } 352 | 353 | function disableDownload(id) { 354 | dlUrl[id].style.pointerEvents = 'none'; 355 | dlUrl[id].style.cursor = 'default'; 356 | dlUrl[id].style.filter = 'invert(49%)'; 357 | dlSize[id].innerText = '🚫'; 358 | } 359 | 360 | function buildTracks(tracks) { 361 | return Object.entries(tracks) 362 | .map(entry => { 363 | const [lang, track] = entry; 364 | console.log(entry); 365 | return { 366 | 'kind': 'captions', 367 | 'file': track, 368 | 'label': lgLangs[lang] || lang, 369 | 'language': lang 370 | }; 371 | }) 372 | .filter(track => track['language'] !== 'off'); 373 | } 374 | 375 | function updateWebVideoCasterAnchor() { 376 | const playerInstance = jwplayer(); 377 | const castBtn = document.querySelector('[button="webvideocaster-video-button"]'); 378 | if (!castBtn) return; 379 | const locale = getSourceLocale(); 380 | let quality = playerInstance.getCurrentQuality() - 1; 381 | quality = quality === 0 ? 1 : quality === 1 ? 0 : quality; 382 | console.log(`[CR Premium] Definido o WVC na qualidade de ${r[quality]}p`); 383 | let urlToCast = video_mp4_array[locale][quality]; 384 | if (!urlToCast) urlToCast = video_mp4_array[locale][1]; 385 | if (!urlToCast) urlToCast = video_mp4_array[locale][0]; 386 | urlToCast = 'wvc-x-callback://open?url=' + encodeURIComponent(urlToCast); 387 | 388 | if (navigator.userAgent.includes('Android')) { 389 | let anchor = document.getElementById('jw-webvideocaster'); 390 | if (!anchor) { 391 | anchor = document.createElement('a'); 392 | anchor.id = 'jw-webvideocaster'; 393 | anchor.href = urlToCast; 394 | castBtn.parentNode.insertBefore(anchor, castBtn); 395 | anchor.appendChild(castBtn); 396 | } else { 397 | anchor.href = urlToCast; 398 | } 399 | } else castBtn.onclick = () => (window.top.location = urlToCast); 400 | } 401 | 402 | function getSourceLocale() { 403 | try { 404 | const jwplayerLocale = Object.keys(lgLangs).find(el => lgLangs[el] === localStorage.getItem('jwplayer.captionLabel')); 405 | if (!jwplayerLocale) localStorage.setItem('jwplayer.captionLabel', lgLangs[user_lang]); 406 | const sourceLocale = jwplayerLocale ? jwplayerLocale : user_lang; 407 | const hasUserLang = streamlist.find(stream => stream.hardsub_locale.replace('-', '') == sourceLocale); 408 | return hasUserLang ? sourceLocale : 'off'; 409 | } catch (err) { 410 | displayError(`Os cookies ${linkIssue('estão desativados', '51#issuecomment-1190684190')}!`); 411 | throw err; 412 | } 413 | } 414 | 415 | function linkIssue(text, issue = '') { 416 | return `${text}`; 417 | } 418 | 419 | function displayError(info) { 420 | const msg = 'Erro ao carregar o vídeo! (>﹏<)\n' + info; 421 | const loadingIcon = document.getElementById('player-loading'); 422 | const errorIcon = document.getElementById('player-error'); 423 | const loadingText = document.getElementById('loading-text'); 424 | const jwErrorText = document.querySelector('.jw-error-text'); 425 | loadingIcon.style = 'display: none;'; 426 | errorIcon.style = 'display: block;'; 427 | loadingText.innerHTML = msg.replaceAll('\n', ''); 428 | if (jwErrorText) jwErrorText.innerHTML = msg.replaceAll('\n', ''); 429 | } 430 | }); 431 | -------------------------------------------------------------------------------- /assets/js/search.js: -------------------------------------------------------------------------------- 1 | // ignore esse arquivo, é só para pesquisar se cair dnv 2 | 3 | const axios = require('axios'); 4 | const atob = require('atob'); 5 | const btoa = require('btoa'); 6 | 7 | const fs = require('fs'); 8 | 9 | streams = [ 10 | { 'type': 'adaptive_hls', 'audio_locale': 'ja-JP', 'hardsub_locale': 'de-DE', 'url': 'https://v.vrv.co/evs3/5387602d294bdf82047ac09902aa7515/assets/ca2559e914fe1d1673e4e98d871fd219_,4902810.mp4,4902817.mp4,4902803.mp4,4902789.mp4,4902796.mp4,4902782.mp4,.urlset/master.m3u8?Expires=1673564515&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly92LnZydi5jby9ldnMzLzUzODc2MDJkMjk0YmRmODIwNDdhYzA5OTAyYWE3NTE1L2Fzc2V0cy9jYTI1NTllOTE0ZmUxZDE2NzNlNGU5OGQ4NzFmZDIxOV8sNDkwMjgxMC5tcDQsNDkwMjgxNy5tcDQsNDkwMjgwMy5tcDQsNDkwMjc4OS5tcDQsNDkwMjc5Ni5tcDQsNDkwMjc4Mi5tcDQsLnVybHNldC9tYXN0ZXIubTN1OCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTY3MzU2NDUxNX19fV19&Signature=eEr8Dm1-iBOGY78wkDCgy8CwJe5oP6yhSL9pZgp4GeXvl2R3crzoO1fFWRvPKDAMt3IctMS5LFzaVzb-8bOIytHsZIBa-Iap-969wmF7ZsqnwNkix5UW4Muhf5vv6A3vSQzFrWl-0X1eOvzQksmFte1DoHUCumpLR58Z0rg5A08ACKxp7basDCWEDUbBirRevTm11kTWA5l-Z~8GmFlXW27ZF52~WYlWPEFz~rF6XAnRjokmSTJzY5ytu6GL6nYBw1RuNm2jlq-sSlIz9pFWSfkWTVvbohaqEBhEZPz145BDuI3liXh8RfHANPKO9entfuExtZ0yBdX6GTtPJNb7Mw__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA' }, 11 | { 'type': 'adaptive_hls', 'audio_locale': 'ja-JP', 'hardsub_locale': 'en-US', 'url': 'https://v.vrv.co/evs3/5387602d294bdf82047ac09902aa7515/assets/ca2559e914fe1d1673e4e98d871fd219_,4902804.mp4,4902811.mp4,4902797.mp4,4902783.mp4,4902790.mp4,4902776.mp4,.urlset/master.m3u8?Expires=1673564515&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly92LnZydi5jby9ldnMzLzUzODc2MDJkMjk0YmRmODIwNDdhYzA5OTAyYWE3NTE1L2Fzc2V0cy9jYTI1NTllOTE0ZmUxZDE2NzNlNGU5OGQ4NzFmZDIxOV8sNDkwMjgwNC5tcDQsNDkwMjgxMS5tcDQsNDkwMjc5Ny5tcDQsNDkwMjc4My5tcDQsNDkwMjc5MC5tcDQsNDkwMjc3Ni5tcDQsLnVybHNldC9tYXN0ZXIubTN1OCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTY3MzU2NDUxNX19fV19&Signature=U~6mUAxNC1fe3fQN81lRZt0-3tP7H4COTZBAV8sAFMlxaDicxIiN4ZdH8oYXPsynf9THYpbhCR~6fYWPyGvowqPkPQhM16awgP5voOXz5LTb66T4KdvCojMSrhjf9RzEZPf3h6VMba4X53vJyeTvi4UP7IoLVOU5xhSVh8O~Pzn2yBya783EobFcphQrwMeNIhNZkEDLXWUtqkC7FFcFNVw2OukBsYQxPotbsQDg1IQNvZ5UKiu5xRiFZ1JSMgQi6SO3M3woiFNyJLVziSjvdAiEv7lckp1ptk8agxziBDD9cBPQ3nV5gJNZVbwxamE0L0FLDpIMkQPnbi4GiQ3I6A__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA' }, 12 | { 'type': 'adaptive_hls', 'audio_locale': 'ja-JP', 'hardsub_locale': 'es-ES', 'url': 'https://v.vrv.co/evs3/5387602d294bdf82047ac09902aa7515/assets/ca2559e914fe1d1673e4e98d871fd219_,4902806.mp4,4902813.mp4,4902799.mp4,4902785.mp4,4902792.mp4,4902778.mp4,.urlset/master.m3u8?Expires=1673564515&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly92LnZydi5jby9ldnMzLzUzODc2MDJkMjk0YmRmODIwNDdhYzA5OTAyYWE3NTE1L2Fzc2V0cy9jYTI1NTllOTE0ZmUxZDE2NzNlNGU5OGQ4NzFmZDIxOV8sNDkwMjgwNi5tcDQsNDkwMjgxMy5tcDQsNDkwMjc5OS5tcDQsNDkwMjc4NS5tcDQsNDkwMjc5Mi5tcDQsNDkwMjc3OC5tcDQsLnVybHNldC9tYXN0ZXIubTN1OCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTY3MzU2NDUxNX19fV19&Signature=gphVzpLbpsLCL80oXCGFXG2wzW1vDjbQrAWAldWnJ4OZETdERmhfMH8dGSnMFuFrxCTbDJmWzXoYS6jJMYxC55~brZreaOfxyrl0v8adjLyVQ5goQlVznnPYP7QismyBNaZuIMUMOcR9lgnGl2ZL~jV9LDi4xaSMmwbUenLN0q0TRzaSHmZuiXviv8--lhHBjUy72U93dSIaqerLSGlgndM5UdIl~4A~Y2exYaBFzxia8HQQfzWzd-H-LXtVk7X6wAod7vQRvaq5LtM~Xa67Sdov2qBgpdFDtrl6LHVg6o6-py3HyFv0n76i6Lbn~fG1eU5pcXjWMgjv~wYa~2zSzw__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA' }, 13 | { 'type': 'adaptive_hls', 'audio_locale': 'ja-JP', 'hardsub_locale': 'fr-FR', 'url': 'https://v.vrv.co/evs3/5387602d294bdf82047ac09902aa7515/assets/ca2559e914fe1d1673e4e98d871fd219_,4902807.mp4,4902814.mp4,4902800.mp4,4902786.mp4,4902793.mp4,4902779.mp4,.urlset/master.m3u8?Expires=1673564515&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly92LnZydi5jby9ldnMzLzUzODc2MDJkMjk0YmRmODIwNDdhYzA5OTAyYWE3NTE1L2Fzc2V0cy9jYTI1NTllOTE0ZmUxZDE2NzNlNGU5OGQ4NzFmZDIxOV8sNDkwMjgwNy5tcDQsNDkwMjgxNC5tcDQsNDkwMjgwMC5tcDQsNDkwMjc4Ni5tcDQsNDkwMjc5My5tcDQsNDkwMjc3OS5tcDQsLnVybHNldC9tYXN0ZXIubTN1OCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTY3MzU2NDUxNX19fV19&Signature=hvc5LAwdp9x~zZTKP3cJyJAteSUmJdJpggDShST6H7KhajGig2-zBYejfzb5gyarRpTT2O6OSRZyONc8eENkA1ljenzXaHPRS9~B1afotiKIkyFWZc9raFpRJrHRHaWdtk4E3X9ZRI6UZ5q9A4XWyRDaW4YPqdvrD9WtWOhHe5cc7BlUNNzRHBT4ek~GGdPIqIBZ0wubxif-oClmSYtqC1RXC4xrjbPelr5xAMogOSkP0xa2vdM-hoe09CdvaOPTVu~qWExckIsmugiFl8kJcCqvAlZ16bh4wit2KxBb6s2Pjsis~osnb71oTwzdimS3Nyi4y1h-0M6naSfaUG5~Hg__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA' }, 14 | { 'type': 'adaptive_hls', 'audio_locale': 'ja-JP', 'hardsub_locale': 'it-IT', 'url': 'https://v.vrv.co/evs3/5387602d294bdf82047ac09902aa7515/assets/ca2559e914fe1d1673e4e98d871fd219_,4902809.mp4,4902816.mp4,4902802.mp4,4902788.mp4,4902795.mp4,4902781.mp4,.urlset/master.m3u8?Expires=1673564515&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly92LnZydi5jby9ldnMzLzUzODc2MDJkMjk0YmRmODIwNDdhYzA5OTAyYWE3NTE1L2Fzc2V0cy9jYTI1NTllOTE0ZmUxZDE2NzNlNGU5OGQ4NzFmZDIxOV8sNDkwMjgwOS5tcDQsNDkwMjgxNi5tcDQsNDkwMjgwMi5tcDQsNDkwMjc4OC5tcDQsNDkwMjc5NS5tcDQsNDkwMjc4MS5tcDQsLnVybHNldC9tYXN0ZXIubTN1OCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTY3MzU2NDUxNX19fV19&Signature=UQNnwyUNj0QJCJsKXFlJApaFxgj665Y0zQdRjBf3fqkl2hGI983~xM2TKm2Sq4F~bPAknBzLvX8KopUwSSDUakjJyuP3E42utKHFlfWSC0~K~jQWEVLFraztndKxyJi33klpcTtnJCI4rQT2L3OWe7X5b7ezbTWbvhRfH5MMClQTUeTPzyGLORV~gtDCyR2E38FAD85fTwm6l2ZoNp32v9yolYbbR7dOuvL79F7wqvzz-olBcbWRjTeyRHB1r3loZbPJ8fZIx6QmsvCYJJ57lM0loMvFIfwyj1jjqx1ORC2nsRsYbnvKLXhYkx6gzB-ZXbmx9j996uqCklRxsrg3~w__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA' }, 15 | { 'type': 'adaptive_hls', 'audio_locale': 'ja-JP', 'hardsub_locale': 'pt-BR', 'url': 'https://v.vrv.co/evs3/5387602d294bdf82047ac09902aa7515/assets/ca2559e914fe1d1673e4e98d871fd219_,4902808.mp4,4902815.mp4,4902801.mp4,4902787.mp4,4902794.mp4,4902780.mp4,.urlset/master.m3u8?Expires=1673564515&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly92LnZydi5jby9ldnMzLzUzODc2MDJkMjk0YmRmODIwNDdhYzA5OTAyYWE3NTE1L2Fzc2V0cy9jYTI1NTllOTE0ZmUxZDE2NzNlNGU5OGQ4NzFmZDIxOV8sNDkwMjgwOC5tcDQsNDkwMjgxNS5tcDQsNDkwMjgwMS5tcDQsNDkwMjc4Ny5tcDQsNDkwMjc5NC5tcDQsNDkwMjc4MC5tcDQsLnVybHNldC9tYXN0ZXIubTN1OCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTY3MzU2NDUxNX19fV19&Signature=nuP1rEanCIvksuDzVjQahYlslWGvCo6KnYQIgLcNMWdJh3otKUdPUnrgRIVkBIhpASG7XFS~RS62-lgrW7izIQ~xiFaYPX3c9XyHxsxPasV81Y3pr3LFD0bAjKJ9YYpA89HA1GdxH0~8aM8LbZAe62gUZcnoYVtCS~~Ds3Mfo4fMc28FJq83so69i5EY5Da51hAG9dg9iQV3kOtMdmJDuZtlaMQn4lXxpDfMFA5Cm3p5Fb3G3ipf0nHseuMDk0-doP8m~oJ8vH6lz8p4WPSGFip-GpQM6NXa0tASZdMqpbrPLFNt4qlu2aiQz-eaet3MVFkHZPY8dMIGJ0wqL8n68Q__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA' }, 16 | { 'type': 'adaptive_hls', 'audio_locale': 'ja-JP', 'hardsub_locale': 'ru-RU', 'url': 'https://v.vrv.co/evs3/5387602d294bdf82047ac09902aa7515/assets/ca2559e914fe1d1673e4e98d871fd219_,4904595.mp4,4904597.mp4,4904593.mp4,4904591.mp4,4904589.mp4,4904587.mp4,.urlset/master.m3u8?Expires=1673564515&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly92LnZydi5jby9ldnMzLzUzODc2MDJkMjk0YmRmODIwNDdhYzA5OTAyYWE3NTE1L2Fzc2V0cy9jYTI1NTllOTE0ZmUxZDE2NzNlNGU5OGQ4NzFmZDIxOV8sNDkwNDU5NS5tcDQsNDkwNDU5Ny5tcDQsNDkwNDU5My5tcDQsNDkwNDU5MS5tcDQsNDkwNDU4OS5tcDQsNDkwNDU4Ny5tcDQsLnVybHNldC9tYXN0ZXIubTN1OCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTY3MzU2NDUxNX19fV19&Signature=RvGTVNC6efXtJUDImu0NMrgObMgweM8iVbVEBA-rhjfRNpCj-mIomDloxM5MCXojaBBLdYDo2q5XwwxOgaAaYXd4~DHs4g3b2AkJdM~uBwFTT8iubyDzLGibBvcsTZCyWy02P81eUgl~aYhJa~4AiH8DUztLvV4SoejhXsrtYH1ek8YkNW-mElmka~-zmKafmPa-I8yo7Zff5r9-ddDaaF2Kp-oquvs0mSNfyoBQYlNtn-dwrxP-lzyZaYBPawcQ8LoXZ~2LyRX~sihY4~i62r30VVwlCpeZWVsWFDff2IftDXbBL0dcPERdTErpthsvh70nnu6sBb1MUsnZr5XXoA__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA' }, 17 | { 'type': 'adaptive_hls', 'audio_locale': 'ja-JP', 'hardsub_locale': 'ar-ME', 'url': 'https://v.vrv.co/evs3/5387602d294bdf82047ac09902aa7515/assets/ca2559e914fe1d1673e4e98d871fd219_,4904594.mp4,4904596.mp4,4904592.mp4,4904590.mp4,4904588.mp4,4904586.mp4,.urlset/master.m3u8?Expires=1673564515&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly92LnZydi5jby9ldnMzLzUzODc2MDJkMjk0YmRmODIwNDdhYzA5OTAyYWE3NTE1L2Fzc2V0cy9jYTI1NTllOTE0ZmUxZDE2NzNlNGU5OGQ4NzFmZDIxOV8sNDkwNDU5NC5tcDQsNDkwNDU5Ni5tcDQsNDkwNDU5Mi5tcDQsNDkwNDU5MC5tcDQsNDkwNDU4OC5tcDQsNDkwNDU4Ni5tcDQsLnVybHNldC9tYXN0ZXIubTN1OCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTY3MzU2NDUxNX19fV19&Signature=NfT7YWlx1d8L-rF9MM1TOLOvA9rRAGp81iorNshkUfeO7CZhvNDCKd5IztPSsIg0xRbgMIyt8bGqWgUi1lIpsXaFRFxVXrRb~PMlJeVUGlxt3D3jb8rSPpdVmCWipy-JnIMQMnwwK5CsELllheT~Cf1BOhIFKTXBVYYIKvOgb7NUNEfXTEGasH16H7Uc-6cy2BOzMA3U~2ZXy3dd4PJelCAnX0ha7rNqwqT1np4zDWvg1Tiz~fvkPgX5WKUPU0jNSN3UCh3JMjlaiSzwlbquMt-CxO3RAX2teq~8wlFB5nLNiTvxCt4xM8YXul-l1u4i5OZoGgiYrbV5G1j68YTuYw__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA' }, 18 | { 'type': 'adaptive_hls', 'audio_locale': 'ja-JP', 'hardsub_locale': 'es-419', 'url': 'https://v.vrv.co/evs3/5387602d294bdf82047ac09902aa7515/assets/ca2559e914fe1d1673e4e98d871fd219_,4902805.mp4,4902812.mp4,4902798.mp4,4902784.mp4,4902791.mp4,4902777.mp4,.urlset/master.m3u8?Expires=1673564515&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly92LnZydi5jby9ldnMzLzUzODc2MDJkMjk0YmRmODIwNDdhYzA5OTAyYWE3NTE1L2Fzc2V0cy9jYTI1NTllOTE0ZmUxZDE2NzNlNGU5OGQ4NzFmZDIxOV8sNDkwMjgwNS5tcDQsNDkwMjgxMi5tcDQsNDkwMjc5OC5tcDQsNDkwMjc4NC5tcDQsNDkwMjc5MS5tcDQsNDkwMjc3Ny5tcDQsLnVybHNldC9tYXN0ZXIubTN1OCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTY3MzU2NDUxNX19fV19&Signature=Le~qULnGwE0LSbCX2yKoVTWkXGFmcOwlIuXWPhQEUWQewg9Al5RRCas6B1KmpMcQFVze9cOmBIE5KwJkE8cG7nKmmNVvEL4wGxTxOEkIyWZ6ToGLdauIdn2k0Tll4Q~xiVZKcAUrfeGSpA1pT3s6vmzA2VhfRQFMJqCbkPeRE9Gr~R4EOoN3E0B6j1S2iM-Ugo8TllDt0Iz21zO~plkXjOo5ge6NoFEK9rwCB~3TKba1nB47QKOcxE457Vnr~3w1ChzCAXoh32tJF-IOCoTMJANEDwVNTWzhQ1M9tOeLYW~NrXN6tf3UCTuX9vSPMrqlZ2TeRIUB~UCoyUJBMTjuig__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA' }, 19 | { 'type': 'adaptive_hls', 'audio_locale': 'ja-JP', 'hardsub_locale': '', 'url': 'https://v.vrv.co/evs3/5387602d294bdf82047ac09902aa7515/assets/ca2559e914fe1d1673e4e98d871fd219_,4902530.mp4,4902531.mp4,4902529.mp4,4902527.mp4,4902528.mp4,4902526.mp4,.urlset/master.m3u8?Expires=1673564515&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly92LnZydi5jby9ldnMzLzUzODc2MDJkMjk0YmRmODIwNDdhYzA5OTAyYWE3NTE1L2Fzc2V0cy9jYTI1NTllOTE0ZmUxZDE2NzNlNGU5OGQ4NzFmZDIxOV8sNDkwMjUzMC5tcDQsNDkwMjUzMS5tcDQsNDkwMjUyOS5tcDQsNDkwMjUyNy5tcDQsNDkwMjUyOC5tcDQsNDkwMjUyNi5tcDQsLnVybHNldC9tYXN0ZXIubTN1OCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTY3MzU2NDUxNX19fV19&Signature=gWVw6k7KsTwO4Zo7JCYEQsH34UkA-HeEBNsT6XFcbwCuv-L6laV9pwrVeNqBPfLPHKRrQfDb2F7liacLgXd3O5FSwXGZQEgJ5U4hjsacFtofgxKq-EYFTEqD2tyYA~1mGhhfY99y4hvFY7olWICngDYeVCaeUJuasseUXof7BR7yAbJRIA40Rrzch092eMOQoPXwzAmiryHYZI9s~96cU4B1zbKUWqQCmnkcN9J9xjKDmrSofR3gKo8elyaPYVwklglzYDM4IxO86DUUuZx5VwZJTUKj3FihUHChGecEO9ADKo2s1F5~aCYyioz169TMbylCj4NstV7YkoAud8o07Q__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA' } 20 | ]; 21 | // str=`https://pl.crunchyroll.com/evs1/db4c26cfee449ad7f08598c8bbf2eac4/assets/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,.urlset/manifest.mpd?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzMS9kYjRjMjZjZmVlNDQ5YWQ3ZjA4NTk4YzhiYmYyZWFjNC9hc3NldHMvODg0YzM2Mzk1ZDM0NjA2MmU2NjRkMjg1ZWM0YWE2ZWFfLDQwMDM3OTIubXA0LDQwMDM3OTYubXA0LDQwMDM3ODgubXA0LDQwMDM3ODAubXA0LDQwMDM3ODQubXA0LC51cmxzZXQvbWFuaWZlc3QubXBkIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNjE2NzE4MzgxfX19XX0_&Signature=Me9A1hTatQC-Z6MjkldrwqDThwgdnGAKp72auK1Qju1d-gAwPflihXZ3mLynCnxlV8bH6DgvkMZaMeaRBkoETAwvgjpDoarM~HOenEuERkmlICCq4UbwBtyTeDGrGsMTNiSo~-ia0z3nk~EmAxV0tSNfL6h-~NWvkeNBjK9TTkYw-6Led4f2lNRYCeQMAWTYVMYuxKHqCGitecd4Xn4DgepHnmH6qIyQk-Srt7oTj4Q4OTm5RAland42f8-6hpl18Ma9bGnA63wgRar23QXB3uvlLpewVLfI08CD1rYHjP6s62yELVTJMLRhQidIZ0MZfaMm3V80NtA4H9uW4RZsQw__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA 22 | // https://pl.crunchyroll.com/evs1/db4c26cfee449ad7f08598c8bbf2eac4/assets/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,.urlset/master.m3u8?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzMS9kYjRjMjZjZmVlNDQ5YWQ3ZjA4NTk4YzhiYmYyZWFjNC9hc3NldHMvODg0YzM2Mzk1ZDM0NjA2MmU2NjRkMjg1ZWM0YWE2ZWFfLDQwMDM3OTIubXA0LDQwMDM3OTYubXA0LDQwMDM3ODgubXA0LDQwMDM3ODAubXA0LDQwMDM3ODQubXA0LC51cmxzZXQvbWFzdGVyLm0zdTgiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE2MTY3MTgzODF9fX1dfQ__&Signature=WnHn5dl-VpQa64hD58bRKGielQImaXhQlV2RS-L6N07C7cSWUlbhSaWpImS7VnEZbt1hKMdTyBbAOVCoHsZ4-V-0KZ~9ms5PdSgrQHgxKlc5S4pLfFyaU6fAXkc7QzasN1Icu9oBpkdzs83TJi1jAi220b3ZL6a1PSH-rUQafXiKx89RtFcRwwy0mI71hSMvvbtYw2GGapK-6sti5EV6qpYhhZDltEsPvAmCQ~Z~~NHKxD1FL~7q66KTW301RVzzDAAaCKmsEX-lROKtdJLg~eGiCo9Lg6taemSYFr~T4k7OjyPC~qY5a5IOYyhxb46tIXHnKi-QoZbgb-5ka7k9sA__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA 23 | // https://pl.crunchyroll.com/evs1/cfc7fb015fd507d3fdfad53c10843713/assets/p/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,.urlset/manifest.mpd?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzMS9jZmM3ZmIwMTVmZDUwN2QzZmRmYWQ1M2MxMDg0MzcxMy9hc3NldHMvcC84ODRjMzYzOTVkMzQ2MDYyZTY2NGQyODVlYzRhYTZlYV8sNDAwMzc5Mi5tcDQsNDAwMzc5Ni5tcDQsNDAwMzc4OC5tcDQsNDAwMzc4MC5tcDQsNDAwMzc4NC5tcDQsLnVybHNldC9tYW5pZmVzdC5tcGQiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE2MTY3MTgzODF9fX1dfQ__&Signature=iV~LmCD09qB8Y2atJJIseCjX1VPPoMWG0KCZl~CcxJazIKIrkSNuZK8DyDIxi5bn1iO9d0iVERotBkV0BHY1S2q2hUKr05glajKPRYCg4yt6YV7~xn2eIY83iqu3PUpW4imzatKmKdrrtV8yoRMyIVfz2xmos8gT-aYjaFFI7ddu7nL9UEJ3h2lAte3zOPBL0cRuiF~znTLK4BujvKO2NQr4PMCDak5ikWccPaOBvirzuvg6DAqtzqI1h3N5WYtbPCR1SfKPP-jVs214ZX6iMAoSxVV1XbUBPr13tHQB4Xbu6f~72oR-~~UQFhdXVGJgvkGLmm8CZfW-zM7LcYFSvg__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA 24 | // https://pl.crunchyroll.com/evs1/cfc7fb015fd507d3fdfad53c10843713/assets/p/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,.urlset/master.m3u8?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzMS9jZmM3ZmIwMTVmZDUwN2QzZmRmYWQ1M2MxMDg0MzcxMy9hc3NldHMvcC84ODRjMzYzOTVkMzQ2MDYyZTY2NGQyODVlYzRhYTZlYV8sNDAwMzc5Mi5tcDQsNDAwMzc5Ni5tcDQsNDAwMzc4OC5tcDQsNDAwMzc4MC5tcDQsNDAwMzc4NC5tcDQsLnVybHNldC9tYXN0ZXIubTN1OCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTYxNjcxODM4MX19fV19&Signature=cdT1tFBH9BudyeZ~Cx9EgwyuETw-fCHpjuGLEtNXvcgjAAh0A8sCFondK00m~JgcZC2bH44AoJ7zwS0XVozd01wJK7WWqGDXeaqeJiA1xi7M2Q5iOHQE7K767CAPDEGWReV2f2OViWK2jAZM95ZJwhEEuPMvtEBXtEVbJ9ot9iz-fkf5RXkY0w3S4keObdluQ9gzs6dtBULM1ZxEoUqpbTWa4jTyMp04ytCM15kEWNlBwKhbIEnRzvSC0lJVts5x~V1aaRUGcHWwrxS5Q85QSbs2HEYGgCkXC2j9yDrPnLvdw6zAL69XCb9izlcmSqTVWXNPo7Cz1jI2o4dWFq9mQg__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA 25 | // https://pl.crunchyroll.com/evs1/cfc7fb015fd507d3fdfad53c10843713/assets/p/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,243319.txt,.urlset/master.m3u8?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzMS9jZmM3ZmIwMTVmZDUwN2QzZmRmYWQ1M2MxMDg0MzcxMy9hc3NldHMvcC84ODRjMzYzOTVkMzQ2MDYyZTY2NGQyODVlYzRhYTZlYV8sNDAwMzc5Mi5tcDQsNDAwMzc5Ni5tcDQsNDAwMzc4OC5tcDQsNDAwMzc4MC5tcDQsNDAwMzc4NC5tcDQsMjQzMzE5LnR4dCwudXJsc2V0L21hc3Rlci5tM3U4IiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNjE2NzE4MzgxfX19XX0_&Signature=EOL6E8bH5BnX4~740OyVLPwsVL6CDM3y1W39ByWukP48qyyAxAC4OSLlbQDXxGZebgkgzDCbY0Qw8Mh5qsQTg-uuGQ7l-6cQlBQs7eXu0GPwKOjD7f2sUE3dpDufQh2lQo2gDsMC6Stgf5c2h8-HXhJMZPqOrAevoQj6xQCbgxuEODiLI7bcjPOqulXmANbMN21cN80Yo2dEqYFQUAZ-kCa5kZramn5rZSPeH5HTVfvITDnwdYMqTCRcdSJ5CeTLlqGDBgVg9kBlx6sv4IkPZsYqvDCbtagRmoHdfRPEgFmKanFX4tzD8f0GlF-nBhYDFayr8pCN5K4SlIai~MBMUw__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA 26 | // https://pl.crunchyroll.com/evs1/db4c26cfee449ad7f08598c8bbf2eac4/assets/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,243319.txt,.urlset/master.m3u8?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzMS9kYjRjMjZjZmVlNDQ5YWQ3ZjA4NTk4YzhiYmYyZWFjNC9hc3NldHMvODg0YzM2Mzk1ZDM0NjA2MmU2NjRkMjg1ZWM0YWE2ZWFfLDQwMDM3OTIubXA0LDQwMDM3OTYubXA0LDQwMDM3ODgubXA0LDQwMDM3ODAubXA0LDQwMDM3ODQubXA0LDI0MzMxOS50eHQsLnVybHNldC9tYXN0ZXIubTN1OCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTYxNjcxODM4MX19fV19&Signature=C0tjTCjl5E4xb1lpKzOZAbBbgMgifArEAUgdA1Jam-3d11qBs5TFnXporUgK5YVOV-mIT3xRmysjl7thHfMSXwlejWCSKxaJMe4A80NJIJ65NedPyCYEdr7J7662ffZ02opkEXMrrz9oWcT7b~orkh6H7oF7RfMlHxJ5z71473Pz~WARsdS5dhdyyw4lln7QvyDOebxBp0aaumXW2w6oD2y9GT~~egyMRYIU6Sh1i0c9jyKXtZJAXQBIDv6~R1~RPhxrxtyPVYfYV2DfqxNeZ18Llma-VxJvC1w~mi34b6OqWQQyv9~KxbPrabJPsuQZvo7VjRfFGd3~5hm5-2CODQ__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA 27 | // https://v.vrv.co/evs1/db4c26cfee449ad7f08598c8bbf2eac4/assets/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,.urlset/manifest.mpd?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly92LnZydi5jby9ldnMxL2RiNGMyNmNmZWU0NDlhZDdmMDg1OThjOGJiZjJlYWM0L2Fzc2V0cy84ODRjMzYzOTVkMzQ2MDYyZTY2NGQyODVlYzRhYTZlYV8sNDAwMzc5Mi5tcDQsNDAwMzc5Ni5tcDQsNDAwMzc4OC5tcDQsNDAwMzc4MC5tcDQsNDAwMzc4NC5tcDQsLnVybHNldC9tYW5pZmVzdC5tcGQiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE2MTY3MTgzODF9fX1dfQ__&Signature=DH6Kd9fIos44dxBj-FXvNwXHer5Qtnv-QH4kt5Oml2EhOM7XAQtoMZoOOhzKMX2r7eZheHgFLsUXuQroI6aEENpoJZYeFCRqYUiJZVb1UDOLFUM4JTr8hwFPU8rdGMQ5ggLAj0IzgLpAQsWnOcrn-rTSysWPN~ZPQaHyFCL~eOmD05tz79y0M2-TpX9C6mEWUMeEOVXlZnHRTK1Q8LhcvNKnQ450XmHGV~708R5-P4xfvzccG~5gdzPJLbSS-qQedJlZ888nXypRok~Kz7SNGsV~KaeeAUBBXamKp0PPTJ0ik-jS3kavfKj-gqhRVUAlyRudoCqLDuYWSYFbMgbmXA__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA 28 | // https://v.vrv.co/evs1/db4c26cfee449ad7f08598c8bbf2eac4/assets/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,.urlset/master.m3u8?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly92LnZydi5jby9ldnMxL2RiNGMyNmNmZWU0NDlhZDdmMDg1OThjOGJiZjJlYWM0L2Fzc2V0cy84ODRjMzYzOTVkMzQ2MDYyZTY2NGQyODVlYzRhYTZlYV8sNDAwMzc5Mi5tcDQsNDAwMzc5Ni5tcDQsNDAwMzc4OC5tcDQsNDAwMzc4MC5tcDQsNDAwMzc4NC5tcDQsLnVybHNldC9tYXN0ZXIubTN1OCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTYxNjcxODM4MX19fV19&Signature=NnTOStyuce-dVPWc6monjxjWYBhlFoemHjGc8s3q1snIhi5qveF4tfqT~XZ3b7H93~KFQeDftuXhg8KFbWJUsjefMBiTyJcjayorj6lIBgMiNCuTtT2i-qSHYLENfffK3TFYrC51CmZTOkI6ngfvlKD~ajWr7L1N0sh8Nj4hH~pnpmpyg4SEheaJ~xUw87exysl42owVe1yiFj2ozUDh9b0O90xdIZhvgjkPxEC6EOedDb7ANWLu8eQ4q0Y-N-gWPATLo0Dht-pNTp0NMGpjGn6vNlmuuoX5uQJP02bPrb4HIXuuuu4OgkJJE~SwvZiqjuZ5BC7gCCsJs1NFjGcnow__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA 29 | // https://v.vrv.co/evs1/cfc7fb015fd507d3fdfad53c10843713/assets/p/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,.urlset/manifest.mpd?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly92LnZydi5jby9ldnMxL2NmYzdmYjAxNWZkNTA3ZDNmZGZhZDUzYzEwODQzNzEzL2Fzc2V0cy9wLzg4NGMzNjM5NWQzNDYwNjJlNjY0ZDI4NWVjNGFhNmVhXyw0MDAzNzkyLm1wNCw0MDAzNzk2Lm1wNCw0MDAzNzg4Lm1wNCw0MDAzNzgwLm1wNCw0MDAzNzg0Lm1wNCwudXJsc2V0L21hbmlmZXN0Lm1wZCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTYxNjcxODM4MX19fV19&Signature=ofK5Lo6oBgV5MT0Z35DbrWH49iAW6SwOn0IqF0Vty4uhpOO3XgL49WImIUw-iD3Noq9b1EduSyY3qCZJStiXsctlG-pkKB0jv3gtFWbwzwZ4cKBEivhlafC5Qn-ZHmkb5rLj1aVWONEe4tDnayOxTFOXBJTDq~mnjtds52N5jK2mftpsFs~ky2JdrUU-LmEWIA-Gys809Poi7reVu2b9hqevOoyg35TgmatrSYzD3EpbpDGWeDJK6FfFod84jLebbj5CzFoiwCSQsdkbe633ZiIPDxp3Ahe-K0aQSJF87atYUqeJxiuPUVyJ2mBLY00SoXo8ME3qoQYPIN7s0UyKzg__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA 30 | // https://v.vrv.co/evs1/cfc7fb015fd507d3fdfad53c10843713/assets/p/884c36395d346062e664d285ec4aa6ea_,4003792.mp4,4003796.mp4,4003788.mp4,4003780.mp4,4003784.mp4,.urlset/master.m3u8?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly92LnZydi5jby9ldnMxL2NmYzdmYjAxNWZkNTA3ZDNmZGZhZDUzYzEwODQzNzEzL2Fzc2V0cy9wLzg4NGMzNjM5NWQzNDYwNjJlNjY0ZDI4NWVjNGFhNmVhXyw0MDAzNzkyLm1wNCw0MDAzNzk2Lm1wNCw0MDAzNzg4Lm1wNCw0MDAzNzgwLm1wNCw0MDAzNzg0Lm1wNCwudXJsc2V0L21hc3Rlci5tM3U4IiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNjE2NzE4MzgxfX19XX0_&Signature=ItMbS6Iy1TZz~T3rOIbzBCxY6SQv~NR9WHs3bv1l9rukspAKmDXUP9t8kYMbRwglzbf4xAEFPxvt0m9mQs8uWnaQSatYYqajc1E8GCT9C6wjVhJzYZRRBnW-meqbivpelx-Un~sU9QOcLrCoXjIJfAM6zTmf5uPSHpuzL5NezAkrnzqq41v1z201shju19N9KT68pcAWODz4rrLjIUw5UFk5hFTRR6cmXokVDJ1VkDeaTihZXuIrnc3z-v946Bw~A9hlkUpEQcOGdWgcAqBxVGh6YQ7wDXE88QIaVBDkXpbzrzShT0J7pfZNXfKM0s-m5LYtYiOxHMUGsiygYZTifA__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA`; 31 | 32 | // works=`https://pl.crunchyroll.com/evs1/cfc7fb015fd507d3fdfad53c10843713/assets/p/884c36395d346062e664d285ec4aa6ea_,4003435.mp4,4003436.mp4,4003434.mp4,4003432.mp4,4003433.mp4,.urlset/manifest.mpd?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzMS9jZmM3ZmIwMTVmZDUwN2QzZmRmYWQ1M2MxMDg0MzcxMy9hc3NldHMvcC84ODRjMzYzOTVkMzQ2MDYyZTY2NGQyODVlYzRhYTZlYV8sNDAwMzQzNS5tcDQsNDAwMzQzNi5tcDQsNDAwMzQzNC5tcDQsNDAwMzQzMi5tcDQsNDAwMzQzMy5tcDQsLnVybHNldC9tYW5pZmVzdC5tcGQiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE2MTY3MTgzODF9fX1dfQ__&Signature=L39YqmXEJKfKwowvSTtiYhLLkbGCJBxjPwK8AtK1gbosPUCm0Xa8PLoFvkROFZIKv0q~O12e4ajWOePEVcXjzkhMZXNo2z7HWKYjq7XpmCw3EAAILEguuMQ-T8w1wKVeFfBiGzDR1yKl7ivORSxTC8zarFaMKNl5yY--WDqiyobsEeCA-drKp4pqC9LX1YDI8fhKYazBSnM4GSobnetwUje6Xo2GJgoki8KWjaO1VxpmYZzYnwadZNnuhx1CMu9fLyWYzR3I7hpUf2haSL9mCt6PIxWIVLwBiWiLWblMqfp6UaO2KYfMj1Pw41c0388YZNUuzf9mI1e6S6gbVprddA__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA` 33 | // urls = str.split('\n'); 34 | 35 | // drm_adaptive_dash || drm_adaptive_hls 36 | for (let s of streams) 37 | if (s.format !== 'erm_adaptive_dash$$$$$$') { 38 | let manifest = s.url.replace('v.vrv.co', 'dl.v.vrv.co').replace('pl.crunchyroll.com', 'dl.v.vrv.co').replace('dl.v.vrv.co', 'v.vrv.co').replace('master.m3u8', 'manifest.mpd').replace('evs1', 'evs').replace('assets/8', 'assets/p/8'); 39 | manifest = remakeUrl(s.url).replace('master.m3u8', 'manifest.mpd'); 40 | //.replace('assets/p/', 'assets/') 41 | // AAA.replace("master.m3u8", "manifest.mpd").replace(AAA.split("/")[2], "dl.v.vrv.co").replace("evs1", "evs"); 42 | mafinest = s.url.replace('v.vrv.co', 'fy.v.vrv.co').replace('master.m3u8', 'manifest.mpd').replace('evs1', 'evs'); 43 | 44 | lookup(manifest); 45 | } 46 | //lookup('https://pl.crunchyroll.com/evs/6b243432d3d162b08e3e3c256910a358/assets/6b243432d3d162b08e3e3c256910a358_4015612.mp4/clipFrom/0000/clipTo/120000/manifest.mpd?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzLzZiMjQzNDMyZDNkMTYyYjA4ZTNlM2MyNTY5MTBhMzU4L2Fzc2V0cy82YjI0MzQzMmQzZDE2MmIwOGUzZTNjMjU2OTEwYTM1OF80MDE1NjEyLm1wNC9jbGlwRnJvbS8wMDAwL2NsaXBUby8xMjAwMDAvbWFuaWZlc3QubXBkIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNjE2OTQ3MDU0fX19XX0_&Signature=WkqyfbEuAxDdnD4cKSf8xRZV2gDXmgmbitdauqz8l6QdXrt3Aq9GOohJbIqhRltJa~VSy~wmKwlmheJNSdy8HBais0wMOl~dOWHX3QqbhouU2Liet9RB0V7bhN-0VbyBDY06Cx1f22gbalf9GWsA1lDqvA419SvPLr8NQXqB45YujNbnrNKRtkQYJjvuwW-uJbPdvdTgQUtxm3EqBvzIRKK9ij6dClf20AOgBMXNAEk0YL-mOegp6t9btQBMe~KRc~lN3u-JoZ~0ghYvkM3U-tc2b0xf5RHUE7hq-GvAHJX6j8HHYAdSqOcl4cjCCP8xU5bKZP-X9n4EzrmUyvEvsg__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA'); 47 | 48 | works = [1, 3, 8, 9]; 49 | works = [1, 6, 7, 8]; 50 | //lookup(streams[1].url) 51 | 52 | const r = { 0: '720p', 1: '1080p', 2: '480p', 3: '360p', 4: '240p' }; 53 | 54 | let curfs = 0; 55 | function lookup(current_url) { 56 | video_dash_playlist_url_old = current_url; //.replace('pl.crunchyroll.com', 'v.vrv.co'); 57 | video_dash_playlist_url = current_url; 58 | 59 | axios 60 | .get(video_dash_playlist_url_old) 61 | .then(result => { 62 | const data = result.data; 63 | fs.writeFileSync('./fs' + curfs++ + '.xml', data); 64 | 65 | const auth = pegaString(data, '\\.(?:mp4|m4s)\\?', '"', 0); 66 | let params_download_link = htmlDecode('?' + auth); 67 | params_download_link = params_download_link.replace(/&t=.*$/, ''); 68 | params_download_link = params_download_link.replace(/(&|\?)Expires=\d+&/, '$1'); 69 | if (!params_download_link) return; 70 | 71 | function linkDownload(id) { 72 | let video_code = video_dash_playlist_url.split(',')[id + 2]; 73 | let video_mp4_url = video_dash_playlist_url.split(/_(?:,|\*)/)[0] + '_' + video_code + params_download_link; 74 | let links = []; 75 | 76 | // ALTERNATE 77 | video_mp4_url = fixPolicy(video_mp4_url, '1769000').replace('120000', '1769000'); 78 | //video_mp4_url = fixPolicy('https://pl.crunchyroll.com/evs/6b243432d3d162b08e3e3c256910a358/assets/6b243432d3d162b08e3e3c256910a358_4015612.mp4/clipFrom/0000/clipTo/1769000/manifest.mpd?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzLzZiMjQzNDMyZDNkMTYyYjA4ZTNlM2MyNTY5MTBhMzU4L2Fzc2V0cy82YjI0MzQzMmQzZDE2MmIwOGUzZTNjMjU2OTEwYTM1OF80MDE1NjEyLm1wNC9jbGlwRnJvbS8wMDAwL2NsaXBUby8xMjAwMDAvbWFuaWZlc3QubXBkIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNjE2OTQ3MDU0fX19XX0_&Signature=WkqyfbEuAxDdnD4cKSf8xRZV2gDXmgmbitdauqz8l6QdXrt3Aq9GOohJbIqhRltJa~VSy~wmKwlmheJNSdy8HBais0wMOl~dOWHX3QqbhouU2Liet9RB0V7bhN-0VbyBDY06Cx1f22gbalf9GWsA1lDqvA419SvPLr8NQXqB45YujNbnrNKRtkQYJjvuwW-uJbPdvdTgQUtxm3EqBvzIRKK9ij6dClf20AOgBMXNAEk0YL-mOegp6t9btQBMe~KRc~lN3u-JoZ~0ghYvkM3U-tc2b0xf5RHUE7hq-GvAHJX6j8HHYAdSqOcl4cjCCP8xU5bKZP-X9n4EzrmUyvEvsg__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA', '1769000'); 79 | //video_dash_url = 'https://pl.crunchyroll.com/evs/6b243432d3d162b08e3e3c256910a358/assets/6b243432d3d162b08e3e3c256910a358_4015612.mp4,.urlset/manifest.mpd?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cCo6Ly9wbC5jcnVuY2h5cm9sbC5jb20vZXZzLzZiMjQzNDMyZDNkMTYyYjA4ZTNlM2MyNTY5MTBhMzU4L2Fzc2V0cy82YjI0MzQzMmQzZDE2MmIwOGUzZTNjMjU2OTEwYTM1OF80MDE1NjEyLm1wNC9jbGlwRnJvbS8wMDAwL2NsaXBUby8xMjAwMDAvbWFuaWZlc3QubXBkIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNjE2OTQ3MDU0fX19XX0_&Signature=WkqyfbEuAxDdnD4cKSf8xRZV2gDXmgmbitdauqz8l6QdXrt3Aq9GOohJbIqhRltJa~VSy~wmKwlmheJNSdy8HBais0wMOl~dOWHX3QqbhouU2Liet9RB0V7bhN-0VbyBDY06Cx1f22gbalf9GWsA1lDqvA419SvPLr8NQXqB45YujNbnrNKRtkQYJjvuwW-uJbPdvdTgQUtxm3EqBvzIRKK9ij6dClf20AOgBMXNAEk0YL-mOegp6t9btQBMe~KRc~lN3u-JoZ~0ghYvkM3U-tc2b0xf5RHUE7hq-GvAHJX6j8HHYAdSqOcl4cjCCP8xU5bKZP-X9n4EzrmUyvEvsg__&Key-Pair-Id=APKAJMWSQ5S7ZB3MF5VA'; 80 | //video_dash_url = video_dash_url.replace(video_dash_url.split("_")[0] + "_", video_dash_url.split("_")[0] + "_,"); 81 | //video_mp4_url = video_dash_url 82 | 83 | links.push(video_mp4_url); 84 | links.push(normalize(video_mp4_url)); 85 | links.push(useEvs1(video_mp4_url, true)); 86 | links.push(useEvs1(video_mp4_url, false)); 87 | links.push(useEvs1(normalize(video_mp4_url), true)); 88 | links.push(useEvs1(normalize(video_mp4_url), false)); 89 | links.push(useP(video_mp4_url, false)); 90 | links.push(useP(normalize(video_mp4_url), false)); 91 | links.push(useP(useEvs1(video_mp4_url, true), false)); 92 | links.push(useP(useEvs1(video_mp4_url, false), false)); 93 | links.push(useP(useEvs1(normalize(video_mp4_url), true), false)); 94 | links.push(useP(useEvs1(normalize(video_mp4_url), false), false)); 95 | links.push(useP(video_mp4_url, true)); 96 | links.push(useP(normalize(video_mp4_url), true)); 97 | links.push(useP(useEvs1(video_mp4_url, true), true)); 98 | links.push(useP(useEvs1(video_mp4_url, false), true)); 99 | links.push(useP(useEvs1(normalize(video_mp4_url), true), true)); 100 | links.push(useP(useEvs1(normalize(video_mp4_url), false), true)); 101 | 102 | // DIRECT 103 | links.push(video_mp4_url); 104 | links.push(useP(useEvs1(normalize(video_mp4_url), true), false)); 105 | links.push(useP(useEvs1(video_mp4_url, true), false)); 106 | links.push(remakeUrl(video_mp4_url)); 107 | 108 | if (!isValid(video_mp4_url) && false) { 109 | console.log('---------------- BAD POLICY ----------------'); 110 | console.log('url: ', getClean(video_mp4_url)); 111 | console.log('policy:', getPolicy(video_mp4_url)); 112 | console.log('p: ', getPolicy(video_mp4_url, 4) === getClean(video_mp4_url, 4)); 113 | return; 114 | } 115 | 116 | let i = 0; 117 | for (link of links) { 118 | const staticlink = link.replace('http*', 'https'); //.replace('/120000/', '/1769000/'); 119 | setTimeout(() => { 120 | setTimeout(() => search(video_dash_playlist_url, staticlink.replace(/(?:v\.vrv\.co|pl\.crunchyroll\.com)/, 'v.vrv.co')), 0); 121 | setTimeout(() => search(video_dash_playlist_url, staticlink.replace(/(?:v\.vrv\.co|pl\.crunchyroll\.com)/, 'pl.crunchyroll.com')), 500); 122 | setTimeout(() => search(video_dash_playlist_url, staticlink.replace(/(?:v\.vrv\.co|pl\.crunchyroll\.com)/, 'dl.v.vrv.co')), 1000); 123 | setTimeout(() => search(video_dash_playlist_url, staticlink.replace(/(?:v\.vrv\.co|pl\.crunchyroll\.com)/, 'a-vrv.akamaized.net')), 1500); 124 | }, i * 2000); 125 | i++; 126 | } 127 | } 128 | 129 | //for (id in r) 130 | linkDownload(1); 131 | }) 132 | .catch(err => { 133 | console.log('---------------- EXCEPTION ----------------'); 134 | console.log('isValid:', isValid(video_dash_playlist_url_old)); 135 | console.log('url: ', video_dash_playlist_url_old); 136 | console.log('throws: ', err); 137 | }); 138 | } 139 | 140 | function search(manifest, video) { 141 | axios 142 | .get(video) 143 | .then(r => { 144 | console.log('-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-! FOUND !-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-'); 145 | console.log(video); 146 | }) 147 | .catch(err => { 148 | console.log('---------------- NOT FOUND ----------------'); 149 | //console.log(video); 150 | console.log('playlist:', getClean(manifest)); 151 | console.log('to: ', getClean(video)); 152 | console.log('code: ', err.response?.status ?? 0); 153 | }); 154 | } 155 | 156 | function isManifest(url) { 157 | return url.includes('manifest.mpd'); 158 | } 159 | 160 | function useP(url, condition) { 161 | if (condition) return url.replace('/assets/p/', '/assets/'); 162 | else return url.replace('/p/', '/'); 163 | } 164 | 165 | function useEvs1(url, condition) { 166 | if (condition) return url.replace('/evs/', '/evs1/'); 167 | else return url.replace('/evs1/', '/evs/'); 168 | } 169 | 170 | function normalize(url) { 171 | return url.replace(getClean(url, 4), getPolicy(url, 4)); 172 | } 173 | 174 | function isValid(url) { 175 | try { 176 | const policystr = getPolicy(url).slice(0, -1); 177 | return getClean(url).startsWith(policystr); 178 | } catch (err) { 179 | return false; 180 | } 181 | } 182 | 183 | function getClean(url, slashPos) { 184 | const resource = pegaString(url, '^', '\\?'); 185 | if (slashPos) return resource.split('/')[slashPos]; 186 | return resource; 187 | } 188 | 189 | function getPolicy(url, slashPos) { 190 | const str = atob(pegaString(url, 'Policy=', '_&')).replace('http*', 'https').trim(); 191 | const stt = JSON.parse(str); 192 | const resource = stt.Statement[0].Resource; 193 | if (slashPos) return resource.split('/')[slashPos]; 194 | return resource; 195 | } 196 | 197 | function fixPolicy(url, toClip) { 198 | const policy = pegaString(url, 'Policy=', '_&'); 199 | const str = atob(policy) 200 | .replace('/120000/', '/' + toClip + '/') 201 | .trim(); 202 | const newPolicy = 'Policy=' + btoa(str).replaceAll('=', '_') + '&'; 203 | return url.replace(policy, newPolicy); 204 | } 205 | 206 | function remakeUrl(url) { 207 | const policy = getPolicy(url); 208 | return policy + '?' + url.replace(/^.*\?/, ''); 209 | } 210 | 211 | function htmlDecode(input) { 212 | const decoded = input.replaceAll('&', '&'); 213 | return decoded; 214 | } 215 | 216 | function pegaString(str, first_character, last_character, pos = 0) { 217 | if (str.match(first_character + '(.*?)' + last_character) == null) { 218 | return ''; 219 | } else { 220 | matches = str.matchAll(first_character + '(.*?)' + last_character); 221 | while (pos-- > 0) matches.next(); 222 | new_str = matches.next().value[1].trim(); 223 | return new_str; 224 | } 225 | } 226 | 227 | function getPolicy(url, slashPos) { 228 | const token = pegaString(url, 'Policy=', '&'); 229 | console.log(token); 230 | const str = atob(token).trim(); 231 | console.log(str); 232 | const stt = JSON.parse(str); 233 | const resource = stt.Statement[0].Resource; 234 | if (slashPos) return resource.split('/')[slashPos]; 235 | return resource; 236 | } 237 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Crunchyroll Player 5 | 6 | 7 | 8 | 9 | 10 | 19 | 20 | 21 | 22 | 23 |
24 |
25 | 26 | 27 | 28 | 29 | 30 |
31 | 44 |
45 |
Seu video iniciara em instantes (^-^)Aguardando dados da stream..
46 |
47 |
48 | 76 | 97 |
98 | 99 | 100 | 101 | --------------------------------------------------------------------------------