diff --git a/README-EN.md b/README-EN.md index d9419e58..92fb3902 100644 --- a/README-EN.md +++ b/README-EN.md @@ -50,7 +50,7 @@ You can see all the restrictions related to site support in [wiki](https://githu - **[Twitch](https://www.twitch.tv)** - **[VK](https://vk.com)** - **[OK](https://ok.ru/)** -- **[[⚠️] Twitter](https://twitter.com/)** +- **[Twitter](https://twitter.com/)** - **[9GAG](https://9gag.com/gag/)** - **[Rutube](https://rutube.ru/)** - **[Bilibili](https://bilibili.com/)** @@ -61,14 +61,14 @@ You can see all the restrictions related to site support in [wiki](https://githu - **[Bitchute](https://www.bitchute.com/)** - **[Coursera](https://www.coursera.org/)** - **[[⚠️] Udemy](https://www.udemy.com/)** -- **[[⚠️] Facebook\*](https://facebook.com/)** +- **[Facebook\*](https://facebook.com/)** - **[TikTok](https://tiktok.com/)** - **[Rumble](https://rumble.com/)** - **[EPorner](https://www.eporner.com/)** - **[Peertube](https://tube.shanti.cafe/)** - **[Dailymotion](https://www.dailymotion.com/)** - **[Trovo](https://trovo.live/)** -- **[[⚠️] Yandex Disk](https://disk.yandex.ru/)** +- **[Yandex Disk](https://disk.yandex.ru/)** - **[Google Drive](https://drive.google.com/)** - **[Banned Video](https://banned.video/)** - **[Weverse](https://weverse.io/)** diff --git a/README.md b/README.md index 09c1959f..22114d40 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ - **[Twitch](https://www.twitch.tv)** - **[VK](https://vk.com)** - **[OK](https://ok.ru/)** -- **[[⚠️] Twitter](https://twitter.com/)** +- **[Twitter](https://twitter.com/)** - **[9GAG](https://9gag.com/gag/)** - **[Rutube](https://rutube.ru/)** - **[Bilibili](https://bilibili.com/)** @@ -62,14 +62,14 @@ - **[Bitchute](https://www.bitchute.com/)** - **[Coursera](https://www.coursera.org/)** - **[[⚠️] Udemy](https://www.udemy.com/)** -- **[[⚠️] Facebook\*](https://facebook.com/)** +- **[Facebook\*](https://facebook.com/)** - **[TikTok](https://tiktok.com/)** - **[Rumble](https://rumble.com/)** - **[EPorner](https://www.eporner.com/)** - **[Peertube](https://tube.shanti.cafe/)** - **[Dailymotion](https://www.dailymotion.com/)** - **[Trovo](https://trovo.live/)** -- **[[⚠️] Yandex Disk](https://disk.yandex.ru/)** +- **[Yandex Disk](https://disk.yandex.ru/)** - **[Google Drive](https://drive.google.com/)** - **[Banned Video](https://banned.video/)** - **[Weverse](https://weverse.io/)** diff --git a/changelog.md b/changelog.md index 239c4535..61fdca48 100644 --- a/changelog.md +++ b/changelog.md @@ -22,6 +22,19 @@ - Добавлена возможность выбрать формат загружаемых субтитров - Добавлено округление до целого процента в слайдере "Уменьшить громкость видео до" - Добавлена возможность включить загрузку аудио дорожки и субтитров с названием видео, если расширение его нашло (#791) +- Добавлена возможность включить обход Media CSP через расширение (включено по умолчанию, если браузер поддерживает WebAudio), а не удалять его полностью через Tampermonkey или какие-либо другие расширения, что является не очень безопасным вариантом. Работает, только, для ниже перечисленных веб-сайтов. Если вы нашли сайт, который необходимо добавить в список для обхода Media CSP - создайте Issues. + + - "linkedin", + - "sap", + - "apple_developer", + - "xvideos", + - "twitter", + - "facebook", + - "yandexdisk", + - "reddit", + - "invidious", + - "piped" + - Добавлено автоопределение возвращаемого типа данных из LocalStorage, если присутствует стандартное значение - Убрано выставление языка `auto` по умолчанию для Invidious и Piped - Автосгенериванные субтитры с YouTube, теперь, используют уже существующие токены, а не генерируют новые diff --git a/dist/vot-min.user.js b/dist/vot-min.user.js index 3e49f1cf..479a4f9d 100644 --- a/dist/vot-min.user.js +++ b/dist/vot-min.user.js @@ -170,7 +170,7 @@ // ==/UserScript== /*! For license information please see vot-min.user.js.LICENSE.txt */ -(()=>{var t={"./src/styles/main.scss":()=>{GM_addStyle('.vot-button{--vot-helper-theme:var(--vot-theme-rgb,var(--vot-primary-rgb,33,150,243));--vot-helper-ontheme:var(--vot-ontheme-rgb,var(--vot-onprimary-rgb,255,255,255));box-sizing:border-box;vertical-align:middle;text-align:center;text-overflow:ellipsis;color:rgb(var(--vot-helper-ontheme));background-color:rgb(var(--vot-helper-theme));font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system);cursor:pointer;border:none;border-radius:4px;outline:none;min-width:64px;height:36px;padding:0 16px;font-size:14px;font-weight:500;line-height:36px;transition:box-shadow .2s;display:inline-block;position:relative;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.vot-button[hidden]{display:none!important}.vot-button::-moz-focus-inner{border:none}.vot-button:before,.vot-button:after{content:"";border-radius:inherit;opacity:0;position:absolute;top:0;bottom:0;left:0;right:0}.vot-button:before{background-color:rgb(var(--vot-helper-ontheme));transition:opacity .2s}.vot-button:after{background:radial-gradient(circle,currentColor 1%,#0000 1%) 50%/10000% 10000% no-repeat;transition:opacity 1s,background-size .5s}.vot-button:hover{box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.vot-button:hover:before{opacity:.08}.vot-button:active{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.vot-button:active:after{opacity:.32;background-size:100% 100%;transition:background-size}.vot-button[disabled=true]{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.12);color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);box-shadow:none;cursor:initial}.vot-button[disabled=true]:before,.vot-button[disabled=true]:after{opacity:0}.vot-outlined-button{--vot-helper-theme:var(--vot-theme-rgb,var(--vot-primary-rgb,33,150,243));box-sizing:border-box;border:1px solid;border-color:rgba(var(--vot-onsurface-rgb,0,0,0),.24);vertical-align:middle;text-align:center;text-overflow:ellipsis;color:rgb(var(--vot-helper-theme));font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system);cursor:pointer;background-color:#0000;border-radius:4px;outline:none;min-width:64px;height:36px;margin:0;padding:0 16px;font-size:14px;font-weight:500;line-height:34px;display:inline-block;position:relative}.vot-outlined-button[hidden]{display:none!important}.vot-outlined-button::-moz-focus-inner{border:none}.vot-outlined-button:before,.vot-outlined-button:after{content:"";opacity:0;border-radius:3px;position:absolute;top:0;bottom:0;left:0;right:0}.vot-outlined-button:before{background-color:rgb(var(--vot-helper-theme));transition:opacity .2s}.vot-outlined-button:after{background:radial-gradient(circle,currentColor 1%,#0000 1%) 50%/10000% 10000% no-repeat;transition:opacity 1s,background-size .5s}.vot-outlined-button:hover:before{opacity:.04}.vot-outlined-button:active:after{opacity:.16;background-size:100% 100%;transition:background-size}.vot-outlined-button[disabled=true]{color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);cursor:initial;background-color:#0000}.vot-outlined-button[disabled=true]:before,.vot-outlined-button[disabled=true]:after{opacity:0}.vot-text-button{--vot-helper-theme:var(--vot-theme-rgb,var(--vot-primary-rgb,33,150,243));box-sizing:border-box;vertical-align:middle;text-align:center;text-overflow:ellipsis;color:rgb(var(--vot-helper-theme));font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system);cursor:pointer;background-color:#0000;border:none;border-radius:4px;outline:none;min-width:64px;height:36px;margin:0;padding:0 8px;font-size:14px;font-weight:500;line-height:36px;display:inline-block;position:relative}.vot-text-button[hidden]{display:none!important}.vot-text-button::-moz-focus-inner{border:none}.vot-text-button:before,.vot-text-button:after{content:"";border-radius:inherit;opacity:0;position:absolute;top:0;bottom:0;left:0;right:0}.vot-text-button:before{background-color:rgb(var(--vot-helper-theme));transition:opacity .2s}.vot-text-button:after{background:radial-gradient(circle,currentColor 1%,#0000 1%) 50%/10000% 10000% no-repeat;transition:opacity 1s,background-size .5s}.vot-text-button:hover:before{opacity:.04}.vot-text-button:active:after{opacity:.16;background-size:100% 100%;transition:background-size}.vot-text-button[disabled=true]{color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);cursor:initial;background-color:#0000}.vot-text-button[disabled=true]:before,.vot-text-button[disabled=true]:after{opacity:0}.vot-icon-button{--vot-helper-onsurface:rgba(var(--vot-onsurface-rgb,0,0,0),.87);box-sizing:border-box;vertical-align:middle;text-align:center;text-overflow:ellipsis;fill:var(--vot-helper-onsurface);color:var(--vot-helper-onsurface);font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system);cursor:pointer;background-color:#0000;border:none;border-radius:50%;outline:none;width:36px;height:36px;margin:0;padding:0;font-size:14px;font-weight:500;line-height:36px;display:inline-block;position:relative}.vot-icon-button[hidden]{display:none!important}.vot-icon-button::-moz-focus-inner{border:none}.vot-icon-button:before,.vot-icon-button:after{content:"";border-radius:inherit;opacity:0;position:absolute;top:0;bottom:0;left:0;right:0}.vot-icon-button:before{background-color:var(--vot-helper-onsurface);transition:opacity .2s}.vot-icon-button:after{background:radial-gradient(circle,currentColor 1%,#0000 1%) 50%/10000% 10000% no-repeat;transition:opacity .3s,background-size .4s}.vot-icon-button:hover:before{opacity:.04}.vot-icon-button:active:after{opacity:.32;background-size:100% 100%;transition:background-size,opacity}.vot-icon-button[disabled=true]{color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);fill:rgba(var(--vot-onsurface-rgb,0,0,0),.38);cursor:initial;background-color:#0000}.vot-icon-button[disabled=true]:before,.vot-icon-button[disabled=true]:after{opacity:0}.vot-textfield{display:inline-block;--vot-helper-theme:rgb(var(--vot-theme-rgb,var(--vot-primary-rgb,33,150,243)))!important;--vot-helper-safari1:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important;--vot-helper-safari2:rgba(var(--vot-onsurface-rgb,0,0,0),.6)!important;--vot-helper-safari3:rgba(var(--vot-onsurface-rgb,0,0,0),.87)!important;font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system)!important;text-align:start!important;padding-top:6px!important;font-size:16px!important;line-height:1.5!important;position:relative!important}.vot-textfield[hidden]{display:none!important}.vot-textfield>input,.vot-textfield>textarea{box-sizing:border-box!important;border-style:solid!important;border-width:1px!important;border-color:transparent var(--vot-helper-safari2)var(--vot-helper-safari2)!important;height:inherit!important;color:rgba(var(--vot-onsurface-rgb,0,0,0),.87)!important;-webkit-text-fill-color:currentColor!important;font-family:inherit!important;font-size:inherit!important;line-height:inherit!important;caret-color:var(--vot-helper-theme)!important;background-color:#0000!important;border-radius:4px!important;width:100%!important;margin:0!important;padding:15px 13px!important;transition:border .2s,box-shadow .2s!important;box-shadow:inset 1px 0 #0000,inset -1px 0 #0000,inset 0 -1px #0000!important}.vot-textfield>input:not(:focus):not(.vot-show-placeholer)::-moz-placeholder{color:#0000!important}.vot-textfield>textarea:not(:focus):not(.vot-show-placeholer)::-moz-placeholder{color:#0000!important}.vot-textfield>input:not(:focus):not(.vot-show-placeholer)::-moz-placeholder{color:#0000!important}.vot-textfield>textarea:not(:focus):not(.vot-show-placeholer)::-moz-placeholder{color:#0000!important}.vot-textfield>input:not(:focus):not(.vot-show-placeholer)::-webkit-input-placeholder{color:#0000!important}.vot-textfield>textarea:not(:focus):not(.vot-show-placeholer)::-webkit-input-placeholder{color:#0000!important}.vot-textfield>input:not(:focus):placeholder-shown,.vot-textfield>textarea:not(:focus):placeholder-shown{border-top-color:var(--vot-helper-safari2)!important}.vot-textfield>input+span,.vot-textfield>textarea+span{color:rgba(var(--vot-onsurface-rgb,0,0,0),.6)!important;cursor:text!important;pointer-events:none!important;width:100%!important;max-height:100%!important;font-size:75%!important;line-height:15px!important;transition:color .2s,font-size .2s,line-height .2s!important;display:flex!important;position:absolute!important;top:0!important;left:0!important}.vot-textfield>input:not(:focus):placeholder-shown+span,.vot-textfield>textarea:not(:focus):placeholder-shown+span{font-size:inherit!important;line-height:68px!important}.vot-textfield>input+span:before,.vot-textfield>input+span:after,.vot-textfield>textarea+span:before,.vot-textfield>textarea+span:after{content:""!important;box-sizing:border-box!important;border-top:solid 1px var(--vot-helper-safari2)!important;pointer-events:none!important;min-width:10px!important;height:8px!important;margin-top:6px!important;transition:border .2s,box-shadow .2s!important;display:block!important;box-shadow:inset 0 1px #0000!important}.vot-textfield>input+span:before,.vot-textfield>textarea+span:before{border-left:1px solid #0000!important;border-radius:4px 0!important;margin-right:4px!important}.vot-textfield>input+span:after,.vot-textfield>textarea+span:after{border-right:1px solid #0000!important;border-radius:0 4px!important;flex-grow:1!important;margin-left:4px!important}.vot-textfield>input.vot-show-placeholer+span:before,.vot-textfield>textarea.vot-show-placeholer+span:before{margin-right:0!important}.vot-textfield>input.vot-show-placeholer+span:after,.vot-textfield>textarea.vot-show-placeholer+span:after{margin-left:0!important}.vot-textfield>input:not(:focus):placeholder-shown+span:before,.vot-textfield>input:not(:focus):placeholder-shown+span:after,.vot-textfield>textarea:not(:focus):placeholder-shown+span:before,.vot-textfield>textarea:not(:focus):placeholder-shown+span:after{border-top-color:#0000!important}.vot-textfield:hover>input:not(:disabled),.vot-textfield:hover>textarea:not(:disabled){border-color:transparent var(--vot-helper-safari3)var(--vot-helper-safari3)!important}.vot-textfield:hover>input:not(:disabled)+span:before,.vot-textfield:hover>input:not(:disabled)+span:after,.vot-textfield:hover>textarea:not(:disabled)+span:before,.vot-textfield:hover>textarea:not(:disabled)+span:after{border-top-color:var(--vot-helper-safari3)!important}.vot-textfield:hover>input:not(:disabled):not(:focus):placeholder-shown,.vot-textfield:hover>textarea:not(:disabled):not(:focus):placeholder-shown{border-color:var(--vot-helper-safari3)!important}.vot-textfield>input:focus,.vot-textfield>textarea:focus{border-color:transparent var(--vot-helper-theme)var(--vot-helper-theme)!important;box-shadow:inset 1px 0 var(--vot-helper-theme),inset -1px 0 var(--vot-helper-theme),inset 0 -1px var(--vot-helper-theme)!important;outline:none!important}.vot-textfield>input:focus+span,.vot-textfield>textarea:focus+span{color:var(--vot-helper-theme)!important}.vot-textfield>input:focus+span:before,.vot-textfield>input:focus+span:after,.vot-textfield>textarea:focus+span:before,.vot-textfield>textarea:focus+span:after{border-top-color:var(--vot-helper-theme)!important;box-shadow:inset 0 1px var(--vot-helper-theme)!important}.vot-textfield>input:disabled,.vot-textfield>input:disabled+span,.vot-textfield>textarea:disabled,.vot-textfield>textarea:disabled+span{border-color:transparent var(--vot-helper-safari1)var(--vot-helper-safari1)!important;color:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important;pointer-events:none!important}.vot-textfield>input:disabled+span:before,.vot-textfield>input:disabled+span:after,.vot-textfield>textarea:disabled+span:before,.vot-textfield>textarea:disabled+span:after,.vot-textfield>input:disabled:placeholder-shown,.vot-textfield>input:disabled:placeholder-shown+span,.vot-textfield>textarea:disabled:placeholder-shown,.vot-textfield>textarea:disabled:placeholder-shown+span{border-top-color:var(--vot-helper-safari1)!important}.vot-textfield>input:disabled:placeholder-shown+span:before,.vot-textfield>input:disabled:placeholder-shown+span:after,.vot-textfield>textarea:disabled:placeholder-shown+span:before,.vot-textfield>textarea:disabled:placeholder-shown+span:after{border-top-color:#0000!important}@media not all and (-webkit-min-device-pixel-ratio:.0000264583),not all and (min-resolution:.001dpcm){@supports ((-webkit-appearance:none)){.vot-textfield>input,.vot-textfield>input+span,.vot-textfield>textarea,.vot-textfield>textarea+span,.vot-textfield>input+span:before,.vot-textfield>input+span:after,.vot-textfield>textarea+span:before,.vot-textfield>textarea+span:after{transition-duration:.1s!important}}}.vot-checkbox{--vot-helper-theme:var(--vot-theme-rgb,var(--vot-primary-rgb,33,150,243));--vot-helper-ontheme:var(--vot-ontheme-rgb,var(--vot-onprimary-rgb,255,255,255));z-index:0;color:rgba(var(--vot-onsurface-rgb,0,0,0),.87);font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system);text-align:start;font-size:16px;line-height:1.5;display:inline-block;position:relative}.vot-checkbox[hidden]{display:none!important}.vot-checkbox>input{-webkit-appearance:none;appearance:none;z-index:10000;box-sizing:border-box;border:2px solid;border-color:rgba(var(--vot-onsurface-rgb,0,0,0),.6);cursor:pointer;background:0 0;border-radius:2px;outline:none;width:18px;height:18px;margin:3px 1px;transition:border-color .2s,background-color .2s;display:block;position:absolute}.vot-checkbox>input+span{box-sizing:border-box;width:inherit;cursor:pointer;padding-left:30px;font-weight:400;display:inline-block}.vot-checkbox>input+span:before{content:"";background-color:rgb(var(--vot-onsurface-rgb,0,0,0));opacity:0;pointer-events:none;border-radius:50%;width:40px;height:40px;transition:opacity .3s,transform .2s;display:block;position:absolute;top:-8px;left:-10px;transform:scale(1)}.vot-checkbox>input+span:after{content:"";z-index:10000;pointer-events:none;border:0 solid #0000;border-width:0 0 2px 2px;width:10px;height:5px;transition:border-color .2s;display:block;position:absolute;top:3px;left:1px;transform:translate(3px,4px)rotate(-45deg);box-sizing:content-box!important}.vot-checkbox>input:checked,.vot-checkbox>input:indeterminate{border-color:rgb(var(--vot-helper-theme));background-color:rgb(var(--vot-helper-theme))}.vot-checkbox>input:checked+span:before,.vot-checkbox>input:indeterminate+span:before{background-color:rgb(var(--vot-helper-theme))}.vot-checkbox>input:checked+span:after,.vot-checkbox>input:indeterminate+span:after{border-color:rgb(var(--vot-helper-ontheme,255,255,255))}.vot-checkbox>input:indeterminate+span:after{border-left-width:0;transform:translate(4px,3px)}.vot-checkbox:hover>input+span:before{opacity:.04}.vot-checkbox:active>input,.vot-checkbox:active:hover>input{border-color:rgb(var(--vot-helper-theme))}.vot-checkbox:active>input:checked{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.6);border-color:#0000}.vot-checkbox:active>input+span:before{opacity:1;transition:transform,opacity;transform:scale(0)}.vot-checkbox>input:disabled{border-color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);cursor:initial}.vot-checkbox>input:disabled:checked,.vot-checkbox>input:disabled:indeterminate{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);border-color:#0000}.vot-checkbox>input:disabled+span{color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);cursor:initial}.vot-checkbox>input:disabled+span:before{opacity:0;transform:scale(0)}.vot-slider{display:inline-block;--vot-safari-helper1:rgba(var(--vot-primary-rgb,33,150,243),.04)!important;--vot-safari-helper2:rgba(var(--vot-primary-rgb,33,150,243),.12)!important;--vot-safari-helper3:rgba(var(--vot-primary-rgb,33,150,243),.16)!important;--vot-safari-helper4:rgba(var(--vot-primary-rgb,33,150,243),.24)!important;color:rgba(var(--vot-onsurface-rgb,0,0,0),.87)!important;font-family:var(--vot-font,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system)!important;text-align:start!important;width:100%!important;font-size:16px!important;line-height:1.5!important}.vot-slider[hidden]{display:none!important}.vot-slider>input{-webkit-appearance:none!important;appearance:none!important;cursor:pointer!important;background-color:#0000!important;width:100%!important;height:36px!important;margin:0 0 -36px!important;display:block!important;position:relative!important;top:24px!important}.vot-slider>input:last-child{margin:0!important;position:static!important}.vot-slider>input:before{content:""!important;width:calc(100%*var(--vot-progress,0))!important;background:rgb(var(--vot-primary-rgb,33,150,243))!important;height:2px!important;display:block!important;position:absolute!important;top:calc(50% - 1px)!important}.vot-slider>input:disabled{cursor:default!important;opacity:.38!important}.vot-slider>input:disabled+span{color:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important}.vot-slider>input:disabled::-webkit-slider-runnable-track{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important}.vot-slider>input:disabled::-moz-range-track{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important}.vot-slider>input:disabled::-ms-fill-lower{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important}.vot-slider>input:disabled::-ms-fill-upper{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important}.vot-slider>input:disabled::-moz-range-thumb{background-color:rgb(var(--vot-onsurface-rgb,0,0,0))!important;box-shadow:0 0 0 1px rgb(var(--vot-surface-rgb,255,255,255))!important;transform:scale(4)!important}.vot-slider>input:disabled::-ms-thumb{background-color:rgb(var(--vot-onsurface-rgb,0,0,0))!important;box-shadow:0 0 0 1px rgb(var(--vot-surface-rgb,255,255,255))!important;transform:scale(4)!important}.vot-slider>input:disabled::-webkit-slider-thumb{background-color:rgb(var(--vot-onsurface-rgb,0,0,0))!important;box-shadow:0 0 0 1px rgb(var(--vot-surface-rgb,255,255,255))!important;transform:scale(4)!important}.vot-slider>input:disabled::-ms-fill-upper{opacity:.38!important}.vot-slider>input:disabled::-moz-range-progress{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.87)!important}.vot-slider>input:disabled:-webkit-slider-thumb{color:rgb(var(--vot-surface-rgb,255,255,255))!important}.vot-slider>input:active::-webkit-slider-thumb{box-shadow:0 0 0 2px var(--vot-safari-helper4)!important}.vot-slider>input:active::-moz-range-thumb{box-shadow:0 0 0 2px rgba(var(--vot-primary-rgb,33,150,243),.24)!important}.vot-slider>input:active::-ms-thumb{box-shadow:0 0 0 2px rgba(var(--vot-primary-rgb,33,150,243),.24)!important}.vot-slider>input:focus{outline:none!important}.vot-slider>input::-webkit-slider-runnable-track{background-color:rgba(var(--vot-primary-rgb,33,150,243),.24)!important;border-radius:1px!important;width:100%!important;height:2px!important;margin:17px 0!important}.vot-slider>input::-moz-range-track{background-color:rgba(var(--vot-primary-rgb,33,150,243),.24)!important;border-radius:1px!important;width:100%!important;height:2px!important;margin:17px 0!important}.vot-slider>input::-ms-track{box-sizing:border-box!important;background-color:#0000!important;border:none!important;border-radius:1px!important;width:100%!important;height:2px!important;margin:17px 0!important;padding:0 17px!important}.vot-slider>input::-webkit-slider-thumb{-webkit-appearance:none!important;appearance:none!important;background-color:rgb(var(--vot-primary-rgb,33,150,243))!important;border:none!important;border-radius:50%!important;width:2px!important;height:2px!important;transition:box-shadow .2s!important;transform:scale(6)!important}.vot-slider>input::-moz-range-thumb{-webkit-appearance:none!important;appearance:none!important;background-color:rgb(var(--vot-primary-rgb,33,150,243))!important;border:none!important;border-radius:50%!important;width:2px!important;height:2px!important;transition:box-shadow .2s!important;transform:scale(6)!important}.vot-slider>input::-ms-thumb{-webkit-appearance:none!important;appearance:none!important;background-color:rgb(var(--vot-primary-rgb,33,150,243))!important;border:none!important;border-radius:50%!important;width:2px!important;height:2px!important;transition:box-shadow .2s!important;transform:scale(6)!important}.vot-slider>input::-webkit-slider-thumb{-webkit-appearance:none!important;margin:0!important}.vot-slider>input::-moz-range-thumb{-moz-appearance:none!important}.vot-slider>input::-ms-thumb{margin:0 17px!important}.vot-slider>input::-moz-range-progress{background-color:rgb(var(--vot-primary-rgb,33,150,243))!important;border-radius:1px!important;height:2px!important}.vot-slider>input::-ms-fill-lower{background-color:rgb(var(--vot-primary-rgb,33,150,243))!important;border-radius:1px!important;height:2px!important}.vot-slider>input::-ms-fill-upper{background-color:rgb(var(--vot-primary-rgb,33,150,243))!important;border-radius:1px!important;height:2px!important}.vot-slider>input::-moz-focus-outer{border:none!important}.vot-slider>span{margin-bottom:36px!important;display:inline-block!important}.vot-slider:hover>input::-webkit-slider-thumb{box-shadow:0 0 0 2px var(--vot-safari-helper1)!important}.vot-slider:hover>input::-ms-thumb{box-shadow:0 0 0 2px rgba(var(--vot-primary-rgb,33,150,243),.04)!important}.vot-slider:hover>input:hover::-moz-range-thumb{box-shadow:0 0 0 2px rgba(var(--vot-primary-rgb,33,150,243),.04)!important}.vot-select{font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system);text-align:start;color:var(--vot-helper-theme);fill:var(--vot-helper-theme);justify-content:space-between;align-items:center;font-size:14px;font-weight:400;line-height:1.5;display:flex;--vot-helper-theme-rgb:var(--vot-onsurface-rgb,0,0,0)!important;--vot-helper-theme:rgba(var(--vot-helper-theme-rgb),.87)!important;--vot-helper-safari1:rgba(var(--vot-onsurface-rgb,0,0,0),.6)!important;--vot-helper-safari2:rgba(var(--vot-onsurface-rgb,0,0,0),.87)!important}.vot-select[hidden]{display:none!important}.vot-select-label{font-size:16px}.vot-select-outer{cursor:pointer;justify-content:space-between;align-items:center;width:120px;max-width:120px;padding:0 5px;display:flex;border-style:solid!important;border-width:1px!important;border-color:var(--vot-helper-safari1)!important;border-radius:4px!important;transition:border .2s!important}.vot-select-outer:hover{border-color:var(--vot-helper-safari2)!important}.vot-select-title{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.vot-select-arrow-icon{justify-content:center;align-items:center;width:20px;height:32px;display:flex}.vot-select-content-list{flex-direction:column;display:flex}.vot-select-content-list .vot-select-content-item{cursor:pointer;border-radius:8px;padding:5px 10px}.vot-select-content-list .vot-select-content-item:not([inert]):hover{background-color:#2a2c31}.vot-select-content-list .vot-select-content-item[data-vot-selected=true]{color:rgb(var(--vot-primary-rgb,33,150,243));background-color:rgba(var(--vot-primary-rgb,33,150,243),.2)}.vot-select-content-list .vot-select-content-item[data-vot-selected=true]:hover{background-color:rgba(var(--vot-primary-rgb,33,150,243),.1)!important}.vot-select-content-list .vot-select-content-item[data-vot-disabled=true]{cursor:default}.vot-select-content-list .vot-select-content-item[hidden]{display:none!important}.vot-header{color:rgba(var(--vot-helper-onsurface-rgb),.87);font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system);text-align:start;font-weight:700;line-height:1.5}.vot-header[hidden]{display:none!important}.vot-header:not(:first-child){padding-top:8px}.vot-header-level-1{font-size:2em}.vot-header-level-2{font-size:1.5em}.vot-header-level-3{font-size:1.17em}.vot-header-level-4{font-size:1em}.vot-header-level-5{font-size:.83em}.vot-header-level-6{font-size:.67em}.vot-info{color:rgba(var(--vot-helper-onsurface-rgb),.87);font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system);text-align:start;-webkit-user-select:text;user-select:text;font-size:16px;line-height:1.5;display:flex}.vot-info[hidden]{display:none!important}.vot-info>:not(:first-child){color:rgba(var(--vot-helper-onsurface-rgb),.5);flex:1;margin-left:8px}.vot-details{color:rgba(var(--vot-helper-onsurface-rgb),.87);font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system);text-align:start;cursor:pointer;border-radius:.5em;justify-content:space-between;align-items:center;margin:0 -.5em;padding:.5em;font-size:16px;line-height:1.5;transition:background .5s;display:flex}.vot-details[hidden]{display:none!important}.vot-details-arrow-icon{fill:rgba(var(--vot-helper-onsurface-rgb),.87);justify-content:center;align-items:center;width:20px;height:32px;display:flex;transform:scale(1.25)rotate(-90deg)}.vot-details:hover{background:rgba(var(--vot-onsurface-rgb,0,0,0),.04)}.vot-lang-select{--vot-helper-theme-rgb:var(--vot-onsurface-rgb,0,0,0);--vot-helper-theme:rgba(var(--vot-helper-theme-rgb),.87);color:var(--vot-helper-theme);fill:var(--vot-helper-theme);justify-content:space-between;align-items:center;display:flex}.vot-lang-select[hidden]{display:none!important}.vot-lang-select-icon{justify-content:center;align-items:center;width:32px;height:32px;display:flex}.vot-segmented-button{--vot-helper-theme-rgb:var(--vot-onsurface-rgb,0,0,0);--vot-helper-theme:rgba(var(--vot-helper-theme-rgb),.87);-webkit-user-select:none;user-select:none;background:rgb(var(--vot-surface-rgb,255,255,255));color:var(--vot-helper-theme);fill:var(--vot-helper-theme);font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system);cursor:default;z-index:2147483647;border-radius:4px;align-items:center;max-width:100vw;height:32px;font-size:16px;line-height:1.5;transition:opacity .5s;display:flex;position:absolute;top:5rem;left:50%;overflow:hidden;transform:translate(-50%)}.vot-segmented-button[hidden]{display:none!important}.vot-segmented-button *{box-sizing:border-box!important}.vot-segmented-button .vot-separator{background:rgba(var(--vot-helper-theme-rgb),.1);width:1px;height:50%}.vot-segmented-button .vot-separator[hidden]{display:none!important}.vot-segmented-button .vot-segment,.vot-segmented-button .vot-segment-only-icon{color:inherit;background-color:#0000;border:none;justify-content:center;align-items:center;height:100%;padding:0 8px;transition:background-color .1s ease-in-out;display:flex;position:relative;overflow:hidden}.vot-segmented-button .vot-segment[hidden],.vot-segmented-button [hidden].vot-segment-only-icon{display:none!important}.vot-segmented-button .vot-segment:before,.vot-segmented-button .vot-segment-only-icon:before,.vot-segmented-button .vot-segment:after,.vot-segmented-button .vot-segment-only-icon:after{content:"";border-radius:inherit;opacity:0;position:absolute;top:0;bottom:0;left:0;right:0}.vot-segmented-button .vot-segment:before,.vot-segmented-button .vot-segment-only-icon:before{background-color:rgb(var(--vot-helper-theme-rgb));transition:opacity .2s}.vot-segmented-button .vot-segment:after,.vot-segmented-button .vot-segment-only-icon:after{background:radial-gradient(circle,currentColor 1%,#0000 1%) 50%/10000% 10000% no-repeat;transition:opacity 1s,background-size .5s}.vot-segmented-button .vot-segment:hover:before,.vot-segmented-button .vot-segment-only-icon:hover:before{opacity:.04}.vot-segmented-button .vot-segment:active:after,.vot-segmented-button .vot-segment-only-icon:active:after{opacity:.16;background-size:100% 100%;transition:background-size}.vot-segmented-button .vot-segment-only-icon{min-width:32px;padding:0}.vot-segmented-button .vot-segment-label{white-space:nowrap;color:inherit;margin-left:8px;font-weight:400}.vot-segmented-button[data-status=success] .vot-translate-button{color:rgb(var(--vot-primary-rgb,33,150,243));fill:rgb(var(--vot-primary-rgb,33,150,243))}.vot-segmented-button[data-status=error] .vot-translate-button{color:#f28b82;fill:#f28b82}.vot-segmented-button[data-loading=true] #vot-loading-icon{display:block!important}.vot-segmented-button[data-loading=true] #vot-translate-icon{display:none!important}.vot-segmented-button[data-direction=column]{flex-direction:column;height:fit-content}.vot-segmented-button[data-direction=column] .vot-segment-label{display:none}.vot-segmented-button[data-direction=column]>.vot-segment-only-icon,.vot-segmented-button[data-direction=column]>.vot-segment{padding:8px}.vot-segmented-button[data-direction=column] .vot-separator{width:50%;height:1px}.vot-segmented-button[data-position=left]{top:12.5vh;left:50px}.vot-segmented-button[data-position=right]{top:12.5vh;left:auto;right:0}.vot-segmented-button svg{width:24px}.vot-menu{--vot-helper-surface-rgb:var(--vot-surface-rgb,255,255,255);--vot-helper-surface:rgb(var(--vot-helper-surface-rgb));--vot-helper-onsurface-rgb:var(--vot-onsurface-rgb,0,0,0);--vot-helper-onsurface:rgba(var(--vot-helper-onsurface-rgb),.87);-webkit-user-select:none;user-select:none;background-color:var(--vot-helper-surface);color:var(--vot-helper-onsurface);font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system);cursor:default;z-index:2147483647;visibility:visible;opacity:1;transform-origin:top;border-radius:8px;min-width:300px;font-size:16px;line-height:1.5;transition:opacity .3s,transform .1s;position:absolute;top:calc(5rem + 48px);left:50%;overflow:hidden;transform:translate(-50%)scale(1)}.vot-menu *{box-sizing:border-box!important}.vot-menu[hidden]{pointer-events:none;visibility:hidden;opacity:0;transform:translate(-50%)scale(0);display:block!important}.vot-menu-content-wrapper{max-height:calc(var(--vot-container-height,75vh) - (5rem + 32px + 16px)*2);flex-direction:column;min-height:100px;display:flex;overflow:auto}.vot-menu-header-container{flex-shrink:0;align-items:flex-start;min-height:31px;display:flex}.vot-menu-header-container:empty{padding:0 0 16px}.vot-menu-header-container>.vot-icon-button{margin-inline-end:4px;margin-top:4px}.vot-menu-title-container{font-size:inherit;font-weight:inherit;text-align:start;outline:0;flex:1;margin:0;display:flex}.vot-menu-title{padding-bottom:16px;padding-inline-start:16px;padding-inline-end:16px;flex:1;padding-top:16px;font-size:16px;font-weight:400;line-height:1}.vot-menu-body-container{box-sizing:border-box;overscroll-behavior:contain;flex-direction:column;gap:8px;min-height:1.375rem;padding:0 16px;display:flex;overflow:auto;scrollbar-color:rgba(var(--vot-helper-onsurface-rgb),.1)var(--vot-helper-surface)!important}.vot-menu-body-container::-webkit-scrollbar{background:var(--vot-helper-surface)!important;width:12px!important;height:12px!important}.vot-menu-body-container::-webkit-scrollbar-track{background:var(--vot-helper-surface)!important;width:12px!important;height:12px!important}.vot-menu-body-container::-webkit-scrollbar-thumb{background:rgba(var(--vot-helper-onsurface-rgb),.1)!important;border:5px solid var(--vot-helper-surface)!important;-webkit-border-radius:1ex!important}.vot-menu-body-container::-webkit-scrollbar-thumb:hover{border:3px solid var(--vot-helper-surface)!important}.vot-menu-body-container::-webkit-scrollbar-corner{background:var(--vot-helper-surface)!important}.vot-menu-footer-container{padding-bottom:16px;padding-inline-start:16px;padding-inline-end:16px;flex-shrink:0;justify-content:flex-end;padding-top:16px;display:flex}.vot-menu-footer-container:empty{padding:16px 0 0}.vot-menu[data-position=left]{top:12.5vh;left:240px}.vot-menu[data-position=right]{top:12.5vh;left:auto;right:-80px}.vot-dialog{--vot-helper-surface-rgb:var(--vot-surface-rgb,255,255,255);--vot-helper-surface:rgb(var(--vot-helper-surface-rgb));--vot-helper-onsurface-rgb:var(--vot-onsurface-rgb,0,0,0);--vot-helper-onsurface:rgba(var(--vot-helper-onsurface-rgb),.87);max-width:initial;max-height:initial;width:min(var(--vot-dialog-width,512px),100%);top:50%;bottom:50%;background-color:var(--vot-helper-surface);color:var(--vot-helper-onsurface);font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system);-webkit-user-select:none;user-select:none;visibility:visible;opacity:1;transform-origin:50%;border-radius:8px;height:fit-content;margin:auto;padding:0;font-size:16px;line-height:1.5;transition:opacity .3s,transform .1s;display:block;position:fixed;top:0;bottom:0;left:0;right:0;overflow-x:auto;overflow-y:hidden;transform:scale(1);box-shadow:0 0 16px #0000001f,0 16px 16px #0000003d}[hidden]>.vot-dialog{pointer-events:none;opacity:0;transition:opacity .1s,transform .2s;transform:scale(.5)}.vot-dialog-container{visibility:visible;z-index:2147483647;position:absolute}.vot-dialog-container[hidden]{pointer-events:none;visibility:hidden;display:block!important}.vot-dialog-container *{box-sizing:border-box!important}.vot-dialog-backdrop{opacity:1;background-color:#0009;transition:opacity .3s;position:fixed;top:0;bottom:0;left:0;right:0}[hidden]>.vot-dialog-backdrop{pointer-events:none;opacity:0}.vot-dialog-content-wrapper{flex-direction:column;max-height:75vh;display:flex;overflow:auto}.vot-dialog-header-container{flex-shrink:0;align-items:flex-start;min-height:31px;display:flex}.vot-dialog-header-container:empty{padding:0 0 20px}.vot-dialog-header-container>.vot-icon-button{margin-inline-end:4px;margin-top:4px}.vot-dialog-title-container{font-size:inherit;font-weight:inherit;outline:0;flex:1;margin:0;display:flex}.vot-dialog-title{padding-bottom:16px;padding-inline-start:20px;padding-inline-end:20px;flex:1;padding-top:20px;font-size:115.385%;font-weight:700;line-height:1}.vot-dialog-body-container{box-sizing:border-box;overscroll-behavior:contain;flex-direction:column;gap:16px;min-height:1.375rem;padding:0 20px;display:flex;overflow:auto;scrollbar-color:rgba(var(--vot-helper-onsurface-rgb),.1)var(--vot-helper-surface)!important}.vot-dialog-body-container::-webkit-scrollbar{background:var(--vot-helper-surface)!important;width:12px!important;height:12px!important}.vot-dialog-body-container::-webkit-scrollbar-track{background:var(--vot-helper-surface)!important;width:12px!important;height:12px!important}.vot-dialog-body-container::-webkit-scrollbar-thumb{background:rgba(var(--vot-helper-onsurface-rgb),.1)!important;border:5px solid var(--vot-helper-surface)!important;-webkit-border-radius:1ex!important}.vot-dialog-body-container::-webkit-scrollbar-thumb:hover{border:3px solid var(--vot-helper-surface)!important}.vot-dialog-body-container::-webkit-scrollbar-corner{background:var(--vot-helper-surface)!important}.vot-dialog-footer-container{padding-bottom:16px;padding-inline-start:16px;padding-inline-end:16px;flex-shrink:0;justify-content:flex-end;padding-top:16px;display:flex}.vot-dialog-footer-container:empty{padding:20px 0 0}.vot-subtitles-widget{z-index:2147483647;pointer-events:none;justify-content:center;align-items:center;width:50%;min-height:20%;max-height:100%;display:flex;position:absolute;top:75%;left:25%}.vot-subtitles{--vot-subtitles-background:rgba(var(--vot-surface-rgb,46,47,52),var(--vot-subtitles-opacity,.8));background:var(--vot-subtitles-background,#2e2f34cc);color:var(--vot-subtitles-color,#e3e3e3);pointer-events:all;box-sizing:border-box;-webkit-user-select:none;user-select:none;border-radius:.5em;width:max-content;max-width:100%;max-height:100%;padding:.5em;font-size:20px;line-height:normal;position:relative}.vot-subtitles span{-webkit-user-select:text;user-select:text;font-size:inherit!important;line-height:normal!important}.vot-subtitles .passed{color:var(--vot-subtitles-passed-color,#2196f3)}:root{--vot-font-family:"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system;--vot-primary-rgb:139,180,245;--vot-onprimary-rgb:32,33,36;--vot-surface-rgb:32,33,36;--vot-onsurface-rgb:227,227,227;--vot-subtitles-color:rgb(var(--vot-onsurface-rgb,227,227,227));--vot-subtitles-passed-color:rgb(var(--vot-primary-rgb,33,150,243))}vot-block{display:block;visibility:visible!important}')},"./node_modules/bowser/es5.js":function(t){t.exports=function(t){var e={};function o(n){if(e[n])return e[n].exports;var a=e[n]={i:n,l:!1,exports:{}};return t[n].call(a.exports,a,a.exports,o),a.l=!0,a.exports}return o.m=t,o.c=e,o.d=function(t,e,n){o.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.t=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var a in t)o.d(n,a,function(e){return t[e]}.bind(null,a));return n},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,"a",e),e},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o.p="",o(o.s=90)}({17:function(t,e,o){"use strict";e.__esModule=!0,e.default=void 0;var n=o(18),a=function(){function t(){}return t.getFirstMatch=function(t,e){var o=e.match(t);return o&&o.length>0&&o[1]||""},t.getSecondMatch=function(t,e){var o=e.match(t);return o&&o.length>1&&o[2]||""},t.matchAndReturnConst=function(t,e,o){if(t.test(e))return o},t.getWindowsVersionName=function(t){switch(t){case"NT":return"NT";case"XP":case"NT 5.1":return"XP";case"NT 5.0":return"2000";case"NT 5.2":return"2003";case"NT 6.0":return"Vista";case"NT 6.1":return"7";case"NT 6.2":return"8";case"NT 6.3":return"8.1";case"NT 10.0":return"10";default:return}},t.getMacOSVersionName=function(t){var e=t.split(".").splice(0,2).map((function(t){return parseInt(t,10)||0}));if(e.push(0),10===e[0])switch(e[1]){case 5:return"Leopard";case 6:return"Snow Leopard";case 7:return"Lion";case 8:return"Mountain Lion";case 9:return"Mavericks";case 10:return"Yosemite";case 11:return"El Capitan";case 12:return"Sierra";case 13:return"High Sierra";case 14:return"Mojave";case 15:return"Catalina";default:return}},t.getAndroidVersionName=function(t){var e=t.split(".").splice(0,2).map((function(t){return parseInt(t,10)||0}));if(e.push(0),!(1===e[0]&&e[1]<5))return 1===e[0]&&e[1]<6?"Cupcake":1===e[0]&&e[1]>=6?"Donut":2===e[0]&&e[1]<2?"Eclair":2===e[0]&&2===e[1]?"Froyo":2===e[0]&&e[1]>2?"Gingerbread":3===e[0]?"Honeycomb":4===e[0]&&e[1]<1?"Ice Cream Sandwich":4===e[0]&&e[1]<4?"Jelly Bean":4===e[0]&&e[1]>=4?"KitKat":5===e[0]?"Lollipop":6===e[0]?"Marshmallow":7===e[0]?"Nougat":8===e[0]?"Oreo":9===e[0]?"Pie":void 0},t.getVersionPrecision=function(t){return t.split(".").length},t.compareVersions=function(e,o,n){void 0===n&&(n=!1);var a=t.getVersionPrecision(e),i=t.getVersionPrecision(o),r=Math.max(a,i),s=0,l=t.map([e,o],(function(e){var o=r-t.getVersionPrecision(e),n=e+new Array(o+1).join(".0");return t.map(n.split("."),(function(t){return new Array(20-t.length).join("0")+t})).reverse()}));for(n&&(s=r-Math.min(a,i)),r-=1;r>=s;){if(l[0][r]>l[1][r])return 1;if(l[0][r]===l[1][r]){if(r===s)return 0;r-=1}else if(l[0][r]1?a-1:0),r=1;r0){var r=Object.keys(o),l=s.default.find(r,(function(t){return e.isOS(t)}));if(l){var d=this.satisfies(o[l]);if(void 0!==d)return d}var u=s.default.find(r,(function(t){return e.isPlatform(t)}));if(u){var c=this.satisfies(o[u]);if(void 0!==c)return c}}if(i>0){var h=Object.keys(a),p=s.default.find(h,(function(t){return e.isBrowser(t,!0)}));if(void 0!==p)return this.compareVersion(a[p])}},e.isBrowser=function(t,e){void 0===e&&(e=!1);var o=this.getBrowserName().toLowerCase(),n=t.toLowerCase(),a=s.default.getBrowserTypeByAlias(n);return e&&a&&(n=a.toLowerCase()),n===o},e.compareVersion=function(t){var e=[0],o=t,n=!1,a=this.getBrowserVersion();if("string"==typeof a)return">"===t[0]||"<"===t[0]?(o=t.substr(1),"="===t[1]?(n=!0,o=t.substr(2)):e=[],">"===t[0]?e.push(1):e.push(-1)):"="===t[0]?o=t.substr(1):"~"===t[0]&&(n=!0,o=t.substr(1)),e.indexOf(s.default.compareVersions(a,o,n))>-1},e.isOS=function(t){return this.getOSName(!0)===String(t).toLowerCase()},e.isPlatform=function(t){return this.getPlatformType(!0)===String(t).toLowerCase()},e.isEngine=function(t){return this.getEngineName(!0)===String(t).toLowerCase()},e.is=function(t,e){return void 0===e&&(e=!1),this.isBrowser(t,e)||this.isOS(t)||this.isPlatform(t)},e.some=function(t){var e=this;return void 0===t&&(t=[]),t.some((function(t){return e.is(t)}))},t}();e.default=d,t.exports=e.default},92:function(t,e,o){"use strict";e.__esModule=!0,e.default=void 0;var n,a=(n=o(17))&&n.__esModule?n:{default:n},i=/version\/(\d+(\.?_?\d+)+)/i,r=[{test:[/googlebot/i],describe:function(t){var e={name:"Googlebot"},o=a.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,t)||a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/opera/i],describe:function(t){var e={name:"Opera"},o=a.default.getFirstMatch(i,t)||a.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/opr\/|opios/i],describe:function(t){var e={name:"Opera"},o=a.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,t)||a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/SamsungBrowser/i],describe:function(t){var e={name:"Samsung Internet for Android"},o=a.default.getFirstMatch(i,t)||a.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/Whale/i],describe:function(t){var e={name:"NAVER Whale Browser"},o=a.default.getFirstMatch(i,t)||a.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/MZBrowser/i],describe:function(t){var e={name:"MZ Browser"},o=a.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,t)||a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/focus/i],describe:function(t){var e={name:"Focus"},o=a.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,t)||a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/swing/i],describe:function(t){var e={name:"Swing"},o=a.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,t)||a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/coast/i],describe:function(t){var e={name:"Opera Coast"},o=a.default.getFirstMatch(i,t)||a.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function(t){var e={name:"Opera Touch"},o=a.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,t)||a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/yabrowser/i],describe:function(t){var e={name:"Yandex Browser"},o=a.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,t)||a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/ucbrowser/i],describe:function(t){var e={name:"UC Browser"},o=a.default.getFirstMatch(i,t)||a.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/Maxthon|mxios/i],describe:function(t){var e={name:"Maxthon"},o=a.default.getFirstMatch(i,t)||a.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/epiphany/i],describe:function(t){var e={name:"Epiphany"},o=a.default.getFirstMatch(i,t)||a.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/puffin/i],describe:function(t){var e={name:"Puffin"},o=a.default.getFirstMatch(i,t)||a.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/sleipnir/i],describe:function(t){var e={name:"Sleipnir"},o=a.default.getFirstMatch(i,t)||a.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/k-meleon/i],describe:function(t){var e={name:"K-Meleon"},o=a.default.getFirstMatch(i,t)||a.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/micromessenger/i],describe:function(t){var e={name:"WeChat"},o=a.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,t)||a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/qqbrowser/i],describe:function(t){var e={name:/qqbrowserlite/i.test(t)?"QQ Browser Lite":"QQ Browser"},o=a.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,t)||a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/msie|trident/i],describe:function(t){var e={name:"Internet Explorer"},o=a.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/\sedg\//i],describe:function(t){var e={name:"Microsoft Edge"},o=a.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/edg([ea]|ios)/i],describe:function(t){var e={name:"Microsoft Edge"},o=a.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/vivaldi/i],describe:function(t){var e={name:"Vivaldi"},o=a.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/seamonkey/i],describe:function(t){var e={name:"SeaMonkey"},o=a.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/sailfish/i],describe:function(t){var e={name:"Sailfish"},o=a.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,t);return o&&(e.version=o),e}},{test:[/silk/i],describe:function(t){var e={name:"Amazon Silk"},o=a.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/phantom/i],describe:function(t){var e={name:"PhantomJS"},o=a.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/slimerjs/i],describe:function(t){var e={name:"SlimerJS"},o=a.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(t){var e={name:"BlackBerry"},o=a.default.getFirstMatch(i,t)||a.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/(web|hpw)[o0]s/i],describe:function(t){var e={name:"WebOS Browser"},o=a.default.getFirstMatch(i,t)||a.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/bada/i],describe:function(t){var e={name:"Bada"},o=a.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/tizen/i],describe:function(t){var e={name:"Tizen"},o=a.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,t)||a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/qupzilla/i],describe:function(t){var e={name:"QupZilla"},o=a.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,t)||a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/firefox|iceweasel|fxios/i],describe:function(t){var e={name:"Firefox"},o=a.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/electron/i],describe:function(t){var e={name:"Electron"},o=a.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/MiuiBrowser/i],describe:function(t){var e={name:"Miui"},o=a.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/chromium/i],describe:function(t){var e={name:"Chromium"},o=a.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,t)||a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/chrome|crios|crmo/i],describe:function(t){var e={name:"Chrome"},o=a.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/GSA/i],describe:function(t){var e={name:"Google Search"},o=a.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:function(t){var e=!t.test(/like android/i),o=t.test(/android/i);return e&&o},describe:function(t){var e={name:"Android Browser"},o=a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/playstation 4/i],describe:function(t){var e={name:"PlayStation 4"},o=a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/safari|applewebkit/i],describe:function(t){var e={name:"Safari"},o=a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/.*/i],describe:function(t){var e=-1!==t.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return{name:a.default.getFirstMatch(e,t),version:a.default.getSecondMatch(e,t)}}}];e.default=r,t.exports=e.default},93:function(t,e,o){"use strict";e.__esModule=!0,e.default=void 0;var n,a=(n=o(17))&&n.__esModule?n:{default:n},i=o(18),r=[{test:[/Roku\/DVP/],describe:function(t){var e=a.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,t);return{name:i.OS_MAP.Roku,version:e}}},{test:[/windows phone/i],describe:function(t){var e=a.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,t);return{name:i.OS_MAP.WindowsPhone,version:e}}},{test:[/windows /i],describe:function(t){var e=a.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,t),o=a.default.getWindowsVersionName(e);return{name:i.OS_MAP.Windows,version:e,versionName:o}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(t){var e={name:i.OS_MAP.iOS},o=a.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,t);return o&&(e.version=o),e}},{test:[/macintosh/i],describe:function(t){var e=a.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,t).replace(/[_\s]/g,"."),o=a.default.getMacOSVersionName(e),n={name:i.OS_MAP.MacOS,version:e};return o&&(n.versionName=o),n}},{test:[/(ipod|iphone|ipad)/i],describe:function(t){var e=a.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,t).replace(/[_\s]/g,".");return{name:i.OS_MAP.iOS,version:e}}},{test:function(t){var e=!t.test(/like android/i),o=t.test(/android/i);return e&&o},describe:function(t){var e=a.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,t),o=a.default.getAndroidVersionName(e),n={name:i.OS_MAP.Android,version:e};return o&&(n.versionName=o),n}},{test:[/(web|hpw)[o0]s/i],describe:function(t){var e=a.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,t),o={name:i.OS_MAP.WebOS};return e&&e.length&&(o.version=e),o}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(t){var e=a.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,t)||a.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,t)||a.default.getFirstMatch(/\bbb(\d+)/i,t);return{name:i.OS_MAP.BlackBerry,version:e}}},{test:[/bada/i],describe:function(t){var e=a.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,t);return{name:i.OS_MAP.Bada,version:e}}},{test:[/tizen/i],describe:function(t){var e=a.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,t);return{name:i.OS_MAP.Tizen,version:e}}},{test:[/linux/i],describe:function(){return{name:i.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return{name:i.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(t){var e=a.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,t);return{name:i.OS_MAP.PlayStation4,version:e}}}];e.default=r,t.exports=e.default},94:function(t,e,o){"use strict";e.__esModule=!0,e.default=void 0;var n,a=(n=o(17))&&n.__esModule?n:{default:n},i=o(18),r=[{test:[/googlebot/i],describe:function(){return{type:"bot",vendor:"Google"}}},{test:[/huawei/i],describe:function(t){var e=a.default.getFirstMatch(/(can-l01)/i,t)&&"Nova",o={type:i.PLATFORMS_MAP.mobile,vendor:"Huawei"};return e&&(o.model=e),o}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function(){return{type:i.PLATFORMS_MAP.tablet,vendor:"Nexus"}}},{test:[/ipad/i],describe:function(){return{type:i.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(){return{type:i.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/kftt build/i],describe:function(){return{type:i.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"}}},{test:[/silk/i],describe:function(){return{type:i.PLATFORMS_MAP.tablet,vendor:"Amazon"}}},{test:[/tablet(?! pc)/i],describe:function(){return{type:i.PLATFORMS_MAP.tablet}}},{test:function(t){var e=t.test(/ipod|iphone/i),o=t.test(/like (ipod|iphone)/i);return e&&!o},describe:function(t){var e=a.default.getFirstMatch(/(ipod|iphone)/i,t);return{type:i.PLATFORMS_MAP.mobile,vendor:"Apple",model:e}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return{type:i.PLATFORMS_MAP.mobile,vendor:"Nexus"}}},{test:[/[^-]mobi/i],describe:function(){return{type:i.PLATFORMS_MAP.mobile}}},{test:function(t){return"blackberry"===t.getBrowserName(!0)},describe:function(){return{type:i.PLATFORMS_MAP.mobile,vendor:"BlackBerry"}}},{test:function(t){return"bada"===t.getBrowserName(!0)},describe:function(){return{type:i.PLATFORMS_MAP.mobile}}},{test:function(t){return"windows phone"===t.getBrowserName()},describe:function(){return{type:i.PLATFORMS_MAP.mobile,vendor:"Microsoft"}}},{test:function(t){var e=Number(String(t.getOSVersion()).split(".")[0]);return"android"===t.getOSName(!0)&&e>=3},describe:function(){return{type:i.PLATFORMS_MAP.tablet}}},{test:function(t){return"android"===t.getOSName(!0)},describe:function(){return{type:i.PLATFORMS_MAP.mobile}}},{test:function(t){return"macos"===t.getOSName(!0)},describe:function(){return{type:i.PLATFORMS_MAP.desktop,vendor:"Apple"}}},{test:function(t){return"windows"===t.getOSName(!0)},describe:function(){return{type:i.PLATFORMS_MAP.desktop}}},{test:function(t){return"linux"===t.getOSName(!0)},describe:function(){return{type:i.PLATFORMS_MAP.desktop}}},{test:function(t){return"playstation 4"===t.getOSName(!0)},describe:function(){return{type:i.PLATFORMS_MAP.tv}}},{test:function(t){return"roku"===t.getOSName(!0)},describe:function(){return{type:i.PLATFORMS_MAP.tv}}}];e.default=r,t.exports=e.default},95:function(t,e,o){"use strict";e.__esModule=!0,e.default=void 0;var n,a=(n=o(17))&&n.__esModule?n:{default:n},i=o(18),r=[{test:function(t){return"microsoft edge"===t.getBrowserName(!0)},describe:function(t){if(/\sedg\//i.test(t))return{name:i.ENGINE_MAP.Blink};var e=a.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,t);return{name:i.ENGINE_MAP.EdgeHTML,version:e}}},{test:[/trident/i],describe:function(t){var e={name:i.ENGINE_MAP.Trident},o=a.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:function(t){return t.test(/presto/i)},describe:function(t){var e={name:i.ENGINE_MAP.Presto},o=a.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:function(t){var e=t.test(/gecko/i),o=t.test(/like gecko/i);return e&&!o},describe:function(t){var e={name:i.ENGINE_MAP.Gecko},o=a.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/(apple)?webkit\/537\.36/i],describe:function(){return{name:i.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(t){var e={name:i.ENGINE_MAP.WebKit},o=a.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}}];e.default=r,t.exports=e.default}})},"./node_modules/requestidlecallback-polyfill/index.js":()=>{window.requestIdleCallback=window.requestIdleCallback||function(t){var e=Date.now();return setTimeout((function(){t({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-e))}})}),1)},window.cancelIdleCallback=window.cancelIdleCallback||function(t){clearTimeout(t)}}},e={};function o(n){var a=e[n];if(void 0!==a)return a.exports;var i=e[n]={exports:{}};return t[n].call(i.exports,i,i.exports,o),i.exports}(()=>{"use strict";var t=o("./node_modules/bowser/es5.js");const e=protobuf;var n;function a(t){switch(t){case 0:case"NO_CONNECTION":return n.NO_CONNECTION;case 10:case"TRANSLATING":return n.TRANSLATING;case 20:case"STREAMING":return n.STREAMING;default:return n.UNRECOGNIZED}}!function(t){t[t.NO_CONNECTION=0]="NO_CONNECTION",t[t.TRANSLATING=10]="TRANSLATING",t[t.STREAMING=20]="STREAMING",t[t.UNRECOGNIZED=-1]="UNRECOGNIZED"}(n||(n={}));const i={encode:(t,o=e.Writer.create())=>(""!==t.target&&o.uint32(10).string(t.target),""!==t.targetUrl&&o.uint32(18).string(t.targetUrl),o),decode(t,o){const n=t instanceof e.Reader?t:e.Reader.create(t);let a=void 0===o?n.len:n.pos+o;const i={target:"",targetUrl:""};for(;n.pos>>3){case 1:if(10!==t)break;i.target=n.string();continue;case 2:if(18!==t)break;i.targetUrl=n.string();continue}if(4==(7&t)||0===t)break;n.skipType(7&t)}return i},fromJSON:t=>({target:b(t.target)?globalThis.String(t.target):"",targetUrl:b(t.targetUrl)?globalThis.String(t.targetUrl):""}),toJSON(t){const e={};return""!==t.target&&(e.target=t.target),""!==t.targetUrl&&(e.targetUrl=t.targetUrl),e},create:t=>i.fromPartial(t??{}),fromPartial(t){const e={target:"",targetUrl:""};return e.target=t.target??"",e.targetUrl=t.targetUrl??"",e}};const r={encode(t,o=e.Writer.create()){""!==t.url&&o.uint32(26).string(t.url),void 0!==t.deviceId&&o.uint32(34).string(t.deviceId),!1!==t.firstRequest&&o.uint32(40).bool(t.firstRequest),0!==t.duration&&o.uint32(49).double(t.duration),0!==t.unknown0&&o.uint32(56).int32(t.unknown0),""!==t.language&&o.uint32(66).string(t.language),!1!==t.forceSourceLang&&o.uint32(72).bool(t.forceSourceLang),0!==t.unknown1&&o.uint32(80).int32(t.unknown1);for(const e of t.translationHelp)i.encode(e,o.uint32(90).fork()).ldelim();return""!==t.responseLanguage&&o.uint32(114).string(t.responseLanguage),0!==t.unknown2&&o.uint32(120).int32(t.unknown2),0!==t.unknown3&&o.uint32(128).int32(t.unknown3),!1!==t.bypassCache&&o.uint32(136).bool(t.bypassCache),o},decode(t,o){const n=t instanceof e.Reader?t:e.Reader.create(t);let a=void 0===o?n.len:n.pos+o;const r={url:"",deviceId:void 0,firstRequest:!1,duration:0,unknown0:0,language:"",forceSourceLang:!1,unknown1:0,translationHelp:[],responseLanguage:"",unknown2:0,unknown3:0,bypassCache:!1};for(;n.pos>>3){case 3:if(26!==t)break;r.url=n.string();continue;case 4:if(34!==t)break;r.deviceId=n.string();continue;case 5:if(40!==t)break;r.firstRequest=n.bool();continue;case 6:if(49!==t)break;r.duration=n.double();continue;case 7:if(56!==t)break;r.unknown0=n.int32();continue;case 8:if(66!==t)break;r.language=n.string();continue;case 9:if(72!==t)break;r.forceSourceLang=n.bool();continue;case 10:if(80!==t)break;r.unknown1=n.int32();continue;case 11:if(90!==t)break;r.translationHelp.push(i.decode(n,n.uint32()));continue;case 14:if(114!==t)break;r.responseLanguage=n.string();continue;case 15:if(120!==t)break;r.unknown2=n.int32();continue;case 16:if(128!==t)break;r.unknown3=n.int32();continue;case 17:if(136!==t)break;r.bypassCache=n.bool();continue}if(4==(7&t)||0===t)break;n.skipType(7&t)}return r},fromJSON:t=>({url:b(t.url)?globalThis.String(t.url):"",deviceId:b(t.deviceId)?globalThis.String(t.deviceId):void 0,firstRequest:!!b(t.firstRequest)&&globalThis.Boolean(t.firstRequest),duration:b(t.duration)?globalThis.Number(t.duration):0,unknown0:b(t.unknown0)?globalThis.Number(t.unknown0):0,language:b(t.language)?globalThis.String(t.language):"",forceSourceLang:!!b(t.forceSourceLang)&&globalThis.Boolean(t.forceSourceLang),unknown1:b(t.unknown1)?globalThis.Number(t.unknown1):0,translationHelp:globalThis.Array.isArray(t?.translationHelp)?t.translationHelp.map((t=>i.fromJSON(t))):[],responseLanguage:b(t.responseLanguage)?globalThis.String(t.responseLanguage):"",unknown2:b(t.unknown2)?globalThis.Number(t.unknown2):0,unknown3:b(t.unknown3)?globalThis.Number(t.unknown3):0,bypassCache:!!b(t.bypassCache)&&globalThis.Boolean(t.bypassCache)}),toJSON(t){const e={};return""!==t.url&&(e.url=t.url),void 0!==t.deviceId&&(e.deviceId=t.deviceId),!1!==t.firstRequest&&(e.firstRequest=t.firstRequest),0!==t.duration&&(e.duration=t.duration),0!==t.unknown0&&(e.unknown0=Math.round(t.unknown0)),""!==t.language&&(e.language=t.language),!1!==t.forceSourceLang&&(e.forceSourceLang=t.forceSourceLang),0!==t.unknown1&&(e.unknown1=Math.round(t.unknown1)),t.translationHelp?.length&&(e.translationHelp=t.translationHelp.map((t=>i.toJSON(t)))),""!==t.responseLanguage&&(e.responseLanguage=t.responseLanguage),0!==t.unknown2&&(e.unknown2=Math.round(t.unknown2)),0!==t.unknown3&&(e.unknown3=Math.round(t.unknown3)),!1!==t.bypassCache&&(e.bypassCache=t.bypassCache),e},create:t=>r.fromPartial(t??{}),fromPartial(t){const e={url:"",deviceId:void 0,firstRequest:!1,duration:0,unknown0:0,language:"",forceSourceLang:!1,unknown1:0,translationHelp:[],responseLanguage:"",unknown2:0,unknown3:0,bypassCache:!1};return e.url=t.url??"",e.deviceId=t.deviceId??void 0,e.firstRequest=t.firstRequest??!1,e.duration=t.duration??0,e.unknown0=t.unknown0??0,e.language=t.language??"",e.forceSourceLang=t.forceSourceLang??!1,e.unknown1=t.unknown1??0,e.translationHelp=t.translationHelp?.map((t=>i.fromPartial(t)))||[],e.responseLanguage=t.responseLanguage??"",e.unknown2=t.unknown2??0,e.unknown3=t.unknown3??0,e.bypassCache=t.bypassCache??!1,e}};const s={encode:(t,o=e.Writer.create())=>(void 0!==t.url&&o.uint32(10).string(t.url),void 0!==t.duration&&o.uint32(17).double(t.duration),0!==t.status&&o.uint32(32).int32(t.status),void 0!==t.remainingTime&&o.uint32(40).int32(t.remainingTime),void 0!==t.unknown0&&o.uint32(48).int32(t.unknown0),""!==t.translationId&&o.uint32(58).string(t.translationId),void 0!==t.language&&o.uint32(66).string(t.language),void 0!==t.message&&o.uint32(74).string(t.message),o),decode(t,o){const n=t instanceof e.Reader?t:e.Reader.create(t);let a=void 0===o?n.len:n.pos+o;const i={url:void 0,duration:void 0,status:0,remainingTime:void 0,unknown0:void 0,translationId:"",language:void 0,message:void 0};for(;n.pos>>3){case 1:if(10!==t)break;i.url=n.string();continue;case 2:if(17!==t)break;i.duration=n.double();continue;case 4:if(32!==t)break;i.status=n.int32();continue;case 5:if(40!==t)break;i.remainingTime=n.int32();continue;case 6:if(48!==t)break;i.unknown0=n.int32();continue;case 7:if(58!==t)break;i.translationId=n.string();continue;case 8:if(66!==t)break;i.language=n.string();continue;case 9:if(74!==t)break;i.message=n.string();continue}if(4==(7&t)||0===t)break;n.skipType(7&t)}return i},fromJSON:t=>({url:b(t.url)?globalThis.String(t.url):void 0,duration:b(t.duration)?globalThis.Number(t.duration):void 0,status:b(t.status)?globalThis.Number(t.status):0,remainingTime:b(t.remainingTime)?globalThis.Number(t.remainingTime):void 0,unknown0:b(t.unknown0)?globalThis.Number(t.unknown0):void 0,translationId:b(t.translationId)?globalThis.String(t.translationId):"",language:b(t.language)?globalThis.String(t.language):void 0,message:b(t.message)?globalThis.String(t.message):void 0}),toJSON(t){const e={};return void 0!==t.url&&(e.url=t.url),void 0!==t.duration&&(e.duration=t.duration),0!==t.status&&(e.status=Math.round(t.status)),void 0!==t.remainingTime&&(e.remainingTime=Math.round(t.remainingTime)),void 0!==t.unknown0&&(e.unknown0=Math.round(t.unknown0)),""!==t.translationId&&(e.translationId=t.translationId),void 0!==t.language&&(e.language=t.language),void 0!==t.message&&(e.message=t.message),e},create:t=>s.fromPartial(t??{}),fromPartial(t){const e={url:void 0,duration:void 0,status:0,remainingTime:void 0,unknown0:void 0,translationId:"",language:void 0,message:void 0};return e.url=t.url??void 0,e.duration=t.duration??void 0,e.status=t.status??0,e.remainingTime=t.remainingTime??void 0,e.unknown0=t.unknown0??void 0,e.translationId=t.translationId??"",e.language=t.language??void 0,e.message=t.message??void 0,e}};const l={encode:(t,o=e.Writer.create())=>(""!==t.language&&o.uint32(10).string(t.language),""!==t.url&&o.uint32(18).string(t.url),0!==t.unknown0&&o.uint32(24).int32(t.unknown0),""!==t.translatedLanguage&&o.uint32(34).string(t.translatedLanguage),""!==t.translatedUrl&&o.uint32(42).string(t.translatedUrl),0!==t.unknown1&&o.uint32(48).int32(t.unknown1),0!==t.unknown2&&o.uint32(56).int32(t.unknown2),o),decode(t,o){const n=t instanceof e.Reader?t:e.Reader.create(t);let a=void 0===o?n.len:n.pos+o;const i={language:"",url:"",unknown0:0,translatedLanguage:"",translatedUrl:"",unknown1:0,unknown2:0};for(;n.pos>>3){case 1:if(10!==t)break;i.language=n.string();continue;case 2:if(18!==t)break;i.url=n.string();continue;case 3:if(24!==t)break;i.unknown0=n.int32();continue;case 4:if(34!==t)break;i.translatedLanguage=n.string();continue;case 5:if(42!==t)break;i.translatedUrl=n.string();continue;case 6:if(48!==t)break;i.unknown1=n.int32();continue;case 7:if(56!==t)break;i.unknown2=n.int32();continue}if(4==(7&t)||0===t)break;n.skipType(7&t)}return i},fromJSON:t=>({language:b(t.language)?globalThis.String(t.language):"",url:b(t.url)?globalThis.String(t.url):"",unknown0:b(t.unknown0)?globalThis.Number(t.unknown0):0,translatedLanguage:b(t.translatedLanguage)?globalThis.String(t.translatedLanguage):"",translatedUrl:b(t.translatedUrl)?globalThis.String(t.translatedUrl):"",unknown1:b(t.unknown1)?globalThis.Number(t.unknown1):0,unknown2:b(t.unknown2)?globalThis.Number(t.unknown2):0}),toJSON(t){const e={};return""!==t.language&&(e.language=t.language),""!==t.url&&(e.url=t.url),0!==t.unknown0&&(e.unknown0=Math.round(t.unknown0)),""!==t.translatedLanguage&&(e.translatedLanguage=t.translatedLanguage),""!==t.translatedUrl&&(e.translatedUrl=t.translatedUrl),0!==t.unknown1&&(e.unknown1=Math.round(t.unknown1)),0!==t.unknown2&&(e.unknown2=Math.round(t.unknown2)),e},create:t=>l.fromPartial(t??{}),fromPartial(t){const e={language:"",url:"",unknown0:0,translatedLanguage:"",translatedUrl:"",unknown1:0,unknown2:0};return e.language=t.language??"",e.url=t.url??"",e.unknown0=t.unknown0??0,e.translatedLanguage=t.translatedLanguage??"",e.translatedUrl=t.translatedUrl??"",e.unknown1=t.unknown1??0,e.unknown2=t.unknown2??0,e}};const d={encode:(t,o=e.Writer.create())=>(""!==t.url&&o.uint32(10).string(t.url),""!==t.language&&o.uint32(18).string(t.language),o),decode(t,o){const n=t instanceof e.Reader?t:e.Reader.create(t);let a=void 0===o?n.len:n.pos+o;const i={url:"",language:""};for(;n.pos>>3){case 1:if(10!==t)break;i.url=n.string();continue;case 2:if(18!==t)break;i.language=n.string();continue}if(4==(7&t)||0===t)break;n.skipType(7&t)}return i},fromJSON:t=>({url:b(t.url)?globalThis.String(t.url):"",language:b(t.language)?globalThis.String(t.language):""}),toJSON(t){const e={};return""!==t.url&&(e.url=t.url),""!==t.language&&(e.language=t.language),e},create:t=>d.fromPartial(t??{}),fromPartial(t){const e={url:"",language:""};return e.url=t.url??"",e.language=t.language??"",e}};const u={encode(t,o=e.Writer.create()){!1!==t.waiting&&o.uint32(8).bool(t.waiting);for(const e of t.subtitles)l.encode(e,o.uint32(18).fork()).ldelim();return o},decode(t,o){const n=t instanceof e.Reader?t:e.Reader.create(t);let a=void 0===o?n.len:n.pos+o;const i={waiting:!1,subtitles:[]};for(;n.pos>>3){case 1:if(8!==t)break;i.waiting=n.bool();continue;case 2:if(18!==t)break;i.subtitles.push(l.decode(n,n.uint32()));continue}if(4==(7&t)||0===t)break;n.skipType(7&t)}return i},fromJSON:t=>({waiting:!!b(t.waiting)&&globalThis.Boolean(t.waiting),subtitles:globalThis.Array.isArray(t?.subtitles)?t.subtitles.map((t=>l.fromJSON(t))):[]}),toJSON(t){const e={};return!1!==t.waiting&&(e.waiting=t.waiting),t.subtitles?.length&&(e.subtitles=t.subtitles.map((t=>l.toJSON(t)))),e},create:t=>u.fromPartial(t??{}),fromPartial(t){const e={waiting:!1,subtitles:[]};return e.waiting=t.waiting??!1,e.subtitles=t.subtitles?.map((t=>l.fromPartial(t)))||[],e}};const c={encode:(t,o=e.Writer.create())=>(""!==t.url&&o.uint32(10).string(t.url),""!==t.timestamp&&o.uint32(18).string(t.timestamp),o),decode(t,o){const n=t instanceof e.Reader?t:e.Reader.create(t);let a=void 0===o?n.len:n.pos+o;const i={url:"",timestamp:""};for(;n.pos>>3){case 1:if(10!==t)break;i.url=n.string();continue;case 2:if(18!==t)break;i.timestamp=n.string();continue}if(4==(7&t)||0===t)break;n.skipType(7&t)}return i},fromJSON:t=>({url:b(t.url)?globalThis.String(t.url):"",timestamp:b(t.timestamp)?globalThis.String(t.timestamp):""}),toJSON(t){const e={};return""!==t.url&&(e.url=t.url),""!==t.timestamp&&(e.timestamp=t.timestamp),e},create:t=>c.fromPartial(t??{}),fromPartial(t){const e={url:"",timestamp:""};return e.url=t.url??"",e.timestamp=t.timestamp??"",e}};const h={encode:(t,o=e.Writer.create())=>(""!==t.url&&o.uint32(10).string(t.url),""!==t.language&&o.uint32(18).string(t.language),""!==t.responseLanguage&&o.uint32(26).string(t.responseLanguage),o),decode(t,o){const n=t instanceof e.Reader?t:e.Reader.create(t);let a=void 0===o?n.len:n.pos+o;const i={url:"",language:"",responseLanguage:""};for(;n.pos>>3){case 1:if(10!==t)break;i.url=n.string();continue;case 2:if(18!==t)break;i.language=n.string();continue;case 3:if(26!==t)break;i.responseLanguage=n.string();continue}if(4==(7&t)||0===t)break;n.skipType(7&t)}return i},fromJSON:t=>({url:b(t.url)?globalThis.String(t.url):"",language:b(t.language)?globalThis.String(t.language):"",responseLanguage:b(t.responseLanguage)?globalThis.String(t.responseLanguage):""}),toJSON(t){const e={};return""!==t.url&&(e.url=t.url),""!==t.language&&(e.language=t.language),""!==t.responseLanguage&&(e.responseLanguage=t.responseLanguage),e},create:t=>h.fromPartial(t??{}),fromPartial(t){const e={url:"",language:"",responseLanguage:""};return e.url=t.url??"",e.language=t.language??"",e.responseLanguage=t.responseLanguage??"",e}};const p={encode:(t,o=e.Writer.create())=>(0!==t.interval&&o.uint32(8).int32(t.interval),void 0!==t.translatedInfo&&c.encode(t.translatedInfo,o.uint32(18).fork()).ldelim(),void 0!==t.pingId&&o.uint32(24).int32(t.pingId),o),decode(t,o){const n=t instanceof e.Reader?t:e.Reader.create(t);let a=void 0===o?n.len:n.pos+o;const i={interval:0,translatedInfo:void 0,pingId:void 0};for(;n.pos>>3){case 1:if(8!==t)break;i.interval=n.int32();continue;case 2:if(18!==t)break;i.translatedInfo=c.decode(n,n.uint32());continue;case 3:if(24!==t)break;i.pingId=n.int32();continue}if(4==(7&t)||0===t)break;n.skipType(7&t)}return i},fromJSON:t=>({interval:b(t.interval)?a(t.interval):0,translatedInfo:b(t.translatedInfo)?c.fromJSON(t.translatedInfo):void 0,pingId:b(t.pingId)?globalThis.Number(t.pingId):void 0}),toJSON(t){const e={};return 0!==t.interval&&(e.interval=function(t){switch(t){case n.NO_CONNECTION:return"NO_CONNECTION";case n.TRANSLATING:return"TRANSLATING";case n.STREAMING:return"STREAMING";case n.UNRECOGNIZED:default:return"UNRECOGNIZED"}}(t.interval)),void 0!==t.translatedInfo&&(e.translatedInfo=c.toJSON(t.translatedInfo)),void 0!==t.pingId&&(e.pingId=Math.round(t.pingId)),e},create:t=>p.fromPartial(t??{}),fromPartial(t){const e={interval:0,translatedInfo:void 0,pingId:void 0};return e.interval=t.interval??0,e.translatedInfo=void 0!==t.translatedInfo&&null!==t.translatedInfo?c.fromPartial(t.translatedInfo):void 0,e.pingId=t.pingId??void 0,e}};const g={encode:(t,o=e.Writer.create())=>(0!==t.pingId&&o.uint32(8).int32(t.pingId),o),decode(t,o){const n=t instanceof e.Reader?t:e.Reader.create(t);let a=void 0===o?n.len:n.pos+o;const i={pingId:0};for(;n.pos>>3){case 1:if(8!==t)break;i.pingId=n.int32();continue}if(4==(7&t)||0===t)break;n.skipType(7&t)}return i},fromJSON:t=>({pingId:b(t.pingId)?globalThis.Number(t.pingId):0}),toJSON(t){const e={};return 0!==t.pingId&&(e.pingId=Math.round(t.pingId)),e},create:t=>g.fromPartial(t??{}),fromPartial(t){const e={pingId:0};return e.pingId=t.pingId??0,e}};const m={encode:(t,o=e.Writer.create())=>(""!==t.uuid&&o.uint32(10).string(t.uuid),""!==t.module&&o.uint32(18).string(t.module),o),decode(t,o){const n=t instanceof e.Reader?t:e.Reader.create(t);let a=void 0===o?n.len:n.pos+o;const i={uuid:"",module:""};for(;n.pos>>3){case 1:if(10!==t)break;i.uuid=n.string();continue;case 2:if(18!==t)break;i.module=n.string();continue}if(4==(7&t)||0===t)break;n.skipType(7&t)}return i},fromJSON:t=>({uuid:b(t.uuid)?globalThis.String(t.uuid):"",module:b(t.module)?globalThis.String(t.module):""}),toJSON(t){const e={};return""!==t.uuid&&(e.uuid=t.uuid),""!==t.module&&(e.module=t.module),e},create:t=>m.fromPartial(t??{}),fromPartial(t){const e={uuid:"",module:""};return e.uuid=t.uuid??"",e.module=t.module??"",e}};const v={encode:(t,o=e.Writer.create())=>(""!==t.secretKey&&o.uint32(10).string(t.secretKey),0!==t.expires&&o.uint32(16).int32(t.expires),o),decode(t,o){const n=t instanceof e.Reader?t:e.Reader.create(t);let a=void 0===o?n.len:n.pos+o;const i={secretKey:"",expires:0};for(;n.pos>>3){case 1:if(10!==t)break;i.secretKey=n.string();continue;case 2:if(16!==t)break;i.expires=n.int32();continue}if(4==(7&t)||0===t)break;n.skipType(7&t)}return i},fromJSON:t=>({secretKey:b(t.secretKey)?globalThis.String(t.secretKey):"",expires:b(t.expires)?globalThis.Number(t.expires):0}),toJSON(t){const e={};return""!==t.secretKey&&(e.secretKey=t.secretKey),0!==t.expires&&(e.expires=Math.round(t.expires)),e},create:t=>v.fromPartial(t??{}),fromPartial(t){const e={secretKey:"",expires:0};return e.secretKey=t.secretKey??"",e.expires=t.expires??0,e}};function b(t){return null!=t}const f={encodeTranslationRequest:(t,e,o,n,a)=>r.encode({url:t,firstRequest:!0,duration:e,unknown0:1,language:o,forceSourceLang:!1,unknown1:0,translationHelp:a||[],responseLanguage:n,unknown2:0,unknown3:1,bypassCache:!1}).finish(),decodeTranslationResponse:t=>s.decode(new Uint8Array(t)),encodeSubtitlesRequest:(t,e)=>d.encode({url:t,language:e}).finish(),decodeSubtitlesResponse:t=>u.decode(new Uint8Array(t)),encodeStreamPingRequest:t=>g.encode({pingId:t}).finish(),encodeStreamRequest:(t,e,o)=>h.encode({url:t,language:e,responseLanguage:o}).finish(),decodeStreamResponse:t=>p.decode(new Uint8Array(t)),encodeYandexSessionRequest:(t,e)=>m.encode({uuid:t,module:e}).finish(),decodeYandexSessionResponse:t=>v.decode(new Uint8Array(t))},y={host:"api.browser.yandex.ru",hostVOT:"vot-api.toil.cc/v1",mediaProxy:"media-proxy.toil.cc",userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 YaBrowser/24.7.0.0 Safari/537.36",componentVersion:"24.7.3.1081",hmac:"bt8xH3VOlb4mqf0nqAibnDOoiPlXsisf",defaultDuration:343},w=new TextEncoder;async function x(t,e,o){const n=await crypto.subtle.importKey("raw",w.encode(e),{name:"HMAC",hash:{name:t}},!1,["sign","verify"]);return await crypto.subtle.sign("HMAC",n,o)}async function S(t){const e=await x("SHA-256",y.hmac,t);return new Uint8Array(e).reduce(((t,e)=>t+e.toString(16).padStart(2,"0")),"")}var k,T;!function(t){t.custom="custom",t.directlink="custom",t.youtube="youtube",t.piped="piped",t.invidious="invidious",t.vk="vk",t.nine_gag="nine_gag",t.gag="nine_gag",t.twitch="twitch",t.proxitok="proxitok",t.tiktok="tiktok",t.vimeo="vimeo",t.xvideos="xvideos",t.pornhub="pornhub",t.twitter="twitter",t.rumble="rumble",t.facebook="facebook",t.rutube="rutube",t.coub="coub",t.bilibili="bilibili",t.mail_ru="mailru",t.mailru="mailru",t.bitchute="bitchute",t.eporner="eporner",t.peertube="peertube",t.dailymotion="dailymotion",t.trovo="trovo",t.yandexdisk="yandexdisk",t.ok_ru="okru",t.okru="okru",t.googledrive="googledrive",t.bannedvideo="bannedvideo",t.weverse="weverse",t.newgrounds="newgrounds",t.egghead="egghead",t.youku="youku",t.archive="archive",t.kodik="kodik",t.patreon="patreon",t.reddit="reddit",t.kick="kick",t.apple_developer="apple_developer",t.appledeveloper="apple_developer",t.poketube="poketube",t.epicgames="epicgames",t.nineanimetv="nineanimetv",t.odysee="odysee",t.coursehunter="coursehunter",t.udemy="udemy",t.coursera="coursera",t.sap="sap",t.watchpornto="watchpornto",t.linkedin="linkedin"}(k||(k={})),function(t){t[t.FAILED=0]="FAILED",t[t.FINISHED=1]="FINISHED",t[t.WAITING=2]="WAITING",t[t.LONG_WAITING=3]="LONG_WAITING",t[t.PART_CONTENT=5]="PART_CONTENT",t[t.LONG_WAITING_2=6]="LONG_WAITING_2"}(T||(T={}));const V={afr:"af",aka:"ak",alb:"sq",amh:"am",ara:"ar",arm:"hy",asm:"as",aym:"ay",aze:"az",baq:"eu",bel:"be",ben:"bn",bos:"bs",bul:"bg",bur:"my",cat:"ca",chi:"zh",cos:"co",cze:"cs",dan:"da",div:"dv",dut:"nl",eng:"en",epo:"eo",est:"et",ewe:"ee",fin:"fi",fre:"fr",fry:"fy",geo:"ka",ger:"de",gla:"gd",gle:"ga",glg:"gl",gre:"el",grn:"gn",guj:"gu",hat:"ht",hau:"ha",hin:"hi",hrv:"hr",hun:"hu",ibo:"ig",ice:"is",ind:"id",ita:"it",jav:"jv",jpn:"ja",kan:"kn",kaz:"kk",khm:"km",kin:"rw",kir:"ky",kor:"ko",kur:"ku",lao:"lo",lat:"la",lav:"lv",lin:"ln",lit:"lt",ltz:"lb",lug:"lg",mac:"mk",mal:"ml",mao:"mi",mar:"mr",may:"ms",mlg:"mg",mlt:"mt",mon:"mn",nep:"ne",nor:"no",nya:"ny",ori:"or",orm:"om",pan:"pa",per:"fa",pol:"pl",por:"pt",pus:"ps",que:"qu",rum:"ro",rus:"ru",san:"sa",sin:"si",slo:"sk",slv:"sl",smo:"sm",sna:"sn",snd:"sd",som:"so",sot:"st",spa:"es",srp:"sr",sun:"su",swa:"sw",swe:"sv",tam:"ta",tat:"tt",tel:"te",tgk:"tg",tha:"th",tir:"ti",tso:"ts",tuk:"tk",tur:"tr",uig:"ug",ukr:"uk",urd:"ur",uzb:"uz",vie:"vi",wel:"cy",xho:"xh",yid:"yi",yor:"yo",zul:"zu"};async function L(t,e={headers:{"User-Agent":y.userAgent}}){const{timeout:o=3e3,...n}=e,a=new AbortController,i=setTimeout((()=>a.abort()),o),r=await fetch(t,{signal:a.signal,...n});return clearTimeout(i),r}function C(t){return 3===t.length?V[t]:t.toLowerCase().split(/[_;-]/)[0].trim()}function M(t,e="mp4"){return`https://${y.mediaProxy}/v1/proxy/video.${e}?url=${encodeURIComponent(t.href)}&origin=${t.origin}&referer=${t.origin}`}const A=["yewtu.be","yt.artemislena.eu","invidious.flokinet.to","iv.melmac.space","inv.nadeko.net","inv.tux.pizza","invidious.private.coffee","yt.drgnz.club","vid.puffyan.us","invidious.dhusch.de"],O=["piped.video","piped.tokhmi.xyz","piped.moomoo.me","piped.syncpundit.io","piped.mha.fi","watch.whatever.social","piped.garudalinux.org","efy.piped.pages.dev","watch.leptons.xyz","piped.lunar.icu","yt.dc09.ru","piped.mint.lgbt","il.ax","piped.privacy.com.de","piped.esmailelbob.xyz","piped.projectsegfau.lt","piped.in.projectsegfau.lt","piped.us.projectsegfau.lt","piped.privacydev.net","piped.palveluntarjoaja.eu","piped.smnz.de","piped.adminforge.de","piped.qdi.fi","piped.hostux.net","piped.chauvet.pro","piped.jotoma.de","piped.pfcd.me","piped.frontendfriendly.xyz"],I=[{additionalData:"mobile",host:k.youtube,url:"https://youtu.be/",match:/^m.youtube.com$/,selector:"shorts-video #player"},{additionalData:"mobile",host:k.youtube,url:"https://youtu.be/",match:/^m.youtube.com$/,selector:".player-container"},{host:k.youtube,url:"https://youtu.be/",match:/^(www.)?youtube(-nocookie|kids)?.com$/,selector:".html5-video-container:not(#inline-player *)"},{host:k.invidious,url:"https://youtu.be/",match:A,selector:"#player"},{host:k.piped,url:"https://youtu.be/",match:O,selector:".shaka-video-container"},{host:k.poketube,url:"https://youtu.be/",match:["poketube.fun","pt.sudovanilla.org","poke.ggtyler.dev","poke.uk2.littlekai.co.uk","poke.blahai.gay"],selector:".video-player-container"},{additionalData:"mobile",host:k.vk,url:"https://vk.com/video?z=",match:/^m.vk.(com|ru)$/,selector:"vk-video-player",shadowRoot:!0},{additionalData:"clips",host:k.vk,url:"https://vk.com/video?z=",match:/^(www.|m.)?vk.(com|ru)$/,selector:'div[data-testid="clipcontainer-video"]'},{host:k.vk,url:"https://vk.com/video?z=",match:/^(www.|m.)?vk.(com|ru)$/,selector:".videoplayer_media"},{host:k.nine_gag,url:"https://9gag.com/gag/",match:/^9gag.com$/,selector:".video-post"},{host:k.twitch,url:"https://twitch.tv/",match:[/^m.twitch.tv$/,/^(www.)?twitch.tv$/,/^clips.twitch.tv$/,/^player.twitch.tv$/],selector:".video-ref, main > div > section > div > div > div"},{host:k.proxitok,url:"https://www.tiktok.com/",match:["proxitok.pabloferreiro.es","proxitok.pussthecat.org","tok.habedieeh.re","proxitok.esmailelbob.xyz","proxitok.privacydev.net","tok.artemislena.eu","tok.adminforge.de","tt.vern.cc","cringe.whatever.social","proxitok.lunar.icu","proxitok.privacy.com.de"],selector:".column.has-text-centered"},{host:k.tiktok,url:"https://www.tiktok.com/",match:/^(www.)?tiktok.com$/,selector:null},{host:k.vimeo,url:"https://vimeo.com/",match:/^vimeo.com$/,selector:".player"},{host:k.vimeo,url:"https://player.vimeo.com/",match:/^player.vimeo.com$/,selector:".player"},{host:k.xvideos,url:"https://www.xvideos.com/",match:/^(www.)?(xvideos|xv-ru).com$/,selector:".video-bg-pic"},{host:k.pornhub,url:"https://rt.pornhub.com/view_video.php?viewkey=",match:/^[a-z]+.pornhub.com$/,selector:".mainPlayerDiv > .video-element-wrapper-js > div",eventSelector:".mgp_eventCatcher"},{additionalData:"embed",host:k.pornhub,url:"https://rt.pornhub.com/view_video.php?viewkey=",match:t=>t.host.includes("pornhub.com")&&t.pathname.startsWith("/embed/"),selector:"#player"},{host:k.twitter,url:"https://twitter.com/i/status/",match:/^(twitter|x).com$/,selector:'div[data-testid="videoComponent"] > div:nth-child(1) > div',eventSelector:'div[data-testid="videoPlayer"]'},{host:k.rumble,url:"https://rumble.com/",match:/^rumble.com$/,selector:"#videoPlayer > .videoPlayer-Rumble-cls > div"},{host:k.facebook,url:"https://facebook.com/",match:t=>t.host.includes("facebook.com")&&t.pathname.includes("/videos/"),selector:'div[role="main"] div[data-pagelet$="video" i]'},{additionalData:"reels",host:k.facebook,url:"https://facebook.com/",match:t=>t.host.includes("facebook.com")&&t.pathname.includes("/reel/"),selector:'div[role="main"]'},{host:k.rutube,url:"https://rutube.ru/video/",match:/^rutube.ru$/,selector:".video-player > div > div > div:nth-child(2)"},{additionalData:"embed",host:k.rutube,url:"https://rutube.ru/video/",match:/^rutube.ru$/,selector:"#app > div > div"},{host:k.bilibili,url:"https://www.bilibili.com/video/",match:/^(www|m|player).bilibili.com$/,selector:".bpx-player-video-wrap"},{additionalData:"old",host:k.bilibili,url:"https://www.bilibili.com/video/",match:/^(www|m).bilibili.com$/,selector:null},{host:k.mailru,url:"https://my.mail.ru/",match:/^my.mail.ru$/,selector:"#b-video-wrapper"},{host:k.bitchute,url:"https://www.bitchute.com/video/",match:/^(www.)?bitchute.com$/,selector:".video-js"},{host:k.eporner,url:"https://www.eporner.com/",match:/^(www.)?eporner.com$/,selector:".vjs-v7"},{host:k.peertube,url:"stub",match:["peertube.1312.media","tube.shanti.cafe","bee-tube.fr","video.sadmin.io","dalek.zone","review.peertube.biz","peervideo.club","tube.la-dina.net","peertube.tmp.rcp.tf","peertube.su","video.blender.org","videos.viorsan.com","tube-sciences-technologies.apps.education.fr","tube-numerique-educatif.apps.education.fr","tube-arts-lettres-sciences-humaines.apps.education.fr","beetoons.tv","comics.peertube.biz","makertube.net"],selector:".vjs-v7"},{host:k.dailymotion,url:"https://dai.ly/",match:/^geo([\d]+)?.dailymotion.com$/,selector:".player"},{host:k.trovo,url:"https://trovo.live/s/",match:/^trovo.live$/,selector:".player-video"},{host:k.yandexdisk,url:"https://yadi.sk/i/",match:/^disk.yandex.ru$/,selector:".video-player__player > div:nth-child(1)",eventSelector:".video-player__player"},{host:k.okru,url:"https://ok.ru/video/",match:/^ok.ru$/,selector:".html5-vpl_vid"},{host:k.googledrive,url:"https://drive.google.com/file/d/",match:/^youtube.googleapis.com$/,selector:".html5-video-container"},{host:k.bannedvideo,url:"https://madmaxworld.tv/watch?id=",match:/^(www.)?banned.video|madmaxworld.tv$/,selector:".vjs-v7",needExtraData:!0},{host:k.weverse,url:"https://weverse.io/",match:/^weverse.io$/,selector:".webplayer-internal-source-wrapper",needExtraData:!0},{host:k.newgrounds,url:"https://www.newgrounds.com/",match:/^(www.)?newgrounds.com$/,selector:".ng-video-player"},{host:k.egghead,url:"https://egghead.io/",match:/^egghead.io$/,selector:".cueplayer-react-video-holder"},{host:k.youku,url:"https://v.youku.com/",match:/^v.youku.com$/,selector:"#ykPlayer"},{host:k.archive,url:"https://archive.org/details/",match:/^archive.org$/,selector:".jw-media"},{host:k.kodik,url:"stub",match:/^kodik.(info|biz|cc)$/,selector:".fp-player",needExtraData:!0},{host:k.patreon,url:"stub",match:/^(www.)?patreon.com$/,selector:'div[data-tag="post-card"] div[elevation="subtle"] > div > div > div > div',needExtraData:!0},{host:k.reddit,url:"stub",match:/^(www.|new.|old.)?reddit.com$/,selector:".reddit-video-player-root",needExtraData:!0},{host:k.kick,url:"https://kick.com/",match:/^kick.com$/,selector:"#injected-embedded-channel-player-video > div",needExtraData:!0},{host:k.appledeveloper,url:"https://developer.apple.com/",match:/^developer.apple.com$/,selector:".developer-video-player",needExtraData:!0},{host:k.epicgames,url:"https://dev.epicgames.com/community/learning/",match:/^dev.epicgames.com$/,selector:".vjs-v7",needExtraData:!0},{host:k.nineanimetv,url:"https://9animetv.to/watch/",match:/^rapid-cloud.co$/,selector:".jw-media",needExtraData:!0},{host:k.odysee,url:"stub",match:/^odysee.com$/,selector:".vjs-v7",needExtraData:!0},{host:k.coursehunter,url:"https://coursehunter.net/course/",match:/^coursehunter.net$/,selector:"#oframeplayer > pjsdiv:nth-of-type(1)",needExtraData:!0},{host:k.udemy,url:"https://www.udemy.com/",match:/udemy.com$/,selector:'div[data-purpose="curriculum-item-viewer-content"] > section > div > div > div > div:nth-of-type(2)',needExtraData:!0},{host:k.coursera,url:"https://www.coursera.org/",match:/coursera.org$/,selector:".vjs-v6",needExtraData:!0},{host:k.sap,url:"https://learning.sap.com/courses/",match:/^learning.sap.com$/,selector:".playkit-container",eventSelector:".playkit-player",needExtraData:!0},{host:k.watchpornto,url:"https://watchporn.to/",match:/^watchporn.to$/,selector:".fp-player"},{host:k.linkedin,url:"https://www.linkedin.com/learning/",match:/^(www)?.linkedin.com$/,selector:".vjs-v7",needExtraData:!0},{host:k.custom,url:"stub",match:t=>/([^.]+).(mp4|webm)/.test(t.pathname),rawResult:!0}],P=JSON.parse('{"__version__":5,"recommended":"recommended","translateVideo":"Translate video","disableTranslate":"Turn off","translationSettings":"Translation settings","subtitlesSettings":"Subtitles settings","about":"About extension","resetSettings":"Reset settings","videoBeingTranslated":"The video is being translated","videoLanguage":"Video language","translationLanguage":"Translation language","translationTake":"The translation will take","translationTakeMoreThanHour":"The translation will take more than an hour","translationTakeAboutMinute":"The translation will take about a minute","translationTakeFewMinutes":"The translation will take a few minutes","translationTakeApproximatelyMinutes":"The translation will take approximately {0} minutes","translationTakeApproximatelyMinute":"The translation will take approximately {0} minutes","unSupportedExtensionError":"Error! {0} is not supported by this version of the extension!\\n\\nPlease use the cloudflare version of the VOT extension.","requestTranslationFailed":"Failed to request video translation","audioNotReceived":"Audio link not received","grantPermissionToAutoPlay":"Grant permission to autoplay","audioFormatNotSupported":"The audio format is not supported","VOTAutoTranslate":"Translate on open","VOTDontTranslateYourLang":"Do not translate from my language","VOTVolume":"Video volume","VOTVolumeTranslation":"Translation Volume","VOTAutoSetVolume":"Reduce video volume to ","VOTShowVideoSlider":"Video volume slider","VOTSyncVolume":"Link translation and video volume","VOTAudioProxy":"Proxy received audio","VOTDisableFromYourLang":"You have disabled the translation of the video in your language","VOTLiveNotSupported":"Translation of live streams is not supported","VOTPremiere":"Wait for the premiere to end before translating","VOTVideoIsTooLong":"Video is too long","VOTNoVideoIDFound":"No video ID found","VOTSubtitles":"Subtitles","VOTSubtitlesDisabled":"Disabled","VOTSubtitlesMaxLength":"Subtitles max length","VOTHighlightWords":"Highlight words","VOTTranslatedFrom":"translated from","VOTAutogenerated":"autogenerated","VOTSettings":"VOT Settings","VOTMenuLanguage":"Menu language","VOTAuthors":"Authors","VOTVersion":"Version","VOTLoader":"Loader","VOTBrowser":"Browser","VOTShowPiPButton":"Show PiP button","langs":{"auto":"Auto","af":"Afrikaans","ak":"Akan","sq":"Albanian","am":"Amharic","ar":"Arabic","hy":"Armenian","as":"Assamese","ay":"Aymara","az":"Azerbaijani","bn":"Bangla","eu":"Basque","be":"Belarusian","bho":"Bhojpuri","bs":"Bosnian","bg":"Bulgarian","my":"Burmese","ca":"Catalan","ceb":"Cebuano","zh":"Chinese","zh-Hans":"Chinese (Simplified)","zh-Hant":"Chinese (Traditional)","co":"Corsican","hr":"Croatian","cs":"Czech","da":"Danish","dv":"Divehi","nl":"Dutch","en":"English","eo":"Esperanto","et":"Estonian","ee":"Ewe","fil":"Filipino","fi":"Finnish","fr":"French","gl":"Galician","lg":"Ganda","ka":"Georgian","de":"German","el":"Greek","gn":"Guarani","gu":"Gujarati","ht":"Haitian Creole","ha":"Hausa","haw":"Hawaiian","iw":"Hebrew","hi":"Hindi","hmn":"Hmong","hu":"Hungarian","is":"Icelandic","ig":"Igbo","id":"Indonesian","ga":"Irish","it":"Italian","ja":"Japanese","jv":"Javanese","kn":"Kannada","kk":"Kazakh","km":"Khmer","rw":"Kinyarwanda","ko":"Korean","kri":"Krio","ku":"Kurdish","ky":"Kyrgyz","lo":"Lao","la":"Latin","lv":"Latvian","ln":"Lingala","lt":"Lithuanian","lb":"Luxembourgish","mk":"Macedonian","mg":"Malagasy","ms":"Malay","ml":"Malayalam","mt":"Maltese","mi":"Māori","mr":"Marathi","mn":"Mongolian","ne":"Nepali","nso":"Northern Sotho","no":"Norwegian","ny":"Nyanja","or":"Odia","om":"Oromo","ps":"Pashto","fa":"Persian","pl":"Polish","pt":"Portuguese","pa":"Punjabi","qu":"Quechua","ro":"Romanian","ru":"Russian","sm":"Samoan","sa":"Sanskrit","gd":"Scottish Gaelic","sr":"Serbian","sn":"Shona","sd":"Sindhi","si":"Sinhala","sk":"Slovak","sl":"Slovenian","so":"Somali","st":"Southern Sotho","es":"Spanish","su":"Sundanese","sw":"Swahili","sv":"Swedish","tg":"Tajik","ta":"Tamil","tt":"Tatar","te":"Telugu","th":"Thai","ti":"Tigrinya","ts":"Tsonga","tr":"Turkish","tk":"Turkmen","uk":"Ukrainian","ur":"Urdu","ug":"Uyghur","uz":"Uzbek","vi":"Vietnamese","cy":"Welsh","fy":"Western Frisian","xh":"Xhosa","yi":"Yiddish","yo":"Yoruba","zu":"Zulu"},"udemyModuleArgsNotFound":"Could not get udemy module data due to the fact that ModuleArgs was not found","VOTTranslationHelpNull":"Could not get the data required for the translate","streamNoConnectionToServer":"There is no connection to the server","searchField":"Search...","VOTTranslateAPIErrors":"Translate errors from the API","VOTTranslationService":"Translation Service","VOTDetectService":"Detect Service","VOTTranslatingError":"Translating the error","VOTProxyWorkerHost":"Enter the proxy worker address","VOTM3u8ProxyHost":"Enter the address of the m3u8 proxy worker","proxySettings":"Proxy Settings","translationTakeApproximatelyMinute2":"The translation will take approximately {0} minutes","VOTAudioBooster":"Extended translation volume increase","VOTMediaCSPError":"Failed to load audio (media csp error)","VOTSubtitlesDesign":"Subtitles design","VOTSubtitlesFontSize":"Font size of subtitles","VOTSubtitlesOpacity":"Transparency of the subtitle background","VOTPressNewHotkey":"Press the new hotkey...","VOTCreateTranslationHotkey":"Create Hotkey for Translation","VOTChangeHotkeyWithCurrent":"Change Hotkey (Current: {0})","VOTSubtitlesDownloadFormat":"The format for downloading subtitles","VOTDownloadWithName":"Download files with the video name","VOTUpdateLocaleFiles":"Update localization files","VOTLocaleHash":"Locale hash","VOTUpdatedAt":"Updated at"}'),E={log:(...t)=>{}},_=E,$="media-proxy.toil.cc/v1/proxy/m3u8",N="vot-worker.toil.cc",R="https://vot.toil.cc/v1",D=.15,B="yandex",F="yandex",q={yandex:"https://translate.toil.cc/detect",rustServer:"https://rust-server-531j.onrender.com/detect"},H={yandex:"https://translate.toil.cc/translate",deepl:"https://translate-deepl.toil.cc/translate"},z=new class{constructor(){this.gmSupport="function"==typeof GM_getValue,_.log(`GM Storage Status: ${this.gmSupport}`)}syncGet(t,e=void 0){if(this.gmSupport)return GM_getValue(t,e);const o="number"==typeof e;const n=window.localStorage.getItem(t)??e;return o?Number(n):n}async get(t,e=void 0){if(this.gmSupport)return await GM_getValue(t,e);const o="number"==typeof e;return Promise.resolve(this.syncGet(t,e,o))}syncSet(t,e){return this.gmSupport?GM_setValue(t,e):window.localStorage.setItem(t,e)}async set(t,e){return this.gmSupport?await GM_setValue(t,e):Promise.resolve(this.syncSet(t,e))}syncDelete(t){return this.gmSupport?GM_deleteValue(t):window.localStorage.removeItem(t)}async delete(t){return this.gmSupport?await GM_deleteValue(t):Promise.resolve(this.syncDelete(t))}syncList(){return this.gmSupport?GM_listValues():["autoTranslate","dontTranslateLanguage","dontTranslateYourLang","autoSetVolumeYandexStyle","autoVolume","buttonPos","showVideoSlider","syncVolume","subtitlesMaxLength","highlightWords","responseLanguage","defaultVolume","audioProxy","showPiPButton","translateAPIErrors","translationService","detectService","m3u8ProxyHost","translateProxyEnabled","hotkeyButton","proxyWorkerHost","audioBooster","locale-version","locale-lang","locale-phrases"]}async list(){return this.gmSupport?await GM_listValues():Promise.resolve(this.syncList())}},U="https://raw.githubusercontent.com/ilyhalight/voice-over-translation/master/src/localization",W=["auto","en","ru","af","am","ar","az","bg","bn","bs","ca","cs","cy","da","de","el","es","et","eu","fa","fi","fr","gl","hi","hr","hu","hy","id","it","ja","jv","kk","km","kn","ko","lo","mk","ml","mn","ms","mt","my","ne","nl","pa","pl","pt","ro","si","sk","sl","sq","sr","su","sv","sw","tr","uk","ur","uz","vi","zh","zu"],j=new class{lang="en";locale={};gmValues=["locale-phrases","locale-lang","locale-version","locale-lang-override"];constructor(){const t=z.syncGet("locale-lang-override","auto");this.lang=t&&"auto"!==t?t:(navigator.language||navigator.userLanguage)?.substr(0,2)?.toLowerCase()??"en",this.setLocaleFromJsonString(z.syncGet("locale-phrases",""))}reset(){for(let t=0;tn&&o===this.lang)return;const a=await this.checkUpdates();if(await z.set("locale-updated-at",n),a){_.log("Updating locale...");try{const t=await et(`${U}/locales/${this.lang}.json`);if(200!==t.status)throw t.status;const e=await t.text();await z.set("locale-phrases",e),this.setLocaleFromJsonString(e),await z.set("locale-hash",a),await z.set("locale-lang",this.lang)}catch(t){console.error("[VOT] [localizationProvider] Failed to get locale, cause:",t),this.setLocaleFromJsonString(await z.get("locale-phrases",""))}}}setLocaleFromJsonString(t){try{this.locale=JSON.parse(t)??{}}catch(t){console.error("[VOT] [localizationProvider]",t),this.locale={}}}getFromLocale(t,e){const o=e.split(".").reduce(((t,e)=>{if("object"==typeof t&&t)return t[e]}),t);return void 0===o&&console.warn("[VOT] [localizationProvider] locale",t,"doesn't contain key",e),o}getDefault(t){return this.getFromLocale(P,t)??t}get(t){return this.getFromLocale(this.locale,t)??this.getFromLocale(P,t)??t}},G=navigator.language||navigator.userLanguage,J=G?.substr(0,2)?.toLowerCase()??"en";function K(t){return t.toLowerCase().split(/[_;-]/)[0].trim()}function Y(){return"pictureInPictureEnabled"in document&&document.pictureInPictureEnabled}function Z(){return"undefined"!=typeof Hls&&Hls?.isSupported()?new Hls({debug:!1,lowLatencyMode:!0,backBufferLength:90}):void 0}const Q=new RegExp([/(?:https?|ftp):\/\/\S+/g,/https?:\/\/\S+|www\.\S+/gm,/\b\S+\.\S+/gm,/#[^\s#]+/g,/Auto-generated by YouTube/g,/Provided to YouTube by/g,/Released on/g,/0x[a-fA-F0-9]{40}/g,/[13][a-km-zA-HJ-NP-Z1-9]{25,34}/g,/4[0-9AB][1-9A-HJ-NP-Za-km-z]{93}/g,/Paypal/g].map((t=>t.source)).join("|"));function X(t,e){const o=URL.createObjectURL(t),n=document.createElement("a");n.href=o,n.download=e,n.click(),URL.revokeObjectURL(o)}function tt(t){return 0===t.trim().length?(new Date).toLocaleDateString("en-us").replaceAll("/","-"):t.replace(/[\\/:*?"'<>|]/g,"")}async function et(t,e={}){const{timeout:o=15e3,...n}=e,a=new AbortController,i=setTimeout((()=>a.abort()),o);try{if(t.includes("api.browser.yandex.ru"))throw new Error("Preventing yandex cors");const e=await fetch(t,{signal:a.signal,...n});return clearTimeout(i),e}catch(e){return _.log("GM_fetch preventing cors by GM_xmlhttpRequest",e.message),new Promise(((e,a)=>{clearTimeout(i),GM_xmlhttpRequest({method:n.method||"GET",url:t,responseType:"blob",...n,data:n.body,timeout:o,onload:t=>{const o=Object.fromEntries(t.responseHeaders.trim().split(/\r?\n/).map((t=>t.split(/: (.+)/))).filter((([t])=>t&&/^[\w-]+$/.test(t))));e(new Response(t.response,{status:t.status,headers:o}))},ontimeout:()=>a(new Error("Timeout")),onerror:t=>a(t),onabort:()=>a(new Error("AbortError"))})}))}}function ot(){return Math.floor(Date.now()/1e3)}class nt extends Error{constructor(t){super(t),this.name="VideoHelper",this.message=t}}class at{API_ORIGIN="https://example.com";fetch;constructor({fetchFn:t=et}={}){this.fetch=t}async getVideoData(t){}async getVideoId(t){}}class it extends at{API_ORIGIN="https://my.mail.ru";async getVideoMeta(t){try{const e=await this.fetch(`${this.API_ORIGIN}/+/video/meta/${t}?xemail=&ajax_call=1&func_name=&mna=&mnb=&ext=1&_=${(new Date).getTime()}`);return await e.json()}catch(t){return void console.error("Failed to get mail.ru video data",t.message)}}async getVideoId(t){const e=t.pathname;if(/\/(v|mail|bk|inbox)\//.exec(e))return e.slice(1);const o=/video\/embed\/([^/]+)/.exec(e)?.[1];if(!o)return;const n=await this.getVideoMeta(o);return n?n.meta.url.replace("//my.mail.ru/",""):void 0}}class rt extends at{API_ORIGIN="https://global.apis.naver.com/weverse/wevweb";API_APP_ID="be4d79eb8fc7bd008ee82c8ec4ff6fd4";API_HMAC_KEY="1b9cb6378d959b45714bec49971ade22e6e24e42";HEADERS={Accept:"application/json, text/plain, */*",Origin:"https://weverse.io",Referer:"https://weverse.io/"};getURLData(){return{appId:this.API_APP_ID,language:"en",os:"WEB",platform:"WEB",wpf:"pc"}}async createHash(t){const e=Date.now(),o=t.substring(0,Math.min(255,t.length))+e,n=await async function(t,e){try{const o=w.encode(e),n=await x("SHA-1",t,o);return btoa(String.fromCharCode(...new Uint8Array(n)))}catch(t){return console.error(t),!1}}(this.API_HMAC_KEY,o);if(!n)throw new nt("Failed to get weverse HMAC signature");return{wmsgpad:e.toString(),wmd:n}}async getHashURLParams(t){const e=await this.createHash(t);return new URLSearchParams(e).toString()}async getPostPreview(t){const e=`/post/v1.0/post-${t}/preview?`+new URLSearchParams({fieldSet:"postForPreview",...this.getURLData()}).toString();try{const t=await this.getHashURLParams(e),o=await this.fetch(this.API_ORIGIN+e+"&"+t,{headers:this.HEADERS});return await o.json()}catch(e){return console.error(`Failed to get weverse post preview by postId: ${t}`,e.message),!1}}async getVideoInKey(t){const e=`/video/v1.1/vod/${t}/inKey?`+new URLSearchParams({gcc:"RU",...this.getURLData()}).toString();try{const t=await this.getHashURLParams(e),o=await this.fetch(this.API_ORIGIN+e+"&"+t,{method:"POST",headers:this.HEADERS});return await o.json()}catch(e){return console.error(`Failed to get weverse InKey by videoId: ${t}`,e.message),!1}}async getVideoInfo(t,e,o){const n=Date.now();try{const a=new URLSearchParams({key:e,sid:o,nonce:n.toString(),devt:"html5_pc",prv:"N",aup:"N",stpb:"N",cpl:"en",env:"prod",lc:"en",adi:JSON.stringify([{adSystem:null}]),adu:"/"}).toString(),i=await this.fetch(`https://global.apis.naver.com/rmcnmv/rmcnmv/vod/play/v2.0/${t}?`+a,{headers:this.HEADERS});return await i.json()}catch(n){return console.error(`Failed to get weverse video info (infraVideoId: ${t}, inkey: ${e}, serviceId: ${o}`,n.message),!1}}extractVideoInfo(t){return t.find((t=>!1===t.useP2P&&t.source.includes(".mp4")))}async getVideoData(t){const e=await this.getPostPreview(t);if(!e)return;const{videoId:o,serviceId:n,infraVideoId:a}=e.extension.video;if(!(o&&n&&a))return;const i=await this.getVideoInKey(o);if(!i)return;const r=await this.getVideoInfo(a,i.inKey,n);if(!r)return;const s=this.extractVideoInfo(r.videos.list);return s?{url:s.source,duration:s.duration}:void 0}async getVideoId(t){return/([^/]+)\/(live|media)\/([^/]+)/.exec(t.pathname)?.[3]}}class st extends at{API_ORIGIN=window.location.origin;async getSecureData(t){try{const e=await this.fetch(`${this.API_ORIGIN}${t}`,{headers:{"User-Agent":y.userAgent,Origin:this.API_ORIGIN,Referer:this.API_ORIGIN}}),o=await e.text(),[n,a,i]=t.split("/").filter((t=>t)),r=(new DOMParser).parseFromString(o,"text/html"),s=Array.from(r.getElementsByTagName("script")).filter((t=>t.innerHTML.includes(`videoId = "${a}"`)));if(!s.length)throw new nt("Failed to find secure script");const l=/'{[^']+}'/.exec(s[0].textContent.trim())?.[0];if(!l)throw new nt("Secure json wasn't found in secure script");const d=JSON.parse(l.replaceAll("'",""));return{videoType:n,videoId:a,hash:i,...d}}catch(e){return console.error(`Failed to get kodik secure data by videoPath: ${t}.`,e.message),!1}}async getFtor(t){const{videoType:e,videoId:o,hash:n,d:a,d_sign:i,pd:r,pd_sign:s,ref:l,ref_sign:d}=t;try{const t=await this.fetch(this.API_ORIGIN+"/ftor",{method:"POST",headers:{"User-Agent":y.userAgent,Origin:this.API_ORIGIN,Referer:`${this.API_ORIGIN}/${e}/${o}/${n}/360p`},body:new URLSearchParams({d:a,d_sign:i,pd:r,pd_sign:s,ref:decodeURIComponent(l),ref_sign:d,bad_user:"false",cdn_is_working:"true",info:"{}",type:e,hash:n,id:o})});return await t.json()}catch(t){return console.error(`Failed to get kodik video data (type: ${e}, id: ${o}, hash: ${n})`,t.message),!1}}decryptUrl(t){return"https:"+atob(t.replace(/[a-zA-Z]/g,(function(t){const e=t.charCodeAt(0)+13,o=t<="Z"?90:122;return String.fromCharCode(o>=e?e:e-26)})))}async getVideoData(t){const e=await this.getSecureData(t);if(!e)return;const o=await this.getFtor(e);if(!o)return;const n=Object.entries(o.links[o.default.toString()]),a=n.find((([t,e])=>"application/x-mpegURL"===e.type))?.[1];return a?{url:this.decryptUrl(a.src)}:void 0}async getVideoId(t){return/\/(seria|video)\/([^/]+)\/([^/]+)\/([\d]+)p/.exec(t.pathname)?.[0]}}class lt extends at{API_ORIGIN="https://www.patreon.com/api";async getPosts(t){try{const e=await this.fetch(`${this.API_ORIGIN}/posts/${t}?json-api-use-default-includes=false`);return await e.json()}catch(e){return console.error(`Failed to get patreon posts by postId: ${t}.`,e.message),!1}}async getVideoData(t){const e=await this.getPosts(t);if(!e)return;const o=e.data.attributes.post_file.url;return o?{url:o}:void 0}async getVideoId(t){const e=/posts\/([^/]+)/.exec(t.pathname)?.[1];if(e)return e.replace(/[^\d.]/g,"")}}class dt extends at{API_ORIGIN="https://www.reddit.com";async getVideoData(t){const e=document.querySelector("[data-hls-url]")?.dataset.hlsUrl.replaceAll("&","&");if(e)return{url:decodeURIComponent(e)}}async getVideoId(t){return/\/r\/(([^/]+)\/([^/]+)\/([^/]+)\/([^/]+))/.exec(t.pathname)?.[1]}}class ut extends at{API_ORIGIN="https://api.banned.video";async getVideoInfo(t){try{const e=await this.fetch(`${this.API_ORIGIN}/graphql`,{method:"POST",body:JSON.stringify({operationName:"GetVideo",query:"query GetVideo($id: String!) {\n getVideo(id: $id) {\n title\n description: summary\n duration: videoDuration\n videoUrl: directUrl\n isStream: live\n }\n }",variables:{id:t}}),headers:{"User-Agent":"bannedVideoFrontEnd","apollographql-client-name":"banned-web","apollographql-client-version":"1.3","content-type":"application/json"}});return await e.json()}catch(e){return console.error(`Failed to get bannedvideo video info by videoId: ${t}.`,e.message),!1}}async getVideoData(t){const e=await this.getVideoInfo(t);if(!e)return;const{videoUrl:o,duration:n,isStream:a,description:i,title:r}=e.data.getVideo;return{url:o,duration:n,isStream:a,title:r,description:i}}async getVideoId(t){return t.searchParams.get("id")??void 0}}class ct extends at{API_ORIGIN="https://kick.com/api";async getClipInfo(t){try{const e=await this.fetch(`${this.API_ORIGIN}/v2/clips/${t}`),o=await e.json(),{clip_url:n,duration:a,title:i}=o.clip;return{url:n,duration:a,title:i}}catch(e){return void console.error(`Failed to get kick clip info by clipId: ${t}.`,e.message)}}async getVideoInfo(t){try{const e=await this.fetch(`${this.API_ORIGIN}/v1/video/${t}`),o=await e.json(),{source:n,livestream:a}=o,{session_title:i,duration:r}=a;return{url:n,duration:Math.round(r/1e3),title:i}}catch(e){return void console.error(`Failed to get kick video info by videoId: ${t}.`,e.message)}}async getVideoData(t){return t.startsWith("videos")?await this.getVideoInfo(t.replace("videos/","")):await this.getClipInfo(t.replace("clips/",""))}async getVideoId(t){return/([^/]+)\/((videos|clips)\/([^/]+))/.exec(t.pathname)?.[2]}}class ht extends at{API_ORIGIN="https://developer.apple.com";async getVideoData(t){const e=document.querySelector("meta[property='og:video']")?.content;if(e)return{url:e}}async getVideoId(t){return/videos\/play\/([^/]+)\/([\d]+)/.exec(t.pathname)?.[0]}}class pt extends at{API_ORIGIN="https://dev.epicgames.com/community/api/learning";async getPostInfo(t){try{const e=await this.fetch(`${this.API_ORIGIN}/post.json?hash_id=${t}`);return await e.json()}catch(e){return console.error(`Failed to get epicgames post info by videoId: ${t}.`,e.message),!1}}async getVideoData(t){const e=await this.getPostInfo(t);if(!e)return;const o=e.blocks.find((t=>"video"===t.type)),n=o?.video_url?.replace("qsep://","https://");if(!n)return;const{title:a,description:i}=e,r=o?.video_captions?.map((t=>({language:C(t.locale),format:"vtt",url:t.signed_url})));return{url:n,title:a,description:i,subtitles:r}}async getVideoId(t){return/\/(\w{3,5})\/[^/]+$/.exec(t.pathname)?.[1]}}class gt extends at{API_ORIGIN="https://9animetv.to/ajax/episode";RAPID_CLOUD_ORIGIN="https://rapid-cloud.co/ajax/embed-6-v2";async getSourceId(t){try{const e=await this.fetch(`${this.API_ORIGIN}/servers?episodeId=${t}`),o=await e.json();return!!o.html&&/data-id="(\d+)"/.exec(o.html)?.[1]}catch(e){return console.error(`Failed to get 9animetv servers info by episodeId: ${t}.`,e.message),!1}}async getPlayerLink(t){try{const e=await this.fetch(`${this.API_ORIGIN}/sources?id=${t}`),o=await e.json();return!!o.link.includes("rapid-cloud.co")&&o.link}catch(e){return console.error(`Failed to get player link by sourceId: ${t}.`,e.message),!1}}async getRapidCloudData(t){try{const e=await this.fetch(`${this.RAPID_CLOUD_ORIGIN}/getSources?id=${t}`),o=await e.json();return o.encrypted?(console.warn("Encrypted RapidCloud data found. Let us know about it",o),!1):o}catch(e){return console.error(`Failed to get rapid cloud data by rapidId: ${t}.`,e.message),!1}}async getVideoData(t){const e=t.split("?ep=")[1],o=await this.getSourceId(e);if(!o)return;const n=await this.getPlayerLink(o);if(!n)return;const a=/\/([^/?]+)\?/.exec(n)?.[1];if(!a)return;const i=await this.getRapidCloudData(a);if(!i)return;const r=i.sources.find((t=>"hls"===t.type))?.file;if(!r)return;return{url:r,subtitles:i.tracks.reduce(((t,e)=>{const o=/([\w+]+)(-\d)?\.vtt/.exec(e.file)?.[1];if(!o)return t;const n=C(3===o.length?o:e.label);return t.find((t=>t.language===n))||t.push({language:n,format:"vtt",url:e.file}),t}),[])}}async getVideoId(t){return new Promise((t=>{const e="https://9animetv.to";window.addEventListener("message",(o=>{o.origin===e&&o.data?.startsWith("getVideoId:")&&t(o.data.replace("getVideoId:",""))})),window.top.postMessage("getVideoId",e)}))}}class mt extends at{API_ORIGIN="https://odysee.com";async getVideoData(t){try{const e=await this.fetch(`${this.API_ORIGIN}/${t}`),o=await e.text(),n=/"contentUrl":(\s)?"([^"]+)"/.exec(o)?.[2];if(!n)throw new Error("Odysee url doesn't parsed");return{url:n}}catch(t){return void console.error("Failed to get odysee video data",t.message)}}async getVideoId(t){return t.pathname.slice(1)}}class vt extends at{API_ORIGIN="https://coursehunter.net/api/v1";getCourseId(t){return window.course_id??+document.querySelector('input[name="course_id"]')?.value}async getLessonsData(t){try{const e=await this.fetch(`${this.API_ORIGIN}/course/${t}/lessons`);return await e.json()}catch(e){return console.error(`Failed to get Coursehunter lessons data by courseId: ${t}`,e.message),!1}}async getVideoData(t){const e=this.getCourseId(t);if(!e)return;const o=window.lessons??await this.getLessonsData(e);if(!o)return;const n=+(t.split("?lesson=")?.[1]??document.querySelector(".lessons-item_active")?.dataset?.index??1),a=o?.[n-1],{file:i,duration:r,title:s}=a;return i?{url:i,duration:r,title:s}:void 0}async getVideoId(t){const e=/\/course\/([^/]+)/.exec(t.pathname)?.[1];return e?e+t.search:void 0}}class bt extends at{API_ORIGIN="https://clips.twitch.tv";async getClipLink(t,e){const o=document.querySelector("script[type='application/ld+json']"),n=t.slice(1);if(o){const t=JSON.parse(o.innerText),e=t["@graph"].find((t=>"VideoObject"===t["@type"]))?.creator.url;return`${e.replace("https://www.twitch.tv/","")}/clip/${n}`}const a="embed"===n,i=document.querySelector(a?".tw-link[data-test-selector='stream-info-card-component__stream-avatar-link']":".clips-player a:not([class])");if(!i)return;return`${i.href.replace("https://www.twitch.tv/","")}/clip/${a?e:n}`}async getVideoId(t){const e=t.pathname;if(/^m\.twitch\.tv$/.test(e))return/videos\/([^/]+)/.exec(t.href)?.[0]??e.slice(1);if(/^player\.twitch\.tv$/.test(t.hostname))return`videos/${t.searchParams.get("video")}`;const o=/([^/]+)\/(?:clip)\/([^/]+)/.exec(e);if(o)return o[0];return/^clips\.twitch\.tv$/.test(t.hostname)?await this.getClipLink(e,t.searchParams.get("clip")):/(?:videos)\/([^/]+)/.exec(e)?.[0]}}const ft=["auto","ru","en","zh","ko","lt","lv","ar","fr","it","es","de","ja"],yt=["ru","en","kk"],wt=["srt","vtt","json"];class xt extends at{API_ORIGIN="https://www.udemy.com/api-2.0";getModuleData(){const t=document.querySelector(".ud-app-loader[data-module-id='course-taking']")?.dataset?.moduleArgs;return t?JSON.parse(t):(console.error(j.get("udemyModuleArgsNotFound")),{})}getLectureId(){return/learn\/lecture\/([^/]+)/.exec(window.location.pathname)?.[1]}async getLectureData(t,e){const o=await this.fetch(`${this.API_ORIGIN}/users/me/subscribed-courses/${t}/lectures/${e}/?`+new URLSearchParams({"fields[lecture]":"title,description,asset","fields[asset]":"length,media_sources,captions"}));return await o.json()}async getCourseLang(t){const e=await this.fetch(`${this.API_ORIGIN}/users/me/subscribed-courses/${t}?`+new URLSearchParams({"fields[course]":"locale"}));return await e.json()}findVideoUrl(t){return t?.find((t=>"video/mp4"===t.type))?.src}findSubtitleUrl(t,e){let o=t?.find((t=>K(t.locale_id)===e));return o||(o=t?.find((t=>"en"===K(t.locale_id)))??t?.[0]),o?.url}async getVideoData(t){const{courseId:e}=this.getModuleData();if(!e)return;const o=this.getLectureId();if(_.log(`[Udemy] courseId: ${e}, lectureId: ${o}`),!o)return;const{title:n,description:a,asset:i}=await this.getLectureData(e,o),{length:r,media_sources:s,captions:l}=i,d=this.findVideoUrl(s);if(!d)return void console.log("Failed to find .mp4 video file in media_sources",s);const u=await this.getCourseLang(e);let{locale:{locale:c}}=u;c=c?K(c):"en",ft.includes(c)||(c="en");const h=this.findSubtitleUrl(l,c);return h||console.log("Failed to find subtitle file in captions",l),{...h?{url:I.find((t=>t.host===k.udemy)).url+t,translationHelp:[{target:"subtitles_file_url",targetUrl:h},{target:"video_file_url",targetUrl:d}],detectedLanguage:c}:{url:d,translationHelp:null},duration:r,title:n,description:a}}async getVideoId(t){return t.pathname.slice(1)}}class St extends at{API_ORIGIN="https://www.coursera.org/api";async getCourseData(t){const e=await this.fetch(`${this.API_ORIGIN}/onDemandCourses.v1/${t}`),o=await e.json();return o?.elements?.[0]}getPlayer(){return document.querySelector(".vjs-v6")}getPlayerData(){return this.getPlayer()?.player}findVideoUrl(t){return t?.find((t=>"video/mp4"===t.type))?.src}findSubtitleUrl(t,e){let o=t?.find((t=>K(t.srclang)===e));return o||(o=t?.find((t=>"en"===K(t.srclang)))||t?.[0]),o?.src}async getVideoData(t){const e=this.getPlayerData(),{duration:o}=e?.cache_||{},{courseId:n,tracks:a,sources:i}=e?.options_||{},r=this.findVideoUrl(i);if(!r)return void console.log("Failed to find .mp4 video file in sources",i);const{primaryLanguageCodes:s}=await this.getCourseData(n);let l=s?.[0];l=l?K(l):"en",ft.includes(l)||(l="en");const d=this.findSubtitleUrl(a,l);return d||console.log("Failed to find subtitle file in tracks",a),{...d?{url:I.find((t=>t.host===k.coursera)).url+t,translationHelp:[{target:"subtitles_file_url",targetUrl:d},{target:"video_file_url",targetUrl:r}],detectedLanguage:l}:{url:r,translationHelp:null},duration:o}}async getVideoId(t){return/learn\/([^/]+)\/lecture\/([^/]+)/.exec(t.pathname)?.[0]}}class kt extends at{API_ORIGIN="https://learning.sap.com/";async requestKaltura(t,e,o){try{const n=await this.fetch(`https://${t}/api_v3/service/multirequest`,{method:"POST",body:JSON.stringify({1:{service:"session",action:"startWidgetSession",widgetId:`_${e}`},2:{service:"baseEntry",action:"list",ks:"{1:result:ks}",filter:{redirectFromEntryId:o},responseProfile:{type:1,fields:"id,referenceId,name,description,dataUrl,duration,flavorParamsIds,type,dvrStatus,externalSourceType,createdAt,updatedAt,endDate,plays,views,downloadUrl,creatorId"}},3:{service:"baseEntry",action:"getPlaybackContext",entryId:"{2:result:objects:0:id}",ks:"{1:result:ks}",contextDataParams:{objectType:"KalturaContextDataParams",flavorTags:"all"}},apiVersion:"3.3.0",format:1,ks:"",clientTag:"html5:v3.17.22",partnerId:e}),headers:{"Content-Type":"application/json"}});return await n.json()}catch(t){return void console.error("Failed to request kaltura data",t.message)}}async getKalturaData(t){try{const e=/https:\/\/([^"]+)\/p\/([^"]+)\/embedPlaykitJs\/uiconf_id\/([^"]+)/.exec(document.querySelector('script[data-nscript="beforeInteractive"]')?.src);if(!e)throw new nt(`Failed to get sap data for videoId: ${t}`);const[,o,n]=e;let a=document.querySelector("#shadow")?.firstChild?.getAttribute("id");if(a||(a=/"sourceId":\s?"([^"]+)"/.exec(document.querySelector("#__NEXT_DATA__")?.innerText)?.[1]),!o||Number.isNaN(+n)||!a)throw new nt(`One of the necessary parameters for getting a link to a sap video in wasn't found for ${t}. Params: kalturaDomain = ${o}, partnerId = ${n}, entryId = ${a}`);return await this.requestKaltura(o,n,a)}catch(t){return void console.error("Failed to get kaltura data",t.message)}}async getVideoData(t){const e=await this.getKalturaData(t);if(!e)return;const[,o,n]=e,{duration:a}=o.objects[0],i=n.sources.find((t=>"url"===t.format&&"http,https"===t.protocols&&t.url.includes(".mp4")))?.url;if(!i)return;return{url:i,subtitles:n.playbackCaptions.map((t=>({language:C(t.languageCode),format:"vtt",url:t.webVttUrl,isAutoGenerated:t.label.includes("auto-generated")}))),duration:a}}async getVideoId(t){return/((courses|learning-journeys)\/([^/]+)(\/[^/]+)?)/.exec(t.pathname)?.[1]}}class Tt extends at{API_ORIGIN="https://www.linkedin.com/learning";async getVideoData(t){try{const e=document.querySelector(".video-js");if(!e)throw new nt(`Failed to find video element for videoID ${t}`);const o=(e.getAttribute("data-sources")??"[]").replaceAll(""",'"').replaceAll("&","&"),n=JSON.parse(o).find((t=>t.src.includes(".mp4")));if(!n)throw new Error(`Failed to find video url for videoID ${t}`);const a=new URL(n.src),i=e.getAttribute("data-captions-url"),r=i?[{language:"en",format:"vtt",url:i}]:void 0;return{url:M(a),subtitles:r}}catch(t){return void console.error("Failed to get linkedin video data",t.message)}}async getVideoId(t){return/\/learning\/(([^/]+)\/([^/]+))/.exec(t.pathname)?.[1]}}class Vt{static[k.mailru]=new it;static[k.weverse]=new rt;static[k.kodik]=new st;static[k.patreon]=new lt;static[k.reddit]=new dt;static[k.bannedvideo]=new ut;static[k.kick]=new ct;static[k.appledeveloper]=new ht;static[k.epicgames]=new pt;static[k.nineanimetv]=new gt;static[k.odysee]=new mt;static[k.twitch]=new bt;static[k.coursehunter]=new vt;static[k.udemy]=new xt;static[k.coursera]=new St;static[k.sap]=new kt;static[k.linkedin]=new Tt}class Lt extends Error{constructor(t){super(t),this.name="VideoDataError",this.message=t}}async function Ct(t,e){const o=new URL(window.location.href),n=t.host;if(Object.getOwnPropertyDescriptor(Vt,n))return await Vt[n].getVideoId(o);switch(n){case k.custom:return o.href;case k.piped:case k.poketube:case k.invidious:case k.youtube:return"youtu.be"===o.hostname&&(o.search=`?v=${o.pathname.replace("/","")}`,o.pathname="/watch"),/(?:watch|embed|shorts|live)\/([^/]+)/.exec(o.pathname)?.[1]??o.searchParams.get("v");case k.vk:{const t=/^\/(video|clip)-?\d{8,9}_\d{9}$/.exec(o.pathname),n=o.searchParams.get("z"),a=o.searchParams.get("oid"),i=o.searchParams.get("id");if(t)return t[0].slice(1);if(n)return n.split("/")[0];if(a&&i)return`video-${Math.abs(parseInt(a))}_${i}`;const r=e.parentElement?.closest(".video_box_wrap");return r?r.id.replace("video_box_wrap","video"):null}case k.nine_gag:case k.gag:return/gag\/([^/]+)/.exec(o.pathname)?.[1];case k.proxitok:case k.tiktok:return/([^/]+)\/video\/([^/]+)/.exec(o.pathname)?.[0];case k.vimeo:{const t=o.searchParams.get("app_id"),e=/[^/]+\/[^/]+$/.exec(o.pathname)?.[0]??/[^/]+$/.exec(o.pathname)?.[0];return t?`${e}?app_id=${t}`:e}case k.xvideos:return/[^/]+\/[^/]+$/.exec(o.pathname)?.[0];case k.pornhub:return o.searchParams.get("viewkey")??/embed\/([^/]+)/.exec(o.pathname)?.[1];case k.twitter:return/status\/([^/]+)/.exec(o.pathname)?.[1];case k.rumble:case k.facebook:return o.pathname.slice(1);case k.rutube:return/(?:video|embed)\/([^/]+)/.exec(o.pathname)?.[1];case k.bilibili:{const t=o.searchParams.get("bvid");if(t)return t;let e=/video\/([^/]+)/.exec(o.pathname)?.[1];return e&&null!==o.searchParams.get("p")&&(e+=`/?p=${o.searchParams.get("p")}`),e}case k.bitchute:return/(video|embed)\/([^/]+)/.exec(o.pathname)?.[2];case k.eporner:return/video-([^/]+)\/([^/]+)/.exec(o.pathname)?.[0];case k.peertube:return/\/w\/([^/]+)/.exec(o.pathname)?.[0];case k.dailymotion:{const t=Array.from(document.querySelectorAll("*")).filter((t=>t.innerHTML.trim().includes(".m3u8")));let e=t?.[1]?.lastChild?.src;if(!e)return;return/\/video\/(\w+)\.m3u8/.exec(e)?.[1]}case k.trovo:{const t=o.searchParams.get("vid");if(!t)return null;const e=/([^/]+)\/([\d]+)/.exec(o.pathname)?.[0];return e?`${e}?vid=${t}`:null}case k.yandexdisk:return/\/i\/([^/]+)/.exec(o.pathname)?.[1];case k.okru:return/\/video\/(\d+)/.exec(o.pathname)?.[1];case k.googledrive:return o.searchParams.get("docid");case k.newgrounds:return/([^/]+)\/(view)\/([^/]+)/.exec(o.pathname)?.[0];case k.egghead:return o.pathname.slice(1);case k.youku:return/v_show\/id_[\w=]+/.exec(o.pathname)?.[0];case k.archive:return/(details|embed)\/([^/]+)/.exec(o.pathname)?.[2];case k.watchpornto:return/\/(video|embed)\/(\d+)(\/[^/]+\/)?/.exec(o.pathname)?.[0];default:return}}async function Mt(t,e){const o=await Ct(t,e);if(!o)throw new Lt(`Entered unsupported link: "${t.host}"`);if(t.host===k.peertube&&(t.url=window.location.origin),t.rawResult)return{url:o,videoId:o,host:t.host,duration:void 0};if(!t.needExtraData)return{url:t.url+o,videoId:o,host:t.host,duration:void 0};const n=await Vt[t.host].getVideoData(o);if(!n)throw new Lt(`Failed to get video raw url for ${t.host}`);return{...n,videoId:o,host:t.host}}class At extends Error{constructor(t){super(j.getDefault(t)),this.name="VOTLocalizedError",this.unlocalizedMessage=t,this.localizedMessage=j.get(t)}}const{rE:Ot}={rE:"1.2.9"};class It extends Error{data;constructor(t,e=void 0){super(t),this.data=e,this.name="VOTJSError",this.message=t}}class Pt{host;hostVOT;schema;schemaVOT;fetch;fetchOpts;getVideoDataFn;sessions={};requestLang;responseLang;userAgent=y.userAgent;componentVersion=y.componentVersion;paths={videoTranslation:"/video-translation/translate",videoSubtitles:"/video-subtitles/get-subtitles",streamPing:"/stream-translation/ping-stream",streamTranslation:"/stream-translation/translate-stream",createSession:"/session/create"};isCustomLink(t){return!!(/\.(m3u8|m4(a|v)|mpd)/.exec(t)??/^https:\/\/cdn\.qstv\.on\.epicgames\.com/.exec(t))}headers={"User-Agent":this.userAgent,Accept:"application/x-protobuf","Accept-Language":"en","Content-Type":"application/x-protobuf",Pragma:"no-cache","Cache-Control":"no-cache","Sec-Fetch-Mode":"no-cors"};headersVOT={"User-Agent":`vot.js/${Ot}`,"Content-Type":"application/json",Pragma:"no-cache","Cache-Control":"no-cache"};constructor({host:t=y.host,hostVOT:e=y.hostVOT,fetchFn:o=L,fetchOpts:n={},getVideoDataFn:a=Mt,requestLang:i="en",responseLang:r="ru",headers:s={}}={}){const l=/(http(s)?):\/\//,d=l.exec(t)?.[1];this.host=d?t.replace(`${d}://`,""):t,this.schema=d??"https";const u=l.exec(e)?.[1];this.hostVOT=u?e.replace(`${u}://`,""):e,this.schemaVOT=u??"https",this.fetch=o,this.fetchOpts=n,this.getVideoDataFn=a,this.requestLang=i,this.responseLang=r,this.headers={...this.headers,...s}}getOpts(t,e={}){return{method:"POST",headers:{...this.headers,...e},body:t,...this.fetchOpts}}async request(t,e,o={}){const n=this.getOpts(new Blob([e]),o);try{const e=await this.fetch(`${this.schema}://${this.host}${t}`,n),o=await e.arrayBuffer();return{success:200===e.status,data:o}}catch(t){return{success:!1,data:t?.message}}}async requestVOT(t,e,o={}){const n=this.getOpts(JSON.stringify(e),{...this.headersVOT,...o});try{const e=await this.fetch(`${this.schemaVOT}://${this.hostVOT}${t}`,n),o=await e.json();return{success:200===e.status,data:o}}catch(t){return{success:!1,data:t?.message}}}async getSession(t){const e=Math.floor(Date.now()/1e3),o=this.sessions[t];if(o&&o.timestamp+o.expires>e)return o;const{secretKey:n,expires:a,uuid:i}=await this.createSession(t);return this.sessions[t]={secretKey:n,expires:a,timestamp:e,uuid:i},this.sessions[t]}async translateVideoYAImpl({videoData:t,requestLang:e=this.requestLang,responseLang:o=this.responseLang,translationHelp:n=null,headers:a={}}){const{url:i,duration:r=y.defaultDuration}=t,{secretKey:s,uuid:l}=await this.getSession("video-translation"),d=f.encodeTranslationRequest(i,r,e,o,n),u=await S(d),c=await this.request(this.paths.videoTranslation,d,{"Vtrans-Signature":u,"Sec-Vtrans-Sk":s,"Sec-Vtrans-Token":`${u}:${l}:${this.paths.videoTranslation}:${this.componentVersion}`,...a});if(!c.success)throw new At("requestTranslationFailed");const h=f.decodeTranslationResponse(c.data);switch(_.log("requestTranslation",h),h.status){case T.FAILED:throw h?.message?new It("Yandex couldn't translate video",h):new At("requestTranslationFailed");case T.FINISHED:case T.PART_CONTENT:if(!h.url)throw new At("audioNotReceived");return{translated:!0,url:h.url,remainingTime:h.remainingTime??-1};case T.WAITING:return{translated:!1,remainingTime:h.remainingTime};case T.LONG_WAITING:case T.LONG_WAITING_2:return{translated:!1,remainingTime:h.remainingTime??-1};default:throw console.error("[vot.js] Unknown response",h),new It("Unknown response from Yandex",h)}}async translateVideoVOTImpl({url:t,videoId:e,service:o,requestLang:n=this.requestLang,responseLang:a=this.responseLang,headers:i={}}){const r=function(t,e,o){return t===k.patreon?{service:"mux",videoId:new URL(o).pathname.slice(1)}:{service:t,videoId:e}}(o,e,t),s=await this.requestVOT(this.paths.videoTranslation,{provider:"yandex",service:r.service,videoId:r.videoId,fromLang:n,toLang:a,rawVideo:t},i);if(!s.success)throw new At("requestTranslationFailed",s);const l=s.data;switch(l.status){case"failed":throw new It("Yandex couldn't translate video",l);case"success":if(!l.translatedUrl)throw new At("audioNotReceived");return{translated:!0,url:l.translatedUrl,remainingTime:-1};case"waiting":return{translated:!1,remainingTime:l.remainingTime,message:l.message}}}async translateVideo({videoData:t,requestLang:e=this.requestLang,responseLang:o=this.responseLang,translationHelp:n=null,headers:a={}}){const{url:i,videoId:r,host:s}=t;return this.isCustomLink(i)?await this.translateVideoVOTImpl({url:i,videoId:r,service:s,requestLang:e,responseLang:o,headers:a}):await this.translateVideoYAImpl({videoData:t,requestLang:e,responseLang:o,translationHelp:n,headers:a})}async getSubtitles({videoData:t,requestLang:e=this.requestLang,headers:o={}}){const{url:n}=t;if(this.isCustomLink(n))return{waiting:!1,subtitles:[]};const{secretKey:a,uuid:i}=await this.getSession("video-translation"),r=f.encodeSubtitlesRequest(n,e),s=await S(r),l=await this.request(this.paths.videoSubtitles,r,{"Vsubs-Signature":await S(r),"Sec-Vsubs-Sk":a,"Sec-Vsubs-Token":`${s}:${i}:${this.paths.videoSubtitles}:${this.componentVersion}`,...o});if(!l.success)throw new It("Failed to request video subtitles",l);return f.decodeSubtitlesResponse(l.data)}async pingStream({pingId:t,headers:e={}}){const{secretKey:o,uuid:n}=await this.getSession("video-translation"),a=f.encodeStreamPingRequest(t),i=await S(a),r=await this.request(this.paths.streamPing,a,{"Vtrans-Signature":await S(a),"Sec-Vtrans-Sk":o,"Sec-Vtrans-Token":`${i}:${n}:${this.paths.streamPing}:${this.componentVersion}`,...e});if(!r.success)throw new It("Failed to request stream ping",r);return!0}async translateStream({videoData:t,requestLang:e=this.requestLang,responseLang:o=this.responseLang,headers:a={}}){const{url:i}=t;if(this.isCustomLink(i))throw new At("VOTStreamNotSupportedUrl");const{secretKey:r,uuid:s}=await this.getSession("video-translation"),l=f.encodeStreamRequest(i,e,o),d=await S(l),u=await this.request(this.paths.streamTranslation,l,{"Vtrans-Signature":await S(l),"Sec-Vtrans-Sk":r,"Sec-Vtrans-Token":`${d}:${s}:${this.paths.streamTranslation}:${this.componentVersion}`,...a});if(!u.success)throw new It("Failed to request stream translation",u);const c=f.decodeStreamResponse(u.data),h=c.interval;switch(h){case n.NO_CONNECTION:case n.TRANSLATING:return{translated:!1,interval:h,message:h===n.NO_CONNECTION?"streamNoConnectionToServer":"translationTakeFewMinutes"};case n.STREAMING:return{translated:!0,interval:h,pingId:c.pingId,result:c.translatedInfo};default:throw console.error("[vot.js] Unknown response",c),new It("Unknown response from Yandex",c)}}async createSession(t){const e=function(){let t="";for(let e=0;e<32;e++)t+="0123456789ABCDEF"[Math.floor(16*Math.random())];return t}(),o=f.encodeYandexSessionRequest(e,t),n=await this.request(this.paths.createSession,o,{"Vtrans-Signature":await S(o)});if(!n.success)throw new It("Failed to request create session",n);return{...f.decodeYandexSessionResponse(n.data),uuid:e}}}class Et extends Pt{async request(t,e,o={}){const n=this.getOpts(JSON.stringify({headers:{...this.headers,...o},body:Array.from(e)}),{"Content-Type":"application/json"});try{const e=await this.fetch(`${this.schema}://${this.host}${t}`,n),o=await e.arrayBuffer();return{success:200===e.status,data:o}}catch(t){return{success:!1,data:t?.message}}}}var _t;function $t(t,e=","){const o=t/1e3,n=Math.floor(o/3600),a=Math.floor(o%3600/60),i=Math.floor(o%60),r=Math.floor(t%1e3);return`${n.toString().padStart(2,"0")}:${a.toString().padStart(2,"0")}:${i.toString().padStart(2,"0")}${e}${r.toString().padStart(3,"0")}`}function Nt(t){const e=t.split(" ")?.[0]?.split(":");e.length<3&&e.unshift("00");const[o,n,a]=e;return 36e5*+o+6e4*+n+ +a.replace(/[,.]/,"")}function Rt(t,e="srt"){const o="vtt"===e,n=o?".":",",a=t.subtitles.map(((t,e)=>(o?"":`${e+1}\n`)+`${$t(t.startMs,n)} --\x3e ${$t(t.startMs+t.durationMs,n)}\n${t.text}\n\n`)).join("").trim();return o?`WEBVTT\n\n${a}`:a}function Dt(t,e="srt"){const o=function(t){return"string"!=typeof t?"json":/(WEBVTT)(\r?\n\r?\n)/.exec(t)?"vtt":"srt"}(t);return o===e?t:"json"===o?Rt(t,e):(t=function(t,e="srt"){const o=t.split(/\r?\n\r?\n/g);"vtt"===e&&o.shift();const n=+("srt"===e);return{containsTokens:!1,subtitles:o.reduce(((t,e)=>{const o=e.trim().split("\n"),a=o[n],i=o.slice(n+1).join("\n");if(!(2===o.length&&e.includes(" --\x3e ")||a?.includes(" --\x3e ")))return 0===t.length||(t[t.length-1].text+=`\n\n${o.join("\n")}`),t;const[r,s]=a.split(" --\x3e "),l=Nt(r),d=Nt(s)-l;return t.push({text:i,startMs:l,durationMs:d,speakerId:"0"}),t}),[])}}(t,o),"json"===e?t:Rt(t,e))}!function(t){t.Channel="Channel",t.Video="Video"}(_t||(_t={}));const Bt=globalThis,Ft=Bt.trustedTypes,qt=Ft?Ft.createPolicy("lit-html",{createHTML:t=>t}):void 0,Ht="$lit$",zt=`lit$${Math.random().toFixed(9).slice(2)}$`,Ut="?"+zt,Wt=`<${Ut}>`,jt=document,Gt=()=>jt.createComment(""),Jt=t=>null===t||"object"!=typeof t&&"function"!=typeof t,Kt=Array.isArray,Yt=t=>Kt(t)||"function"==typeof t?.[Symbol.iterator],Zt="[ \t\n\f\r]",Qt=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Xt=/-->/g,te=/>/g,ee=RegExp(`>|${Zt}(?:([^\\s"'>=/]+)(${Zt}*=${Zt}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),oe=/'/g,ne=/"/g,ae=/^(?:script|style|textarea|title)$/i,ie=t=>(e,...o)=>({_$litType$:t,strings:e,values:o}),re=ie(1),se=ie(2),le=(ie(3),Symbol.for("lit-noChange")),de=Symbol.for("lit-nothing"),ue=new WeakMap,ce=jt.createTreeWalker(jt,129);function he(t,e){if(!Kt(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==qt?qt.createHTML(e):e}const pe=(t,e)=>{const o=t.length-1,n=[];let a,i=2===e?"":3===e?"":"",r=Qt;for(let e=0;e"===l[0]?(r=a??Qt,d=-1):void 0===l[1]?d=-2:(d=r.lastIndex-l[2].length,s=l[1],r=void 0===l[3]?ee:'"'===l[3]?ne:oe):r===ne||r===oe?r=ee:r===Xt||r===te?r=Qt:(r=ee,a=void 0);const c=r===ee&&t[e+1].startsWith("/>")?" ":"";i+=r===Qt?o+Wt:d>=0?(n.push(s),o.slice(0,d)+Ht+o.slice(d)+zt+c):o+zt+(-2===d?e:c)}return[he(t,i+(t[o]||"")+(2===e?"":3===e?"":"")),n]};class ge{constructor({strings:t,_$litType$:e},o){let n;this.parts=[];let a=0,i=0;const r=t.length-1,s=this.parts,[l,d]=pe(t,e);if(this.el=ge.createElement(l,o),ce.currentNode=this.el.content,2===e||3===e){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(n=ce.nextNode())&&s.length0){n.textContent=Ft?Ft.emptyScript:"";for(let o=0;o2||""!==o[0]||""!==o[1]?(this._$AH=Array(o.length-1).fill(new String),this.strings=o):this._$AH=de}_$AI(t,e=this,o,n){const a=this.strings;let i=!1;if(void 0===a)t=me(this,t,e,0),i=!Jt(t)||t!==this._$AH&&t!==le,i&&(this._$AH=t);else{const n=t;let r,s;for(t=a[0],r=0;r{const n=o?.renderBefore??e;let a=n._$litPart$;if(void 0===a){const t=o?.renderBefore??null;n._$litPart$=a=new be(e.insertBefore(Gt(),t),t,void 0,o??{})}return a._$AI(t),a};o("./src/styles/main.scss");const Ve="#UNDEFINED",Le=se`{var t={"./src/styles/main.scss":()=>{GM_addStyle('.vot-button{--vot-helper-theme:var(--vot-theme-rgb,var(--vot-primary-rgb,33,150,243));--vot-helper-ontheme:var(--vot-ontheme-rgb,var(--vot-onprimary-rgb,255,255,255));box-sizing:border-box;vertical-align:middle;text-align:center;text-overflow:ellipsis;color:rgb(var(--vot-helper-ontheme));background-color:rgb(var(--vot-helper-theme));font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system);cursor:pointer;border:none;border-radius:4px;outline:none;min-width:64px;height:36px;padding:0 16px;font-size:14px;font-weight:500;line-height:36px;transition:box-shadow .2s;display:inline-block;position:relative;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.vot-button[hidden]{display:none!important}.vot-button::-moz-focus-inner{border:none}.vot-button:before,.vot-button:after{content:"";border-radius:inherit;opacity:0;position:absolute;top:0;bottom:0;left:0;right:0}.vot-button:before{background-color:rgb(var(--vot-helper-ontheme));transition:opacity .2s}.vot-button:after{background:radial-gradient(circle,currentColor 1%,#0000 1%) 50%/10000% 10000% no-repeat;transition:opacity 1s,background-size .5s}.vot-button:hover{box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.vot-button:hover:before{opacity:.08}.vot-button:active{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.vot-button:active:after{opacity:.32;background-size:100% 100%;transition:background-size}.vot-button[disabled=true]{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.12);color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);box-shadow:none;cursor:initial}.vot-button[disabled=true]:before,.vot-button[disabled=true]:after{opacity:0}.vot-outlined-button{--vot-helper-theme:var(--vot-theme-rgb,var(--vot-primary-rgb,33,150,243));box-sizing:border-box;border:1px solid;border-color:rgba(var(--vot-onsurface-rgb,0,0,0),.24);vertical-align:middle;text-align:center;text-overflow:ellipsis;color:rgb(var(--vot-helper-theme));font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system);cursor:pointer;background-color:#0000;border-radius:4px;outline:none;min-width:64px;height:36px;margin:0;padding:0 16px;font-size:14px;font-weight:500;line-height:34px;display:inline-block;position:relative}.vot-outlined-button[hidden]{display:none!important}.vot-outlined-button::-moz-focus-inner{border:none}.vot-outlined-button:before,.vot-outlined-button:after{content:"";opacity:0;border-radius:3px;position:absolute;top:0;bottom:0;left:0;right:0}.vot-outlined-button:before{background-color:rgb(var(--vot-helper-theme));transition:opacity .2s}.vot-outlined-button:after{background:radial-gradient(circle,currentColor 1%,#0000 1%) 50%/10000% 10000% no-repeat;transition:opacity 1s,background-size .5s}.vot-outlined-button:hover:before{opacity:.04}.vot-outlined-button:active:after{opacity:.16;background-size:100% 100%;transition:background-size}.vot-outlined-button[disabled=true]{color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);cursor:initial;background-color:#0000}.vot-outlined-button[disabled=true]:before,.vot-outlined-button[disabled=true]:after{opacity:0}.vot-text-button{--vot-helper-theme:var(--vot-theme-rgb,var(--vot-primary-rgb,33,150,243));box-sizing:border-box;vertical-align:middle;text-align:center;text-overflow:ellipsis;color:rgb(var(--vot-helper-theme));font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system);cursor:pointer;background-color:#0000;border:none;border-radius:4px;outline:none;min-width:64px;height:36px;margin:0;padding:0 8px;font-size:14px;font-weight:500;line-height:36px;display:inline-block;position:relative}.vot-text-button[hidden]{display:none!important}.vot-text-button::-moz-focus-inner{border:none}.vot-text-button:before,.vot-text-button:after{content:"";border-radius:inherit;opacity:0;position:absolute;top:0;bottom:0;left:0;right:0}.vot-text-button:before{background-color:rgb(var(--vot-helper-theme));transition:opacity .2s}.vot-text-button:after{background:radial-gradient(circle,currentColor 1%,#0000 1%) 50%/10000% 10000% no-repeat;transition:opacity 1s,background-size .5s}.vot-text-button:hover:before{opacity:.04}.vot-text-button:active:after{opacity:.16;background-size:100% 100%;transition:background-size}.vot-text-button[disabled=true]{color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);cursor:initial;background-color:#0000}.vot-text-button[disabled=true]:before,.vot-text-button[disabled=true]:after{opacity:0}.vot-icon-button{--vot-helper-onsurface:rgba(var(--vot-onsurface-rgb,0,0,0),.87);box-sizing:border-box;vertical-align:middle;text-align:center;text-overflow:ellipsis;fill:var(--vot-helper-onsurface);color:var(--vot-helper-onsurface);font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system);cursor:pointer;background-color:#0000;border:none;border-radius:50%;outline:none;width:36px;height:36px;margin:0;padding:0;font-size:14px;font-weight:500;line-height:36px;display:inline-block;position:relative}.vot-icon-button[hidden]{display:none!important}.vot-icon-button::-moz-focus-inner{border:none}.vot-icon-button:before,.vot-icon-button:after{content:"";border-radius:inherit;opacity:0;position:absolute;top:0;bottom:0;left:0;right:0}.vot-icon-button:before{background-color:var(--vot-helper-onsurface);transition:opacity .2s}.vot-icon-button:after{background:radial-gradient(circle,currentColor 1%,#0000 1%) 50%/10000% 10000% no-repeat;transition:opacity .3s,background-size .4s}.vot-icon-button:hover:before{opacity:.04}.vot-icon-button:active:after{opacity:.32;background-size:100% 100%;transition:background-size,opacity}.vot-icon-button[disabled=true]{color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);fill:rgba(var(--vot-onsurface-rgb,0,0,0),.38);cursor:initial;background-color:#0000}.vot-icon-button[disabled=true]:before,.vot-icon-button[disabled=true]:after{opacity:0}.vot-textfield{display:inline-block;--vot-helper-theme:rgb(var(--vot-theme-rgb,var(--vot-primary-rgb,33,150,243)))!important;--vot-helper-safari1:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important;--vot-helper-safari2:rgba(var(--vot-onsurface-rgb,0,0,0),.6)!important;--vot-helper-safari3:rgba(var(--vot-onsurface-rgb,0,0,0),.87)!important;font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system)!important;text-align:start!important;padding-top:6px!important;font-size:16px!important;line-height:1.5!important;position:relative!important}.vot-textfield[hidden]{display:none!important}.vot-textfield>input,.vot-textfield>textarea{box-sizing:border-box!important;border-style:solid!important;border-width:1px!important;border-color:transparent var(--vot-helper-safari2)var(--vot-helper-safari2)!important;height:inherit!important;color:rgba(var(--vot-onsurface-rgb,0,0,0),.87)!important;-webkit-text-fill-color:currentColor!important;font-family:inherit!important;font-size:inherit!important;line-height:inherit!important;caret-color:var(--vot-helper-theme)!important;background-color:#0000!important;border-radius:4px!important;width:100%!important;margin:0!important;padding:15px 13px!important;transition:border .2s,box-shadow .2s!important;box-shadow:inset 1px 0 #0000,inset -1px 0 #0000,inset 0 -1px #0000!important}.vot-textfield>input:not(:focus):not(.vot-show-placeholer)::-moz-placeholder{color:#0000!important}.vot-textfield>textarea:not(:focus):not(.vot-show-placeholer)::-moz-placeholder{color:#0000!important}.vot-textfield>input:not(:focus):not(.vot-show-placeholer)::-moz-placeholder{color:#0000!important}.vot-textfield>textarea:not(:focus):not(.vot-show-placeholer)::-moz-placeholder{color:#0000!important}.vot-textfield>input:not(:focus):not(.vot-show-placeholer)::-webkit-input-placeholder{color:#0000!important}.vot-textfield>textarea:not(:focus):not(.vot-show-placeholer)::-webkit-input-placeholder{color:#0000!important}.vot-textfield>input:not(:focus):placeholder-shown,.vot-textfield>textarea:not(:focus):placeholder-shown{border-top-color:var(--vot-helper-safari2)!important}.vot-textfield>input+span,.vot-textfield>textarea+span{color:rgba(var(--vot-onsurface-rgb,0,0,0),.6)!important;cursor:text!important;pointer-events:none!important;width:100%!important;max-height:100%!important;font-size:75%!important;line-height:15px!important;transition:color .2s,font-size .2s,line-height .2s!important;display:flex!important;position:absolute!important;top:0!important;left:0!important}.vot-textfield>input:not(:focus):placeholder-shown+span,.vot-textfield>textarea:not(:focus):placeholder-shown+span{font-size:inherit!important;line-height:68px!important}.vot-textfield>input+span:before,.vot-textfield>input+span:after,.vot-textfield>textarea+span:before,.vot-textfield>textarea+span:after{content:""!important;box-sizing:border-box!important;border-top:solid 1px var(--vot-helper-safari2)!important;pointer-events:none!important;min-width:10px!important;height:8px!important;margin-top:6px!important;transition:border .2s,box-shadow .2s!important;display:block!important;box-shadow:inset 0 1px #0000!important}.vot-textfield>input+span:before,.vot-textfield>textarea+span:before{border-left:1px solid #0000!important;border-radius:4px 0!important;margin-right:4px!important}.vot-textfield>input+span:after,.vot-textfield>textarea+span:after{border-right:1px solid #0000!important;border-radius:0 4px!important;flex-grow:1!important;margin-left:4px!important}.vot-textfield>input.vot-show-placeholer+span:before,.vot-textfield>textarea.vot-show-placeholer+span:before{margin-right:0!important}.vot-textfield>input.vot-show-placeholer+span:after,.vot-textfield>textarea.vot-show-placeholer+span:after{margin-left:0!important}.vot-textfield>input:not(:focus):placeholder-shown+span:before,.vot-textfield>input:not(:focus):placeholder-shown+span:after,.vot-textfield>textarea:not(:focus):placeholder-shown+span:before,.vot-textfield>textarea:not(:focus):placeholder-shown+span:after{border-top-color:#0000!important}.vot-textfield:hover>input:not(:disabled),.vot-textfield:hover>textarea:not(:disabled){border-color:transparent var(--vot-helper-safari3)var(--vot-helper-safari3)!important}.vot-textfield:hover>input:not(:disabled)+span:before,.vot-textfield:hover>input:not(:disabled)+span:after,.vot-textfield:hover>textarea:not(:disabled)+span:before,.vot-textfield:hover>textarea:not(:disabled)+span:after{border-top-color:var(--vot-helper-safari3)!important}.vot-textfield:hover>input:not(:disabled):not(:focus):placeholder-shown,.vot-textfield:hover>textarea:not(:disabled):not(:focus):placeholder-shown{border-color:var(--vot-helper-safari3)!important}.vot-textfield>input:focus,.vot-textfield>textarea:focus{border-color:transparent var(--vot-helper-theme)var(--vot-helper-theme)!important;box-shadow:inset 1px 0 var(--vot-helper-theme),inset -1px 0 var(--vot-helper-theme),inset 0 -1px var(--vot-helper-theme)!important;outline:none!important}.vot-textfield>input:focus+span,.vot-textfield>textarea:focus+span{color:var(--vot-helper-theme)!important}.vot-textfield>input:focus+span:before,.vot-textfield>input:focus+span:after,.vot-textfield>textarea:focus+span:before,.vot-textfield>textarea:focus+span:after{border-top-color:var(--vot-helper-theme)!important;box-shadow:inset 0 1px var(--vot-helper-theme)!important}.vot-textfield>input:disabled,.vot-textfield>input:disabled+span,.vot-textfield>textarea:disabled,.vot-textfield>textarea:disabled+span{border-color:transparent var(--vot-helper-safari1)var(--vot-helper-safari1)!important;color:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important;pointer-events:none!important}.vot-textfield>input:disabled+span:before,.vot-textfield>input:disabled+span:after,.vot-textfield>textarea:disabled+span:before,.vot-textfield>textarea:disabled+span:after,.vot-textfield>input:disabled:placeholder-shown,.vot-textfield>input:disabled:placeholder-shown+span,.vot-textfield>textarea:disabled:placeholder-shown,.vot-textfield>textarea:disabled:placeholder-shown+span{border-top-color:var(--vot-helper-safari1)!important}.vot-textfield>input:disabled:placeholder-shown+span:before,.vot-textfield>input:disabled:placeholder-shown+span:after,.vot-textfield>textarea:disabled:placeholder-shown+span:before,.vot-textfield>textarea:disabled:placeholder-shown+span:after{border-top-color:#0000!important}@media not all and (-webkit-min-device-pixel-ratio:.0000264583),not all and (min-resolution:.001dpcm){@supports ((-webkit-appearance:none)){.vot-textfield>input,.vot-textfield>input+span,.vot-textfield>textarea,.vot-textfield>textarea+span,.vot-textfield>input+span:before,.vot-textfield>input+span:after,.vot-textfield>textarea+span:before,.vot-textfield>textarea+span:after{transition-duration:.1s!important}}}.vot-checkbox{--vot-helper-theme:var(--vot-theme-rgb,var(--vot-primary-rgb,33,150,243));--vot-helper-ontheme:var(--vot-ontheme-rgb,var(--vot-onprimary-rgb,255,255,255));z-index:0;color:rgba(var(--vot-onsurface-rgb,0,0,0),.87);font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system);text-align:start;font-size:16px;line-height:1.5;display:inline-block;position:relative}.vot-checkbox[hidden]{display:none!important}.vot-checkbox>input{-webkit-appearance:none;appearance:none;z-index:10000;box-sizing:border-box;border:2px solid;border-color:rgba(var(--vot-onsurface-rgb,0,0,0),.6);cursor:pointer;background:0 0;border-radius:2px;outline:none;width:18px;height:18px;margin:3px 1px;transition:border-color .2s,background-color .2s;display:block;position:absolute}.vot-checkbox>input+span{box-sizing:border-box;width:inherit;cursor:pointer;padding-left:30px;font-weight:400;display:inline-block}.vot-checkbox>input+span:before{content:"";background-color:rgb(var(--vot-onsurface-rgb,0,0,0));opacity:0;pointer-events:none;border-radius:50%;width:40px;height:40px;transition:opacity .3s,transform .2s;display:block;position:absolute;top:-8px;left:-10px;transform:scale(1)}.vot-checkbox>input+span:after{content:"";z-index:10000;pointer-events:none;border:0 solid #0000;border-width:0 0 2px 2px;width:10px;height:5px;transition:border-color .2s;display:block;position:absolute;top:3px;left:1px;transform:translate(3px,4px)rotate(-45deg);box-sizing:content-box!important}.vot-checkbox>input:checked,.vot-checkbox>input:indeterminate{border-color:rgb(var(--vot-helper-theme));background-color:rgb(var(--vot-helper-theme))}.vot-checkbox>input:checked+span:before,.vot-checkbox>input:indeterminate+span:before{background-color:rgb(var(--vot-helper-theme))}.vot-checkbox>input:checked+span:after,.vot-checkbox>input:indeterminate+span:after{border-color:rgb(var(--vot-helper-ontheme,255,255,255))}.vot-checkbox>input:indeterminate+span:after{border-left-width:0;transform:translate(4px,3px)}.vot-checkbox:hover>input+span:before{opacity:.04}.vot-checkbox:active>input,.vot-checkbox:active:hover>input:not(:disabled){border-color:rgb(var(--vot-helper-theme))}.vot-checkbox:active>input:checked{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.6);border-color:#0000}.vot-checkbox:active>input+span:before{opacity:1;transition:transform,opacity;transform:scale(0)}.vot-checkbox>input:disabled{border-color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);cursor:initial}.vot-checkbox>input:disabled:checked,.vot-checkbox>input:disabled:indeterminate{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);border-color:#0000}.vot-checkbox>input:disabled+span{color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);cursor:initial}.vot-checkbox>input:disabled+span:before{opacity:0;transform:scale(0)}.vot-slider{display:inline-block;--vot-safari-helper1:rgba(var(--vot-primary-rgb,33,150,243),.04)!important;--vot-safari-helper2:rgba(var(--vot-primary-rgb,33,150,243),.12)!important;--vot-safari-helper3:rgba(var(--vot-primary-rgb,33,150,243),.16)!important;--vot-safari-helper4:rgba(var(--vot-primary-rgb,33,150,243),.24)!important;color:rgba(var(--vot-onsurface-rgb,0,0,0),.87)!important;font-family:var(--vot-font,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system)!important;text-align:start!important;width:100%!important;font-size:16px!important;line-height:1.5!important}.vot-slider[hidden]{display:none!important}.vot-slider>input{-webkit-appearance:none!important;appearance:none!important;cursor:pointer!important;background-color:#0000!important;width:100%!important;height:36px!important;margin:0 0 -36px!important;display:block!important;position:relative!important;top:24px!important}.vot-slider>input:last-child{margin:0!important;position:static!important}.vot-slider>input:before{content:""!important;width:calc(100%*var(--vot-progress,0))!important;background:rgb(var(--vot-primary-rgb,33,150,243))!important;height:2px!important;display:block!important;position:absolute!important;top:calc(50% - 1px)!important}.vot-slider>input:disabled{cursor:default!important;opacity:.38!important}.vot-slider>input:disabled+span{color:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important}.vot-slider>input:disabled::-webkit-slider-runnable-track{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important}.vot-slider>input:disabled::-moz-range-track{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important}.vot-slider>input:disabled::-ms-fill-lower{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important}.vot-slider>input:disabled::-ms-fill-upper{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important}.vot-slider>input:disabled::-moz-range-thumb{background-color:rgb(var(--vot-onsurface-rgb,0,0,0))!important;box-shadow:0 0 0 1px rgb(var(--vot-surface-rgb,255,255,255))!important;transform:scale(4)!important}.vot-slider>input:disabled::-ms-thumb{background-color:rgb(var(--vot-onsurface-rgb,0,0,0))!important;box-shadow:0 0 0 1px rgb(var(--vot-surface-rgb,255,255,255))!important;transform:scale(4)!important}.vot-slider>input:disabled::-webkit-slider-thumb{background-color:rgb(var(--vot-onsurface-rgb,0,0,0))!important;box-shadow:0 0 0 1px rgb(var(--vot-surface-rgb,255,255,255))!important;transform:scale(4)!important}.vot-slider>input:disabled::-ms-fill-upper{opacity:.38!important}.vot-slider>input:disabled::-moz-range-progress{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.87)!important}.vot-slider>input:disabled:-webkit-slider-thumb{color:rgb(var(--vot-surface-rgb,255,255,255))!important}.vot-slider>input:active::-webkit-slider-thumb{box-shadow:0 0 0 2px var(--vot-safari-helper4)!important}.vot-slider>input:active::-moz-range-thumb{box-shadow:0 0 0 2px rgba(var(--vot-primary-rgb,33,150,243),.24)!important}.vot-slider>input:active::-ms-thumb{box-shadow:0 0 0 2px rgba(var(--vot-primary-rgb,33,150,243),.24)!important}.vot-slider>input:focus{outline:none!important}.vot-slider>input::-webkit-slider-runnable-track{background-color:rgba(var(--vot-primary-rgb,33,150,243),.24)!important;border-radius:1px!important;width:100%!important;height:2px!important;margin:17px 0!important}.vot-slider>input::-moz-range-track{background-color:rgba(var(--vot-primary-rgb,33,150,243),.24)!important;border-radius:1px!important;width:100%!important;height:2px!important;margin:17px 0!important}.vot-slider>input::-ms-track{box-sizing:border-box!important;background-color:#0000!important;border:none!important;border-radius:1px!important;width:100%!important;height:2px!important;margin:17px 0!important;padding:0 17px!important}.vot-slider>input::-webkit-slider-thumb{-webkit-appearance:none!important;appearance:none!important;background-color:rgb(var(--vot-primary-rgb,33,150,243))!important;border:none!important;border-radius:50%!important;width:2px!important;height:2px!important;transition:box-shadow .2s!important;transform:scale(6)!important}.vot-slider>input::-moz-range-thumb{-webkit-appearance:none!important;appearance:none!important;background-color:rgb(var(--vot-primary-rgb,33,150,243))!important;border:none!important;border-radius:50%!important;width:2px!important;height:2px!important;transition:box-shadow .2s!important;transform:scale(6)!important}.vot-slider>input::-ms-thumb{-webkit-appearance:none!important;appearance:none!important;background-color:rgb(var(--vot-primary-rgb,33,150,243))!important;border:none!important;border-radius:50%!important;width:2px!important;height:2px!important;transition:box-shadow .2s!important;transform:scale(6)!important}.vot-slider>input::-webkit-slider-thumb{-webkit-appearance:none!important;margin:0!important}.vot-slider>input::-moz-range-thumb{-moz-appearance:none!important}.vot-slider>input::-ms-thumb{margin:0 17px!important}.vot-slider>input::-moz-range-progress{background-color:rgb(var(--vot-primary-rgb,33,150,243))!important;border-radius:1px!important;height:2px!important}.vot-slider>input::-ms-fill-lower{background-color:rgb(var(--vot-primary-rgb,33,150,243))!important;border-radius:1px!important;height:2px!important}.vot-slider>input::-ms-fill-upper{background-color:rgb(var(--vot-primary-rgb,33,150,243))!important;border-radius:1px!important;height:2px!important}.vot-slider>input::-moz-focus-outer{border:none!important}.vot-slider>span{margin-bottom:36px!important;display:inline-block!important}.vot-slider:hover>input::-webkit-slider-thumb{box-shadow:0 0 0 2px var(--vot-safari-helper1)!important}.vot-slider:hover>input::-ms-thumb{box-shadow:0 0 0 2px rgba(var(--vot-primary-rgb,33,150,243),.04)!important}.vot-slider:hover>input:hover::-moz-range-thumb{box-shadow:0 0 0 2px rgba(var(--vot-primary-rgb,33,150,243),.04)!important}.vot-select{font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system);text-align:start;color:var(--vot-helper-theme);fill:var(--vot-helper-theme);justify-content:space-between;align-items:center;font-size:14px;font-weight:400;line-height:1.5;display:flex;--vot-helper-theme-rgb:var(--vot-onsurface-rgb,0,0,0)!important;--vot-helper-theme:rgba(var(--vot-helper-theme-rgb),.87)!important;--vot-helper-safari1:rgba(var(--vot-onsurface-rgb,0,0,0),.6)!important;--vot-helper-safari2:rgba(var(--vot-onsurface-rgb,0,0,0),.87)!important}.vot-select[hidden]{display:none!important}.vot-select-label{font-size:16px}.vot-select-outer{cursor:pointer;justify-content:space-between;align-items:center;width:120px;max-width:120px;padding:0 5px;display:flex;border-style:solid!important;border-width:1px!important;border-color:var(--vot-helper-safari1)!important;border-radius:4px!important;transition:border .2s!important}.vot-select-outer:hover{border-color:var(--vot-helper-safari2)!important}.vot-select-title{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.vot-select-arrow-icon{justify-content:center;align-items:center;width:20px;height:32px;display:flex}.vot-select-content-list{flex-direction:column;display:flex}.vot-select-content-list .vot-select-content-item{cursor:pointer;border-radius:8px;padding:5px 10px}.vot-select-content-list .vot-select-content-item:not([inert]):hover{background-color:#2a2c31}.vot-select-content-list .vot-select-content-item[data-vot-selected=true]{color:rgb(var(--vot-primary-rgb,33,150,243));background-color:rgba(var(--vot-primary-rgb,33,150,243),.2)}.vot-select-content-list .vot-select-content-item[data-vot-selected=true]:hover{background-color:rgba(var(--vot-primary-rgb,33,150,243),.1)!important}.vot-select-content-list .vot-select-content-item[data-vot-disabled=true]{cursor:default}.vot-select-content-list .vot-select-content-item[hidden]{display:none!important}.vot-header{color:rgba(var(--vot-helper-onsurface-rgb),.87);font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system);text-align:start;font-weight:700;line-height:1.5}.vot-header[hidden]{display:none!important}.vot-header:not(:first-child){padding-top:8px}.vot-header-level-1{font-size:2em}.vot-header-level-2{font-size:1.5em}.vot-header-level-3{font-size:1.17em}.vot-header-level-4{font-size:1em}.vot-header-level-5{font-size:.83em}.vot-header-level-6{font-size:.67em}.vot-info{color:rgba(var(--vot-helper-onsurface-rgb),.87);font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system);text-align:start;-webkit-user-select:text;user-select:text;font-size:16px;line-height:1.5;display:flex}.vot-info[hidden]{display:none!important}.vot-info>:not(:first-child){color:rgba(var(--vot-helper-onsurface-rgb),.5);flex:1;margin-left:8px}.vot-details{color:rgba(var(--vot-helper-onsurface-rgb),.87);font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system);text-align:start;cursor:pointer;border-radius:.5em;justify-content:space-between;align-items:center;margin:0 -.5em;padding:.5em;font-size:16px;line-height:1.5;transition:background .5s;display:flex}.vot-details[hidden]{display:none!important}.vot-details-arrow-icon{fill:rgba(var(--vot-helper-onsurface-rgb),.87);justify-content:center;align-items:center;width:20px;height:32px;display:flex;transform:scale(1.25)rotate(-90deg)}.vot-details:hover{background:rgba(var(--vot-onsurface-rgb,0,0,0),.04)}.vot-lang-select{--vot-helper-theme-rgb:var(--vot-onsurface-rgb,0,0,0);--vot-helper-theme:rgba(var(--vot-helper-theme-rgb),.87);color:var(--vot-helper-theme);fill:var(--vot-helper-theme);justify-content:space-between;align-items:center;display:flex}.vot-lang-select[hidden]{display:none!important}.vot-lang-select-icon{justify-content:center;align-items:center;width:32px;height:32px;display:flex}.vot-segmented-button{--vot-helper-theme-rgb:var(--vot-onsurface-rgb,0,0,0);--vot-helper-theme:rgba(var(--vot-helper-theme-rgb),.87);-webkit-user-select:none;user-select:none;background:rgb(var(--vot-surface-rgb,255,255,255));color:var(--vot-helper-theme);fill:var(--vot-helper-theme);font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system);cursor:default;z-index:2147483647;border-radius:4px;align-items:center;max-width:100vw;height:32px;font-size:16px;line-height:1.5;transition:opacity .5s;display:flex;position:absolute;top:5rem;left:50%;overflow:hidden;transform:translate(-50%)}.vot-segmented-button[hidden]{display:none!important}.vot-segmented-button *{box-sizing:border-box!important}.vot-segmented-button .vot-separator{background:rgba(var(--vot-helper-theme-rgb),.1);width:1px;height:50%}.vot-segmented-button .vot-separator[hidden]{display:none!important}.vot-segmented-button .vot-segment,.vot-segmented-button .vot-segment-only-icon{color:inherit;background-color:#0000;border:none;justify-content:center;align-items:center;height:100%;padding:0 8px;transition:background-color .1s ease-in-out;display:flex;position:relative;overflow:hidden}.vot-segmented-button .vot-segment[hidden],.vot-segmented-button [hidden].vot-segment-only-icon{display:none!important}.vot-segmented-button .vot-segment:before,.vot-segmented-button .vot-segment-only-icon:before,.vot-segmented-button .vot-segment:after,.vot-segmented-button .vot-segment-only-icon:after{content:"";border-radius:inherit;opacity:0;position:absolute;top:0;bottom:0;left:0;right:0}.vot-segmented-button .vot-segment:before,.vot-segmented-button .vot-segment-only-icon:before{background-color:rgb(var(--vot-helper-theme-rgb));transition:opacity .2s}.vot-segmented-button .vot-segment:after,.vot-segmented-button .vot-segment-only-icon:after{background:radial-gradient(circle,currentColor 1%,#0000 1%) 50%/10000% 10000% no-repeat;transition:opacity 1s,background-size .5s}.vot-segmented-button .vot-segment:hover:before,.vot-segmented-button .vot-segment-only-icon:hover:before{opacity:.04}.vot-segmented-button .vot-segment:active:after,.vot-segmented-button .vot-segment-only-icon:active:after{opacity:.16;background-size:100% 100%;transition:background-size}.vot-segmented-button .vot-segment-only-icon{min-width:32px;padding:0}.vot-segmented-button .vot-segment-label{white-space:nowrap;color:inherit;margin-left:8px;font-weight:400}.vot-segmented-button[data-status=success] .vot-translate-button{color:rgb(var(--vot-primary-rgb,33,150,243));fill:rgb(var(--vot-primary-rgb,33,150,243))}.vot-segmented-button[data-status=error] .vot-translate-button{color:#f28b82;fill:#f28b82}.vot-segmented-button[data-loading=true] #vot-loading-icon{display:block!important}.vot-segmented-button[data-loading=true] #vot-translate-icon{display:none!important}.vot-segmented-button[data-direction=column]{flex-direction:column;height:fit-content}.vot-segmented-button[data-direction=column] .vot-segment-label{display:none}.vot-segmented-button[data-direction=column]>.vot-segment-only-icon,.vot-segmented-button[data-direction=column]>.vot-segment{padding:8px}.vot-segmented-button[data-direction=column] .vot-separator{width:50%;height:1px}.vot-segmented-button[data-position=left]{top:12.5vh;left:50px}.vot-segmented-button[data-position=right]{top:12.5vh;left:auto;right:0}.vot-segmented-button svg{width:24px}.vot-menu{--vot-helper-surface-rgb:var(--vot-surface-rgb,255,255,255);--vot-helper-surface:rgb(var(--vot-helper-surface-rgb));--vot-helper-onsurface-rgb:var(--vot-onsurface-rgb,0,0,0);--vot-helper-onsurface:rgba(var(--vot-helper-onsurface-rgb),.87);-webkit-user-select:none;user-select:none;background-color:var(--vot-helper-surface);color:var(--vot-helper-onsurface);font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system);cursor:default;z-index:2147483647;visibility:visible;opacity:1;transform-origin:top;border-radius:8px;min-width:300px;font-size:16px;line-height:1.5;transition:opacity .3s,transform .1s;position:absolute;top:calc(5rem + 48px);left:50%;overflow:hidden;transform:translate(-50%)scale(1)}.vot-menu *{box-sizing:border-box!important}.vot-menu[hidden]{pointer-events:none;visibility:hidden;opacity:0;transform:translate(-50%)scale(0);display:block!important}.vot-menu-content-wrapper{max-height:calc(var(--vot-container-height,75vh) - (5rem + 32px + 16px)*2);flex-direction:column;min-height:100px;display:flex;overflow:auto}.vot-menu-header-container{flex-shrink:0;align-items:flex-start;min-height:31px;display:flex}.vot-menu-header-container:empty{padding:0 0 16px}.vot-menu-header-container>.vot-icon-button{margin-inline-end:4px;margin-top:4px}.vot-menu-title-container{font-size:inherit;font-weight:inherit;text-align:start;outline:0;flex:1;margin:0;display:flex}.vot-menu-title{padding-bottom:16px;padding-inline-start:16px;padding-inline-end:16px;flex:1;padding-top:16px;font-size:16px;font-weight:400;line-height:1}.vot-menu-body-container{box-sizing:border-box;overscroll-behavior:contain;flex-direction:column;gap:8px;min-height:1.375rem;padding:0 16px;display:flex;overflow:auto;scrollbar-color:rgba(var(--vot-helper-onsurface-rgb),.1)var(--vot-helper-surface)!important}.vot-menu-body-container::-webkit-scrollbar{background:var(--vot-helper-surface)!important;width:12px!important;height:12px!important}.vot-menu-body-container::-webkit-scrollbar-track{background:var(--vot-helper-surface)!important;width:12px!important;height:12px!important}.vot-menu-body-container::-webkit-scrollbar-thumb{background:rgba(var(--vot-helper-onsurface-rgb),.1)!important;border:5px solid var(--vot-helper-surface)!important;-webkit-border-radius:1ex!important}.vot-menu-body-container::-webkit-scrollbar-thumb:hover{border:3px solid var(--vot-helper-surface)!important}.vot-menu-body-container::-webkit-scrollbar-corner{background:var(--vot-helper-surface)!important}.vot-menu-footer-container{padding-bottom:16px;padding-inline-start:16px;padding-inline-end:16px;flex-shrink:0;justify-content:flex-end;padding-top:16px;display:flex}.vot-menu-footer-container:empty{padding:16px 0 0}.vot-menu[data-position=left]{top:12.5vh;left:240px}.vot-menu[data-position=right]{top:12.5vh;left:auto;right:-80px}.vot-dialog{--vot-helper-surface-rgb:var(--vot-surface-rgb,255,255,255);--vot-helper-surface:rgb(var(--vot-helper-surface-rgb));--vot-helper-onsurface-rgb:var(--vot-onsurface-rgb,0,0,0);--vot-helper-onsurface:rgba(var(--vot-helper-onsurface-rgb),.87);max-width:initial;max-height:initial;width:min(var(--vot-dialog-width,512px),100%);top:50%;bottom:50%;background-color:var(--vot-helper-surface);color:var(--vot-helper-onsurface);font-family:var(--vot-font-family,"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system);-webkit-user-select:none;user-select:none;visibility:visible;opacity:1;transform-origin:50%;border-radius:8px;height:fit-content;margin:auto;padding:0;font-size:16px;line-height:1.5;transition:opacity .3s,transform .1s;display:block;position:fixed;top:0;bottom:0;left:0;right:0;overflow-x:auto;overflow-y:hidden;transform:scale(1);box-shadow:0 0 16px #0000001f,0 16px 16px #0000003d}[hidden]>.vot-dialog{pointer-events:none;opacity:0;transition:opacity .1s,transform .2s;transform:scale(.5)}.vot-dialog-container{visibility:visible;z-index:2147483647;position:absolute}.vot-dialog-container[hidden]{pointer-events:none;visibility:hidden;display:block!important}.vot-dialog-container *{box-sizing:border-box!important}.vot-dialog-backdrop{opacity:1;background-color:#0009;transition:opacity .3s;position:fixed;top:0;bottom:0;left:0;right:0}[hidden]>.vot-dialog-backdrop{pointer-events:none;opacity:0}.vot-dialog-content-wrapper{flex-direction:column;max-height:75vh;display:flex;overflow:auto}.vot-dialog-header-container{flex-shrink:0;align-items:flex-start;min-height:31px;display:flex}.vot-dialog-header-container:empty{padding:0 0 20px}.vot-dialog-header-container>.vot-icon-button{margin-inline-end:4px;margin-top:4px}.vot-dialog-title-container{font-size:inherit;font-weight:inherit;outline:0;flex:1;margin:0;display:flex}.vot-dialog-title{padding-bottom:16px;padding-inline-start:20px;padding-inline-end:20px;flex:1;padding-top:20px;font-size:115.385%;font-weight:700;line-height:1}.vot-dialog-body-container{box-sizing:border-box;overscroll-behavior:contain;flex-direction:column;gap:16px;min-height:1.375rem;padding:0 20px;display:flex;overflow:auto;scrollbar-color:rgba(var(--vot-helper-onsurface-rgb),.1)var(--vot-helper-surface)!important}.vot-dialog-body-container::-webkit-scrollbar{background:var(--vot-helper-surface)!important;width:12px!important;height:12px!important}.vot-dialog-body-container::-webkit-scrollbar-track{background:var(--vot-helper-surface)!important;width:12px!important;height:12px!important}.vot-dialog-body-container::-webkit-scrollbar-thumb{background:rgba(var(--vot-helper-onsurface-rgb),.1)!important;border:5px solid var(--vot-helper-surface)!important;-webkit-border-radius:1ex!important}.vot-dialog-body-container::-webkit-scrollbar-thumb:hover{border:3px solid var(--vot-helper-surface)!important}.vot-dialog-body-container::-webkit-scrollbar-corner{background:var(--vot-helper-surface)!important}.vot-dialog-footer-container{padding-bottom:16px;padding-inline-start:16px;padding-inline-end:16px;flex-shrink:0;justify-content:flex-end;padding-top:16px;display:flex}.vot-dialog-footer-container:empty{padding:20px 0 0}.vot-subtitles-widget{z-index:2147483647;pointer-events:none;justify-content:center;align-items:center;width:50%;min-height:20%;max-height:100%;display:flex;position:absolute;top:75%;left:25%}.vot-subtitles{--vot-subtitles-background:rgba(var(--vot-surface-rgb,46,47,52),var(--vot-subtitles-opacity,.8));background:var(--vot-subtitles-background,#2e2f34cc);color:var(--vot-subtitles-color,#e3e3e3);pointer-events:all;box-sizing:border-box;-webkit-user-select:none;user-select:none;border-radius:.5em;width:max-content;max-width:100%;max-height:100%;padding:.5em;font-size:20px;line-height:normal;position:relative}.vot-subtitles span{-webkit-user-select:text;user-select:text;font-size:inherit!important;line-height:normal!important}.vot-subtitles .passed{color:var(--vot-subtitles-passed-color,#2196f3)}:root{--vot-font-family:"Roboto","Segoe UI",BlinkMacSystemFont,system-ui,-apple-system;--vot-primary-rgb:139,180,245;--vot-onprimary-rgb:32,33,36;--vot-surface-rgb:32,33,36;--vot-onsurface-rgb:227,227,227;--vot-subtitles-color:rgb(var(--vot-onsurface-rgb,227,227,227));--vot-subtitles-passed-color:rgb(var(--vot-primary-rgb,33,150,243))}vot-block{display:block;visibility:visible!important}')},"./node_modules/bowser/es5.js":function(t){t.exports=function(t){var e={};function o(n){if(e[n])return e[n].exports;var a=e[n]={i:n,l:!1,exports:{}};return t[n].call(a.exports,a,a.exports,o),a.l=!0,a.exports}return o.m=t,o.c=e,o.d=function(t,e,n){o.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.t=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var a in t)o.d(n,a,function(e){return t[e]}.bind(null,a));return n},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,"a",e),e},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o.p="",o(o.s=90)}({17:function(t,e,o){"use strict";e.__esModule=!0,e.default=void 0;var n=o(18),a=function(){function t(){}return t.getFirstMatch=function(t,e){var o=e.match(t);return o&&o.length>0&&o[1]||""},t.getSecondMatch=function(t,e){var o=e.match(t);return o&&o.length>1&&o[2]||""},t.matchAndReturnConst=function(t,e,o){if(t.test(e))return o},t.getWindowsVersionName=function(t){switch(t){case"NT":return"NT";case"XP":case"NT 5.1":return"XP";case"NT 5.0":return"2000";case"NT 5.2":return"2003";case"NT 6.0":return"Vista";case"NT 6.1":return"7";case"NT 6.2":return"8";case"NT 6.3":return"8.1";case"NT 10.0":return"10";default:return}},t.getMacOSVersionName=function(t){var e=t.split(".").splice(0,2).map((function(t){return parseInt(t,10)||0}));if(e.push(0),10===e[0])switch(e[1]){case 5:return"Leopard";case 6:return"Snow Leopard";case 7:return"Lion";case 8:return"Mountain Lion";case 9:return"Mavericks";case 10:return"Yosemite";case 11:return"El Capitan";case 12:return"Sierra";case 13:return"High Sierra";case 14:return"Mojave";case 15:return"Catalina";default:return}},t.getAndroidVersionName=function(t){var e=t.split(".").splice(0,2).map((function(t){return parseInt(t,10)||0}));if(e.push(0),!(1===e[0]&&e[1]<5))return 1===e[0]&&e[1]<6?"Cupcake":1===e[0]&&e[1]>=6?"Donut":2===e[0]&&e[1]<2?"Eclair":2===e[0]&&2===e[1]?"Froyo":2===e[0]&&e[1]>2?"Gingerbread":3===e[0]?"Honeycomb":4===e[0]&&e[1]<1?"Ice Cream Sandwich":4===e[0]&&e[1]<4?"Jelly Bean":4===e[0]&&e[1]>=4?"KitKat":5===e[0]?"Lollipop":6===e[0]?"Marshmallow":7===e[0]?"Nougat":8===e[0]?"Oreo":9===e[0]?"Pie":void 0},t.getVersionPrecision=function(t){return t.split(".").length},t.compareVersions=function(e,o,n){void 0===n&&(n=!1);var a=t.getVersionPrecision(e),i=t.getVersionPrecision(o),r=Math.max(a,i),s=0,l=t.map([e,o],(function(e){var o=r-t.getVersionPrecision(e),n=e+new Array(o+1).join(".0");return t.map(n.split("."),(function(t){return new Array(20-t.length).join("0")+t})).reverse()}));for(n&&(s=r-Math.min(a,i)),r-=1;r>=s;){if(l[0][r]>l[1][r])return 1;if(l[0][r]===l[1][r]){if(r===s)return 0;r-=1}else if(l[0][r]1?a-1:0),r=1;r0){var r=Object.keys(o),l=s.default.find(r,(function(t){return e.isOS(t)}));if(l){var d=this.satisfies(o[l]);if(void 0!==d)return d}var u=s.default.find(r,(function(t){return e.isPlatform(t)}));if(u){var c=this.satisfies(o[u]);if(void 0!==c)return c}}if(i>0){var h=Object.keys(a),p=s.default.find(h,(function(t){return e.isBrowser(t,!0)}));if(void 0!==p)return this.compareVersion(a[p])}},e.isBrowser=function(t,e){void 0===e&&(e=!1);var o=this.getBrowserName().toLowerCase(),n=t.toLowerCase(),a=s.default.getBrowserTypeByAlias(n);return e&&a&&(n=a.toLowerCase()),n===o},e.compareVersion=function(t){var e=[0],o=t,n=!1,a=this.getBrowserVersion();if("string"==typeof a)return">"===t[0]||"<"===t[0]?(o=t.substr(1),"="===t[1]?(n=!0,o=t.substr(2)):e=[],">"===t[0]?e.push(1):e.push(-1)):"="===t[0]?o=t.substr(1):"~"===t[0]&&(n=!0,o=t.substr(1)),e.indexOf(s.default.compareVersions(a,o,n))>-1},e.isOS=function(t){return this.getOSName(!0)===String(t).toLowerCase()},e.isPlatform=function(t){return this.getPlatformType(!0)===String(t).toLowerCase()},e.isEngine=function(t){return this.getEngineName(!0)===String(t).toLowerCase()},e.is=function(t,e){return void 0===e&&(e=!1),this.isBrowser(t,e)||this.isOS(t)||this.isPlatform(t)},e.some=function(t){var e=this;return void 0===t&&(t=[]),t.some((function(t){return e.is(t)}))},t}();e.default=d,t.exports=e.default},92:function(t,e,o){"use strict";e.__esModule=!0,e.default=void 0;var n,a=(n=o(17))&&n.__esModule?n:{default:n},i=/version\/(\d+(\.?_?\d+)+)/i,r=[{test:[/googlebot/i],describe:function(t){var e={name:"Googlebot"},o=a.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,t)||a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/opera/i],describe:function(t){var e={name:"Opera"},o=a.default.getFirstMatch(i,t)||a.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/opr\/|opios/i],describe:function(t){var e={name:"Opera"},o=a.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,t)||a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/SamsungBrowser/i],describe:function(t){var e={name:"Samsung Internet for Android"},o=a.default.getFirstMatch(i,t)||a.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/Whale/i],describe:function(t){var e={name:"NAVER Whale Browser"},o=a.default.getFirstMatch(i,t)||a.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/MZBrowser/i],describe:function(t){var e={name:"MZ Browser"},o=a.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,t)||a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/focus/i],describe:function(t){var e={name:"Focus"},o=a.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,t)||a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/swing/i],describe:function(t){var e={name:"Swing"},o=a.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,t)||a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/coast/i],describe:function(t){var e={name:"Opera Coast"},o=a.default.getFirstMatch(i,t)||a.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function(t){var e={name:"Opera Touch"},o=a.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,t)||a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/yabrowser/i],describe:function(t){var e={name:"Yandex Browser"},o=a.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,t)||a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/ucbrowser/i],describe:function(t){var e={name:"UC Browser"},o=a.default.getFirstMatch(i,t)||a.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/Maxthon|mxios/i],describe:function(t){var e={name:"Maxthon"},o=a.default.getFirstMatch(i,t)||a.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/epiphany/i],describe:function(t){var e={name:"Epiphany"},o=a.default.getFirstMatch(i,t)||a.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/puffin/i],describe:function(t){var e={name:"Puffin"},o=a.default.getFirstMatch(i,t)||a.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/sleipnir/i],describe:function(t){var e={name:"Sleipnir"},o=a.default.getFirstMatch(i,t)||a.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/k-meleon/i],describe:function(t){var e={name:"K-Meleon"},o=a.default.getFirstMatch(i,t)||a.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/micromessenger/i],describe:function(t){var e={name:"WeChat"},o=a.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,t)||a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/qqbrowser/i],describe:function(t){var e={name:/qqbrowserlite/i.test(t)?"QQ Browser Lite":"QQ Browser"},o=a.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,t)||a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/msie|trident/i],describe:function(t){var e={name:"Internet Explorer"},o=a.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/\sedg\//i],describe:function(t){var e={name:"Microsoft Edge"},o=a.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/edg([ea]|ios)/i],describe:function(t){var e={name:"Microsoft Edge"},o=a.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/vivaldi/i],describe:function(t){var e={name:"Vivaldi"},o=a.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/seamonkey/i],describe:function(t){var e={name:"SeaMonkey"},o=a.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/sailfish/i],describe:function(t){var e={name:"Sailfish"},o=a.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,t);return o&&(e.version=o),e}},{test:[/silk/i],describe:function(t){var e={name:"Amazon Silk"},o=a.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/phantom/i],describe:function(t){var e={name:"PhantomJS"},o=a.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/slimerjs/i],describe:function(t){var e={name:"SlimerJS"},o=a.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(t){var e={name:"BlackBerry"},o=a.default.getFirstMatch(i,t)||a.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/(web|hpw)[o0]s/i],describe:function(t){var e={name:"WebOS Browser"},o=a.default.getFirstMatch(i,t)||a.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/bada/i],describe:function(t){var e={name:"Bada"},o=a.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/tizen/i],describe:function(t){var e={name:"Tizen"},o=a.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,t)||a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/qupzilla/i],describe:function(t){var e={name:"QupZilla"},o=a.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,t)||a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/firefox|iceweasel|fxios/i],describe:function(t){var e={name:"Firefox"},o=a.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/electron/i],describe:function(t){var e={name:"Electron"},o=a.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/MiuiBrowser/i],describe:function(t){var e={name:"Miui"},o=a.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/chromium/i],describe:function(t){var e={name:"Chromium"},o=a.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,t)||a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/chrome|crios|crmo/i],describe:function(t){var e={name:"Chrome"},o=a.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/GSA/i],describe:function(t){var e={name:"Google Search"},o=a.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:function(t){var e=!t.test(/like android/i),o=t.test(/android/i);return e&&o},describe:function(t){var e={name:"Android Browser"},o=a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/playstation 4/i],describe:function(t){var e={name:"PlayStation 4"},o=a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/safari|applewebkit/i],describe:function(t){var e={name:"Safari"},o=a.default.getFirstMatch(i,t);return o&&(e.version=o),e}},{test:[/.*/i],describe:function(t){var e=-1!==t.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return{name:a.default.getFirstMatch(e,t),version:a.default.getSecondMatch(e,t)}}}];e.default=r,t.exports=e.default},93:function(t,e,o){"use strict";e.__esModule=!0,e.default=void 0;var n,a=(n=o(17))&&n.__esModule?n:{default:n},i=o(18),r=[{test:[/Roku\/DVP/],describe:function(t){var e=a.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,t);return{name:i.OS_MAP.Roku,version:e}}},{test:[/windows phone/i],describe:function(t){var e=a.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,t);return{name:i.OS_MAP.WindowsPhone,version:e}}},{test:[/windows /i],describe:function(t){var e=a.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,t),o=a.default.getWindowsVersionName(e);return{name:i.OS_MAP.Windows,version:e,versionName:o}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(t){var e={name:i.OS_MAP.iOS},o=a.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,t);return o&&(e.version=o),e}},{test:[/macintosh/i],describe:function(t){var e=a.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,t).replace(/[_\s]/g,"."),o=a.default.getMacOSVersionName(e),n={name:i.OS_MAP.MacOS,version:e};return o&&(n.versionName=o),n}},{test:[/(ipod|iphone|ipad)/i],describe:function(t){var e=a.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,t).replace(/[_\s]/g,".");return{name:i.OS_MAP.iOS,version:e}}},{test:function(t){var e=!t.test(/like android/i),o=t.test(/android/i);return e&&o},describe:function(t){var e=a.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,t),o=a.default.getAndroidVersionName(e),n={name:i.OS_MAP.Android,version:e};return o&&(n.versionName=o),n}},{test:[/(web|hpw)[o0]s/i],describe:function(t){var e=a.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,t),o={name:i.OS_MAP.WebOS};return e&&e.length&&(o.version=e),o}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(t){var e=a.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,t)||a.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,t)||a.default.getFirstMatch(/\bbb(\d+)/i,t);return{name:i.OS_MAP.BlackBerry,version:e}}},{test:[/bada/i],describe:function(t){var e=a.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,t);return{name:i.OS_MAP.Bada,version:e}}},{test:[/tizen/i],describe:function(t){var e=a.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,t);return{name:i.OS_MAP.Tizen,version:e}}},{test:[/linux/i],describe:function(){return{name:i.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return{name:i.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(t){var e=a.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,t);return{name:i.OS_MAP.PlayStation4,version:e}}}];e.default=r,t.exports=e.default},94:function(t,e,o){"use strict";e.__esModule=!0,e.default=void 0;var n,a=(n=o(17))&&n.__esModule?n:{default:n},i=o(18),r=[{test:[/googlebot/i],describe:function(){return{type:"bot",vendor:"Google"}}},{test:[/huawei/i],describe:function(t){var e=a.default.getFirstMatch(/(can-l01)/i,t)&&"Nova",o={type:i.PLATFORMS_MAP.mobile,vendor:"Huawei"};return e&&(o.model=e),o}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function(){return{type:i.PLATFORMS_MAP.tablet,vendor:"Nexus"}}},{test:[/ipad/i],describe:function(){return{type:i.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(){return{type:i.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/kftt build/i],describe:function(){return{type:i.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"}}},{test:[/silk/i],describe:function(){return{type:i.PLATFORMS_MAP.tablet,vendor:"Amazon"}}},{test:[/tablet(?! pc)/i],describe:function(){return{type:i.PLATFORMS_MAP.tablet}}},{test:function(t){var e=t.test(/ipod|iphone/i),o=t.test(/like (ipod|iphone)/i);return e&&!o},describe:function(t){var e=a.default.getFirstMatch(/(ipod|iphone)/i,t);return{type:i.PLATFORMS_MAP.mobile,vendor:"Apple",model:e}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return{type:i.PLATFORMS_MAP.mobile,vendor:"Nexus"}}},{test:[/[^-]mobi/i],describe:function(){return{type:i.PLATFORMS_MAP.mobile}}},{test:function(t){return"blackberry"===t.getBrowserName(!0)},describe:function(){return{type:i.PLATFORMS_MAP.mobile,vendor:"BlackBerry"}}},{test:function(t){return"bada"===t.getBrowserName(!0)},describe:function(){return{type:i.PLATFORMS_MAP.mobile}}},{test:function(t){return"windows phone"===t.getBrowserName()},describe:function(){return{type:i.PLATFORMS_MAP.mobile,vendor:"Microsoft"}}},{test:function(t){var e=Number(String(t.getOSVersion()).split(".")[0]);return"android"===t.getOSName(!0)&&e>=3},describe:function(){return{type:i.PLATFORMS_MAP.tablet}}},{test:function(t){return"android"===t.getOSName(!0)},describe:function(){return{type:i.PLATFORMS_MAP.mobile}}},{test:function(t){return"macos"===t.getOSName(!0)},describe:function(){return{type:i.PLATFORMS_MAP.desktop,vendor:"Apple"}}},{test:function(t){return"windows"===t.getOSName(!0)},describe:function(){return{type:i.PLATFORMS_MAP.desktop}}},{test:function(t){return"linux"===t.getOSName(!0)},describe:function(){return{type:i.PLATFORMS_MAP.desktop}}},{test:function(t){return"playstation 4"===t.getOSName(!0)},describe:function(){return{type:i.PLATFORMS_MAP.tv}}},{test:function(t){return"roku"===t.getOSName(!0)},describe:function(){return{type:i.PLATFORMS_MAP.tv}}}];e.default=r,t.exports=e.default},95:function(t,e,o){"use strict";e.__esModule=!0,e.default=void 0;var n,a=(n=o(17))&&n.__esModule?n:{default:n},i=o(18),r=[{test:function(t){return"microsoft edge"===t.getBrowserName(!0)},describe:function(t){if(/\sedg\//i.test(t))return{name:i.ENGINE_MAP.Blink};var e=a.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,t);return{name:i.ENGINE_MAP.EdgeHTML,version:e}}},{test:[/trident/i],describe:function(t){var e={name:i.ENGINE_MAP.Trident},o=a.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:function(t){return t.test(/presto/i)},describe:function(t){var e={name:i.ENGINE_MAP.Presto},o=a.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:function(t){var e=t.test(/gecko/i),o=t.test(/like gecko/i);return e&&!o},describe:function(t){var e={name:i.ENGINE_MAP.Gecko},o=a.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}},{test:[/(apple)?webkit\/537\.36/i],describe:function(){return{name:i.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(t){var e={name:i.ENGINE_MAP.WebKit},o=a.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,t);return o&&(e.version=o),e}}];e.default=r,t.exports=e.default}})},"./node_modules/requestidlecallback-polyfill/index.js":()=>{window.requestIdleCallback=window.requestIdleCallback||function(t){var e=Date.now();return setTimeout((function(){t({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-e))}})}),1)},window.cancelIdleCallback=window.cancelIdleCallback||function(t){clearTimeout(t)}}},e={};function o(n){var a=e[n];if(void 0!==a)return a.exports;var i=e[n]={exports:{}};return t[n].call(i.exports,i,i.exports,o),i.exports}(()=>{"use strict";var t=o("./node_modules/bowser/es5.js");const e=protobuf;var n;function a(t){switch(t){case 0:case"NO_CONNECTION":return n.NO_CONNECTION;case 10:case"TRANSLATING":return n.TRANSLATING;case 20:case"STREAMING":return n.STREAMING;default:return n.UNRECOGNIZED}}!function(t){t[t.NO_CONNECTION=0]="NO_CONNECTION",t[t.TRANSLATING=10]="TRANSLATING",t[t.STREAMING=20]="STREAMING",t[t.UNRECOGNIZED=-1]="UNRECOGNIZED"}(n||(n={}));const i={encode:(t,o=e.Writer.create())=>(""!==t.target&&o.uint32(10).string(t.target),""!==t.targetUrl&&o.uint32(18).string(t.targetUrl),o),decode(t,o){const n=t instanceof e.Reader?t:e.Reader.create(t);let a=void 0===o?n.len:n.pos+o;const i={target:"",targetUrl:""};for(;n.pos>>3){case 1:if(10!==t)break;i.target=n.string();continue;case 2:if(18!==t)break;i.targetUrl=n.string();continue}if(4==(7&t)||0===t)break;n.skipType(7&t)}return i},fromJSON:t=>({target:b(t.target)?globalThis.String(t.target):"",targetUrl:b(t.targetUrl)?globalThis.String(t.targetUrl):""}),toJSON(t){const e={};return""!==t.target&&(e.target=t.target),""!==t.targetUrl&&(e.targetUrl=t.targetUrl),e},create:t=>i.fromPartial(t??{}),fromPartial(t){const e={target:"",targetUrl:""};return e.target=t.target??"",e.targetUrl=t.targetUrl??"",e}};const r={encode(t,o=e.Writer.create()){""!==t.url&&o.uint32(26).string(t.url),void 0!==t.deviceId&&o.uint32(34).string(t.deviceId),!1!==t.firstRequest&&o.uint32(40).bool(t.firstRequest),0!==t.duration&&o.uint32(49).double(t.duration),0!==t.unknown0&&o.uint32(56).int32(t.unknown0),""!==t.language&&o.uint32(66).string(t.language),!1!==t.forceSourceLang&&o.uint32(72).bool(t.forceSourceLang),0!==t.unknown1&&o.uint32(80).int32(t.unknown1);for(const e of t.translationHelp)i.encode(e,o.uint32(90).fork()).ldelim();return""!==t.responseLanguage&&o.uint32(114).string(t.responseLanguage),0!==t.unknown2&&o.uint32(120).int32(t.unknown2),0!==t.unknown3&&o.uint32(128).int32(t.unknown3),!1!==t.bypassCache&&o.uint32(136).bool(t.bypassCache),o},decode(t,o){const n=t instanceof e.Reader?t:e.Reader.create(t);let a=void 0===o?n.len:n.pos+o;const r={url:"",deviceId:void 0,firstRequest:!1,duration:0,unknown0:0,language:"",forceSourceLang:!1,unknown1:0,translationHelp:[],responseLanguage:"",unknown2:0,unknown3:0,bypassCache:!1};for(;n.pos>>3){case 3:if(26!==t)break;r.url=n.string();continue;case 4:if(34!==t)break;r.deviceId=n.string();continue;case 5:if(40!==t)break;r.firstRequest=n.bool();continue;case 6:if(49!==t)break;r.duration=n.double();continue;case 7:if(56!==t)break;r.unknown0=n.int32();continue;case 8:if(66!==t)break;r.language=n.string();continue;case 9:if(72!==t)break;r.forceSourceLang=n.bool();continue;case 10:if(80!==t)break;r.unknown1=n.int32();continue;case 11:if(90!==t)break;r.translationHelp.push(i.decode(n,n.uint32()));continue;case 14:if(114!==t)break;r.responseLanguage=n.string();continue;case 15:if(120!==t)break;r.unknown2=n.int32();continue;case 16:if(128!==t)break;r.unknown3=n.int32();continue;case 17:if(136!==t)break;r.bypassCache=n.bool();continue}if(4==(7&t)||0===t)break;n.skipType(7&t)}return r},fromJSON:t=>({url:b(t.url)?globalThis.String(t.url):"",deviceId:b(t.deviceId)?globalThis.String(t.deviceId):void 0,firstRequest:!!b(t.firstRequest)&&globalThis.Boolean(t.firstRequest),duration:b(t.duration)?globalThis.Number(t.duration):0,unknown0:b(t.unknown0)?globalThis.Number(t.unknown0):0,language:b(t.language)?globalThis.String(t.language):"",forceSourceLang:!!b(t.forceSourceLang)&&globalThis.Boolean(t.forceSourceLang),unknown1:b(t.unknown1)?globalThis.Number(t.unknown1):0,translationHelp:globalThis.Array.isArray(t?.translationHelp)?t.translationHelp.map((t=>i.fromJSON(t))):[],responseLanguage:b(t.responseLanguage)?globalThis.String(t.responseLanguage):"",unknown2:b(t.unknown2)?globalThis.Number(t.unknown2):0,unknown3:b(t.unknown3)?globalThis.Number(t.unknown3):0,bypassCache:!!b(t.bypassCache)&&globalThis.Boolean(t.bypassCache)}),toJSON(t){const e={};return""!==t.url&&(e.url=t.url),void 0!==t.deviceId&&(e.deviceId=t.deviceId),!1!==t.firstRequest&&(e.firstRequest=t.firstRequest),0!==t.duration&&(e.duration=t.duration),0!==t.unknown0&&(e.unknown0=Math.round(t.unknown0)),""!==t.language&&(e.language=t.language),!1!==t.forceSourceLang&&(e.forceSourceLang=t.forceSourceLang),0!==t.unknown1&&(e.unknown1=Math.round(t.unknown1)),t.translationHelp?.length&&(e.translationHelp=t.translationHelp.map((t=>i.toJSON(t)))),""!==t.responseLanguage&&(e.responseLanguage=t.responseLanguage),0!==t.unknown2&&(e.unknown2=Math.round(t.unknown2)),0!==t.unknown3&&(e.unknown3=Math.round(t.unknown3)),!1!==t.bypassCache&&(e.bypassCache=t.bypassCache),e},create:t=>r.fromPartial(t??{}),fromPartial(t){const e={url:"",deviceId:void 0,firstRequest:!1,duration:0,unknown0:0,language:"",forceSourceLang:!1,unknown1:0,translationHelp:[],responseLanguage:"",unknown2:0,unknown3:0,bypassCache:!1};return e.url=t.url??"",e.deviceId=t.deviceId??void 0,e.firstRequest=t.firstRequest??!1,e.duration=t.duration??0,e.unknown0=t.unknown0??0,e.language=t.language??"",e.forceSourceLang=t.forceSourceLang??!1,e.unknown1=t.unknown1??0,e.translationHelp=t.translationHelp?.map((t=>i.fromPartial(t)))||[],e.responseLanguage=t.responseLanguage??"",e.unknown2=t.unknown2??0,e.unknown3=t.unknown3??0,e.bypassCache=t.bypassCache??!1,e}};const s={encode:(t,o=e.Writer.create())=>(void 0!==t.url&&o.uint32(10).string(t.url),void 0!==t.duration&&o.uint32(17).double(t.duration),0!==t.status&&o.uint32(32).int32(t.status),void 0!==t.remainingTime&&o.uint32(40).int32(t.remainingTime),void 0!==t.unknown0&&o.uint32(48).int32(t.unknown0),""!==t.translationId&&o.uint32(58).string(t.translationId),void 0!==t.language&&o.uint32(66).string(t.language),void 0!==t.message&&o.uint32(74).string(t.message),o),decode(t,o){const n=t instanceof e.Reader?t:e.Reader.create(t);let a=void 0===o?n.len:n.pos+o;const i={url:void 0,duration:void 0,status:0,remainingTime:void 0,unknown0:void 0,translationId:"",language:void 0,message:void 0};for(;n.pos>>3){case 1:if(10!==t)break;i.url=n.string();continue;case 2:if(17!==t)break;i.duration=n.double();continue;case 4:if(32!==t)break;i.status=n.int32();continue;case 5:if(40!==t)break;i.remainingTime=n.int32();continue;case 6:if(48!==t)break;i.unknown0=n.int32();continue;case 7:if(58!==t)break;i.translationId=n.string();continue;case 8:if(66!==t)break;i.language=n.string();continue;case 9:if(74!==t)break;i.message=n.string();continue}if(4==(7&t)||0===t)break;n.skipType(7&t)}return i},fromJSON:t=>({url:b(t.url)?globalThis.String(t.url):void 0,duration:b(t.duration)?globalThis.Number(t.duration):void 0,status:b(t.status)?globalThis.Number(t.status):0,remainingTime:b(t.remainingTime)?globalThis.Number(t.remainingTime):void 0,unknown0:b(t.unknown0)?globalThis.Number(t.unknown0):void 0,translationId:b(t.translationId)?globalThis.String(t.translationId):"",language:b(t.language)?globalThis.String(t.language):void 0,message:b(t.message)?globalThis.String(t.message):void 0}),toJSON(t){const e={};return void 0!==t.url&&(e.url=t.url),void 0!==t.duration&&(e.duration=t.duration),0!==t.status&&(e.status=Math.round(t.status)),void 0!==t.remainingTime&&(e.remainingTime=Math.round(t.remainingTime)),void 0!==t.unknown0&&(e.unknown0=Math.round(t.unknown0)),""!==t.translationId&&(e.translationId=t.translationId),void 0!==t.language&&(e.language=t.language),void 0!==t.message&&(e.message=t.message),e},create:t=>s.fromPartial(t??{}),fromPartial(t){const e={url:void 0,duration:void 0,status:0,remainingTime:void 0,unknown0:void 0,translationId:"",language:void 0,message:void 0};return e.url=t.url??void 0,e.duration=t.duration??void 0,e.status=t.status??0,e.remainingTime=t.remainingTime??void 0,e.unknown0=t.unknown0??void 0,e.translationId=t.translationId??"",e.language=t.language??void 0,e.message=t.message??void 0,e}};const l={encode:(t,o=e.Writer.create())=>(""!==t.language&&o.uint32(10).string(t.language),""!==t.url&&o.uint32(18).string(t.url),0!==t.unknown0&&o.uint32(24).int32(t.unknown0),""!==t.translatedLanguage&&o.uint32(34).string(t.translatedLanguage),""!==t.translatedUrl&&o.uint32(42).string(t.translatedUrl),0!==t.unknown1&&o.uint32(48).int32(t.unknown1),0!==t.unknown2&&o.uint32(56).int32(t.unknown2),o),decode(t,o){const n=t instanceof e.Reader?t:e.Reader.create(t);let a=void 0===o?n.len:n.pos+o;const i={language:"",url:"",unknown0:0,translatedLanguage:"",translatedUrl:"",unknown1:0,unknown2:0};for(;n.pos>>3){case 1:if(10!==t)break;i.language=n.string();continue;case 2:if(18!==t)break;i.url=n.string();continue;case 3:if(24!==t)break;i.unknown0=n.int32();continue;case 4:if(34!==t)break;i.translatedLanguage=n.string();continue;case 5:if(42!==t)break;i.translatedUrl=n.string();continue;case 6:if(48!==t)break;i.unknown1=n.int32();continue;case 7:if(56!==t)break;i.unknown2=n.int32();continue}if(4==(7&t)||0===t)break;n.skipType(7&t)}return i},fromJSON:t=>({language:b(t.language)?globalThis.String(t.language):"",url:b(t.url)?globalThis.String(t.url):"",unknown0:b(t.unknown0)?globalThis.Number(t.unknown0):0,translatedLanguage:b(t.translatedLanguage)?globalThis.String(t.translatedLanguage):"",translatedUrl:b(t.translatedUrl)?globalThis.String(t.translatedUrl):"",unknown1:b(t.unknown1)?globalThis.Number(t.unknown1):0,unknown2:b(t.unknown2)?globalThis.Number(t.unknown2):0}),toJSON(t){const e={};return""!==t.language&&(e.language=t.language),""!==t.url&&(e.url=t.url),0!==t.unknown0&&(e.unknown0=Math.round(t.unknown0)),""!==t.translatedLanguage&&(e.translatedLanguage=t.translatedLanguage),""!==t.translatedUrl&&(e.translatedUrl=t.translatedUrl),0!==t.unknown1&&(e.unknown1=Math.round(t.unknown1)),0!==t.unknown2&&(e.unknown2=Math.round(t.unknown2)),e},create:t=>l.fromPartial(t??{}),fromPartial(t){const e={language:"",url:"",unknown0:0,translatedLanguage:"",translatedUrl:"",unknown1:0,unknown2:0};return e.language=t.language??"",e.url=t.url??"",e.unknown0=t.unknown0??0,e.translatedLanguage=t.translatedLanguage??"",e.translatedUrl=t.translatedUrl??"",e.unknown1=t.unknown1??0,e.unknown2=t.unknown2??0,e}};const d={encode:(t,o=e.Writer.create())=>(""!==t.url&&o.uint32(10).string(t.url),""!==t.language&&o.uint32(18).string(t.language),o),decode(t,o){const n=t instanceof e.Reader?t:e.Reader.create(t);let a=void 0===o?n.len:n.pos+o;const i={url:"",language:""};for(;n.pos>>3){case 1:if(10!==t)break;i.url=n.string();continue;case 2:if(18!==t)break;i.language=n.string();continue}if(4==(7&t)||0===t)break;n.skipType(7&t)}return i},fromJSON:t=>({url:b(t.url)?globalThis.String(t.url):"",language:b(t.language)?globalThis.String(t.language):""}),toJSON(t){const e={};return""!==t.url&&(e.url=t.url),""!==t.language&&(e.language=t.language),e},create:t=>d.fromPartial(t??{}),fromPartial(t){const e={url:"",language:""};return e.url=t.url??"",e.language=t.language??"",e}};const u={encode(t,o=e.Writer.create()){!1!==t.waiting&&o.uint32(8).bool(t.waiting);for(const e of t.subtitles)l.encode(e,o.uint32(18).fork()).ldelim();return o},decode(t,o){const n=t instanceof e.Reader?t:e.Reader.create(t);let a=void 0===o?n.len:n.pos+o;const i={waiting:!1,subtitles:[]};for(;n.pos>>3){case 1:if(8!==t)break;i.waiting=n.bool();continue;case 2:if(18!==t)break;i.subtitles.push(l.decode(n,n.uint32()));continue}if(4==(7&t)||0===t)break;n.skipType(7&t)}return i},fromJSON:t=>({waiting:!!b(t.waiting)&&globalThis.Boolean(t.waiting),subtitles:globalThis.Array.isArray(t?.subtitles)?t.subtitles.map((t=>l.fromJSON(t))):[]}),toJSON(t){const e={};return!1!==t.waiting&&(e.waiting=t.waiting),t.subtitles?.length&&(e.subtitles=t.subtitles.map((t=>l.toJSON(t)))),e},create:t=>u.fromPartial(t??{}),fromPartial(t){const e={waiting:!1,subtitles:[]};return e.waiting=t.waiting??!1,e.subtitles=t.subtitles?.map((t=>l.fromPartial(t)))||[],e}};const c={encode:(t,o=e.Writer.create())=>(""!==t.url&&o.uint32(10).string(t.url),""!==t.timestamp&&o.uint32(18).string(t.timestamp),o),decode(t,o){const n=t instanceof e.Reader?t:e.Reader.create(t);let a=void 0===o?n.len:n.pos+o;const i={url:"",timestamp:""};for(;n.pos>>3){case 1:if(10!==t)break;i.url=n.string();continue;case 2:if(18!==t)break;i.timestamp=n.string();continue}if(4==(7&t)||0===t)break;n.skipType(7&t)}return i},fromJSON:t=>({url:b(t.url)?globalThis.String(t.url):"",timestamp:b(t.timestamp)?globalThis.String(t.timestamp):""}),toJSON(t){const e={};return""!==t.url&&(e.url=t.url),""!==t.timestamp&&(e.timestamp=t.timestamp),e},create:t=>c.fromPartial(t??{}),fromPartial(t){const e={url:"",timestamp:""};return e.url=t.url??"",e.timestamp=t.timestamp??"",e}};const h={encode:(t,o=e.Writer.create())=>(""!==t.url&&o.uint32(10).string(t.url),""!==t.language&&o.uint32(18).string(t.language),""!==t.responseLanguage&&o.uint32(26).string(t.responseLanguage),o),decode(t,o){const n=t instanceof e.Reader?t:e.Reader.create(t);let a=void 0===o?n.len:n.pos+o;const i={url:"",language:"",responseLanguage:""};for(;n.pos>>3){case 1:if(10!==t)break;i.url=n.string();continue;case 2:if(18!==t)break;i.language=n.string();continue;case 3:if(26!==t)break;i.responseLanguage=n.string();continue}if(4==(7&t)||0===t)break;n.skipType(7&t)}return i},fromJSON:t=>({url:b(t.url)?globalThis.String(t.url):"",language:b(t.language)?globalThis.String(t.language):"",responseLanguage:b(t.responseLanguage)?globalThis.String(t.responseLanguage):""}),toJSON(t){const e={};return""!==t.url&&(e.url=t.url),""!==t.language&&(e.language=t.language),""!==t.responseLanguage&&(e.responseLanguage=t.responseLanguage),e},create:t=>h.fromPartial(t??{}),fromPartial(t){const e={url:"",language:"",responseLanguage:""};return e.url=t.url??"",e.language=t.language??"",e.responseLanguage=t.responseLanguage??"",e}};const p={encode:(t,o=e.Writer.create())=>(0!==t.interval&&o.uint32(8).int32(t.interval),void 0!==t.translatedInfo&&c.encode(t.translatedInfo,o.uint32(18).fork()).ldelim(),void 0!==t.pingId&&o.uint32(24).int32(t.pingId),o),decode(t,o){const n=t instanceof e.Reader?t:e.Reader.create(t);let a=void 0===o?n.len:n.pos+o;const i={interval:0,translatedInfo:void 0,pingId:void 0};for(;n.pos>>3){case 1:if(8!==t)break;i.interval=n.int32();continue;case 2:if(18!==t)break;i.translatedInfo=c.decode(n,n.uint32());continue;case 3:if(24!==t)break;i.pingId=n.int32();continue}if(4==(7&t)||0===t)break;n.skipType(7&t)}return i},fromJSON:t=>({interval:b(t.interval)?a(t.interval):0,translatedInfo:b(t.translatedInfo)?c.fromJSON(t.translatedInfo):void 0,pingId:b(t.pingId)?globalThis.Number(t.pingId):void 0}),toJSON(t){const e={};return 0!==t.interval&&(e.interval=function(t){switch(t){case n.NO_CONNECTION:return"NO_CONNECTION";case n.TRANSLATING:return"TRANSLATING";case n.STREAMING:return"STREAMING";case n.UNRECOGNIZED:default:return"UNRECOGNIZED"}}(t.interval)),void 0!==t.translatedInfo&&(e.translatedInfo=c.toJSON(t.translatedInfo)),void 0!==t.pingId&&(e.pingId=Math.round(t.pingId)),e},create:t=>p.fromPartial(t??{}),fromPartial(t){const e={interval:0,translatedInfo:void 0,pingId:void 0};return e.interval=t.interval??0,e.translatedInfo=void 0!==t.translatedInfo&&null!==t.translatedInfo?c.fromPartial(t.translatedInfo):void 0,e.pingId=t.pingId??void 0,e}};const g={encode:(t,o=e.Writer.create())=>(0!==t.pingId&&o.uint32(8).int32(t.pingId),o),decode(t,o){const n=t instanceof e.Reader?t:e.Reader.create(t);let a=void 0===o?n.len:n.pos+o;const i={pingId:0};for(;n.pos>>3){case 1:if(8!==t)break;i.pingId=n.int32();continue}if(4==(7&t)||0===t)break;n.skipType(7&t)}return i},fromJSON:t=>({pingId:b(t.pingId)?globalThis.Number(t.pingId):0}),toJSON(t){const e={};return 0!==t.pingId&&(e.pingId=Math.round(t.pingId)),e},create:t=>g.fromPartial(t??{}),fromPartial(t){const e={pingId:0};return e.pingId=t.pingId??0,e}};const v={encode:(t,o=e.Writer.create())=>(""!==t.uuid&&o.uint32(10).string(t.uuid),""!==t.module&&o.uint32(18).string(t.module),o),decode(t,o){const n=t instanceof e.Reader?t:e.Reader.create(t);let a=void 0===o?n.len:n.pos+o;const i={uuid:"",module:""};for(;n.pos>>3){case 1:if(10!==t)break;i.uuid=n.string();continue;case 2:if(18!==t)break;i.module=n.string();continue}if(4==(7&t)||0===t)break;n.skipType(7&t)}return i},fromJSON:t=>({uuid:b(t.uuid)?globalThis.String(t.uuid):"",module:b(t.module)?globalThis.String(t.module):""}),toJSON(t){const e={};return""!==t.uuid&&(e.uuid=t.uuid),""!==t.module&&(e.module=t.module),e},create:t=>v.fromPartial(t??{}),fromPartial(t){const e={uuid:"",module:""};return e.uuid=t.uuid??"",e.module=t.module??"",e}};const m={encode:(t,o=e.Writer.create())=>(""!==t.secretKey&&o.uint32(10).string(t.secretKey),0!==t.expires&&o.uint32(16).int32(t.expires),o),decode(t,o){const n=t instanceof e.Reader?t:e.Reader.create(t);let a=void 0===o?n.len:n.pos+o;const i={secretKey:"",expires:0};for(;n.pos>>3){case 1:if(10!==t)break;i.secretKey=n.string();continue;case 2:if(16!==t)break;i.expires=n.int32();continue}if(4==(7&t)||0===t)break;n.skipType(7&t)}return i},fromJSON:t=>({secretKey:b(t.secretKey)?globalThis.String(t.secretKey):"",expires:b(t.expires)?globalThis.Number(t.expires):0}),toJSON(t){const e={};return""!==t.secretKey&&(e.secretKey=t.secretKey),0!==t.expires&&(e.expires=Math.round(t.expires)),e},create:t=>m.fromPartial(t??{}),fromPartial(t){const e={secretKey:"",expires:0};return e.secretKey=t.secretKey??"",e.expires=t.expires??0,e}};function b(t){return null!=t}const f={encodeTranslationRequest:(t,e,o,n,a)=>r.encode({url:t,firstRequest:!0,duration:e,unknown0:1,language:o,forceSourceLang:!1,unknown1:0,translationHelp:a||[],responseLanguage:n,unknown2:0,unknown3:1,bypassCache:!1}).finish(),decodeTranslationResponse:t=>s.decode(new Uint8Array(t)),encodeSubtitlesRequest:(t,e)=>d.encode({url:t,language:e}).finish(),decodeSubtitlesResponse:t=>u.decode(new Uint8Array(t)),encodeStreamPingRequest:t=>g.encode({pingId:t}).finish(),encodeStreamRequest:(t,e,o)=>h.encode({url:t,language:e,responseLanguage:o}).finish(),decodeStreamResponse:t=>p.decode(new Uint8Array(t)),encodeYandexSessionRequest:(t,e)=>v.encode({uuid:t,module:e}).finish(),decodeYandexSessionResponse:t=>m.decode(new Uint8Array(t))},y={host:"api.browser.yandex.ru",hostVOT:"vot-api.toil.cc/v1",mediaProxy:"media-proxy.toil.cc",userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 YaBrowser/24.7.0.0 Safari/537.36",componentVersion:"24.7.3.1081",hmac:"bt8xH3VOlb4mqf0nqAibnDOoiPlXsisf",defaultDuration:343},w=new TextEncoder;async function x(t,e,o){const n=await crypto.subtle.importKey("raw",w.encode(e),{name:"HMAC",hash:{name:t}},!1,["sign","verify"]);return await crypto.subtle.sign("HMAC",n,o)}async function S(t){const e=await x("SHA-256",y.hmac,t);return new Uint8Array(e).reduce(((t,e)=>t+e.toString(16).padStart(2,"0")),"")}var k,T;!function(t){t.custom="custom",t.directlink="custom",t.youtube="youtube",t.piped="piped",t.invidious="invidious",t.vk="vk",t.nine_gag="nine_gag",t.gag="nine_gag",t.twitch="twitch",t.proxitok="proxitok",t.tiktok="tiktok",t.vimeo="vimeo",t.xvideos="xvideos",t.pornhub="pornhub",t.twitter="twitter",t.rumble="rumble",t.facebook="facebook",t.rutube="rutube",t.coub="coub",t.bilibili="bilibili",t.mail_ru="mailru",t.mailru="mailru",t.bitchute="bitchute",t.eporner="eporner",t.peertube="peertube",t.dailymotion="dailymotion",t.trovo="trovo",t.yandexdisk="yandexdisk",t.ok_ru="okru",t.okru="okru",t.googledrive="googledrive",t.bannedvideo="bannedvideo",t.weverse="weverse",t.newgrounds="newgrounds",t.egghead="egghead",t.youku="youku",t.archive="archive",t.kodik="kodik",t.patreon="patreon",t.reddit="reddit",t.kick="kick",t.apple_developer="apple_developer",t.appledeveloper="apple_developer",t.poketube="poketube",t.epicgames="epicgames",t.nineanimetv="nineanimetv",t.odysee="odysee",t.coursehunter="coursehunter",t.udemy="udemy",t.coursera="coursera",t.sap="sap",t.watchpornto="watchpornto",t.linkedin="linkedin"}(k||(k={})),function(t){t[t.FAILED=0]="FAILED",t[t.FINISHED=1]="FINISHED",t[t.WAITING=2]="WAITING",t[t.LONG_WAITING=3]="LONG_WAITING",t[t.PART_CONTENT=5]="PART_CONTENT",t[t.LONG_WAITING_2=6]="LONG_WAITING_2"}(T||(T={}));const C={afr:"af",aka:"ak",alb:"sq",amh:"am",ara:"ar",arm:"hy",asm:"as",aym:"ay",aze:"az",baq:"eu",bel:"be",ben:"bn",bos:"bs",bul:"bg",bur:"my",cat:"ca",chi:"zh",cos:"co",cze:"cs",dan:"da",div:"dv",dut:"nl",eng:"en",epo:"eo",est:"et",ewe:"ee",fin:"fi",fre:"fr",fry:"fy",geo:"ka",ger:"de",gla:"gd",gle:"ga",glg:"gl",gre:"el",grn:"gn",guj:"gu",hat:"ht",hau:"ha",hin:"hi",hrv:"hr",hun:"hu",ibo:"ig",ice:"is",ind:"id",ita:"it",jav:"jv",jpn:"ja",kan:"kn",kaz:"kk",khm:"km",kin:"rw",kir:"ky",kor:"ko",kur:"ku",lao:"lo",lat:"la",lav:"lv",lin:"ln",lit:"lt",ltz:"lb",lug:"lg",mac:"mk",mal:"ml",mao:"mi",mar:"mr",may:"ms",mlg:"mg",mlt:"mt",mon:"mn",nep:"ne",nor:"no",nya:"ny",ori:"or",orm:"om",pan:"pa",per:"fa",pol:"pl",por:"pt",pus:"ps",que:"qu",rum:"ro",rus:"ru",san:"sa",sin:"si",slo:"sk",slv:"sl",smo:"sm",sna:"sn",snd:"sd",som:"so",sot:"st",spa:"es",srp:"sr",sun:"su",swa:"sw",swe:"sv",tam:"ta",tat:"tt",tel:"te",tgk:"tg",tha:"th",tir:"ti",tso:"ts",tuk:"tk",tur:"tr",uig:"ug",ukr:"uk",urd:"ur",uzb:"uz",vie:"vi",wel:"cy",xho:"xh",yid:"yi",yor:"yo",zul:"zu"};async function V(t,e={headers:{"User-Agent":y.userAgent}}){const{timeout:o=3e3,...n}=e,a=new AbortController,i=setTimeout((()=>a.abort()),o),r=await fetch(t,{signal:a.signal,...n});return clearTimeout(i),r}function L(t){return 3===t.length?C[t]:t.toLowerCase().split(/[_;-]/)[0].trim()}function M(t,e="mp4"){return`https://${y.mediaProxy}/v1/proxy/video.${e}?url=${encodeURIComponent(t.href)}&origin=${t.origin}&referer=${t.origin}`}const A=[{additionalData:"mobile",host:k.youtube,url:"https://youtu.be/",match:/^m.youtube.com$/,selector:"shorts-video #player"},{additionalData:"mobile",host:k.youtube,url:"https://youtu.be/",match:/^m.youtube.com$/,selector:".player-container"},{host:k.youtube,url:"https://youtu.be/",match:/^(www.)?youtube(-nocookie|kids)?.com$/,selector:".html5-video-container:not(#inline-player *)"},{host:k.invidious,url:"https://youtu.be/",match:["yewtu.be","yt.artemislena.eu","invidious.flokinet.to","iv.melmac.space","inv.nadeko.net","inv.tux.pizza","invidious.private.coffee","yt.drgnz.club","vid.puffyan.us","invidious.dhusch.de"],selector:"#player",needBypassCSP:!0},{host:k.piped,url:"https://youtu.be/",match:["piped.video","piped.tokhmi.xyz","piped.moomoo.me","piped.syncpundit.io","piped.mha.fi","watch.whatever.social","piped.garudalinux.org","efy.piped.pages.dev","watch.leptons.xyz","piped.lunar.icu","yt.dc09.ru","piped.mint.lgbt","il.ax","piped.privacy.com.de","piped.esmailelbob.xyz","piped.projectsegfau.lt","piped.in.projectsegfau.lt","piped.us.projectsegfau.lt","piped.privacydev.net","piped.palveluntarjoaja.eu","piped.smnz.de","piped.adminforge.de","piped.qdi.fi","piped.hostux.net","piped.chauvet.pro","piped.jotoma.de","piped.pfcd.me","piped.frontendfriendly.xyz"],selector:".shaka-video-container",needBypassCSP:!0},{host:k.poketube,url:"https://youtu.be/",match:["poketube.fun","pt.sudovanilla.org","poke.ggtyler.dev","poke.uk2.littlekai.co.uk","poke.blahai.gay"],selector:".video-player-container"},{additionalData:"mobile",host:k.vk,url:"https://vk.com/video?z=",match:/^m.vk.(com|ru)$/,selector:"vk-video-player",shadowRoot:!0},{additionalData:"clips",host:k.vk,url:"https://vk.com/video?z=",match:/^(www.|m.)?vk.(com|ru)$/,selector:'div[data-testid="clipcontainer-video"]'},{host:k.vk,url:"https://vk.com/video?z=",match:/^(www.|m.)?vk.(com|ru)$/,selector:".videoplayer_media"},{host:k.nine_gag,url:"https://9gag.com/gag/",match:/^9gag.com$/,selector:".video-post"},{host:k.twitch,url:"https://twitch.tv/",match:[/^m.twitch.tv$/,/^(www.)?twitch.tv$/,/^clips.twitch.tv$/,/^player.twitch.tv$/],selector:".video-ref, main > div > section > div > div > div"},{host:k.proxitok,url:"https://www.tiktok.com/",match:["proxitok.pabloferreiro.es","proxitok.pussthecat.org","tok.habedieeh.re","proxitok.esmailelbob.xyz","proxitok.privacydev.net","tok.artemislena.eu","tok.adminforge.de","tt.vern.cc","cringe.whatever.social","proxitok.lunar.icu","proxitok.privacy.com.de"],selector:".column.has-text-centered"},{host:k.tiktok,url:"https://www.tiktok.com/",match:/^(www.)?tiktok.com$/,selector:null},{host:k.vimeo,url:"https://vimeo.com/",match:/^vimeo.com$/,selector:".player"},{host:k.vimeo,url:"https://player.vimeo.com/",match:/^player.vimeo.com$/,selector:".player"},{host:k.xvideos,url:"https://www.xvideos.com/",match:/^(www.)?(xvideos|xv-ru).com$/,selector:".video-bg-pic",needBypassCSP:!0},{host:k.pornhub,url:"https://rt.pornhub.com/view_video.php?viewkey=",match:/^[a-z]+.pornhub.com$/,selector:".mainPlayerDiv > .video-element-wrapper-js > div",eventSelector:".mgp_eventCatcher"},{additionalData:"embed",host:k.pornhub,url:"https://rt.pornhub.com/view_video.php?viewkey=",match:t=>t.host.includes("pornhub.com")&&t.pathname.startsWith("/embed/"),selector:"#player"},{host:k.twitter,url:"https://twitter.com/i/status/",match:/^(twitter|x).com$/,selector:'div[data-testid="videoComponent"] > div:nth-child(1) > div',eventSelector:'div[data-testid="videoPlayer"]',needBypassCSP:!0},{host:k.rumble,url:"https://rumble.com/",match:/^rumble.com$/,selector:"#videoPlayer > .videoPlayer-Rumble-cls > div"},{host:k.facebook,url:"https://facebook.com/",match:t=>t.host.includes("facebook.com")&&t.pathname.includes("/videos/"),selector:'div[role="main"] div[data-pagelet$="video" i]',needBypassCSP:!0},{additionalData:"reels",host:k.facebook,url:"https://facebook.com/",match:t=>t.host.includes("facebook.com")&&t.pathname.includes("/reel/"),selector:'div[role="main"]',needBypassCSP:!0},{host:k.rutube,url:"https://rutube.ru/video/",match:/^rutube.ru$/,selector:".video-player > div > div > div:nth-child(2)"},{additionalData:"embed",host:k.rutube,url:"https://rutube.ru/video/",match:/^rutube.ru$/,selector:"#app > div > div"},{host:k.bilibili,url:"https://www.bilibili.com/video/",match:/^(www|m|player).bilibili.com$/,selector:".bpx-player-video-wrap"},{additionalData:"old",host:k.bilibili,url:"https://www.bilibili.com/video/",match:/^(www|m).bilibili.com$/,selector:null},{host:k.mailru,url:"https://my.mail.ru/",match:/^my.mail.ru$/,selector:"#b-video-wrapper"},{host:k.bitchute,url:"https://www.bitchute.com/video/",match:/^(www.)?bitchute.com$/,selector:".video-js"},{host:k.eporner,url:"https://www.eporner.com/",match:/^(www.)?eporner.com$/,selector:".vjs-v7"},{host:k.peertube,url:"stub",match:["peertube.1312.media","tube.shanti.cafe","bee-tube.fr","video.sadmin.io","dalek.zone","review.peertube.biz","peervideo.club","tube.la-dina.net","peertube.tmp.rcp.tf","peertube.su","video.blender.org","videos.viorsan.com","tube-sciences-technologies.apps.education.fr","tube-numerique-educatif.apps.education.fr","tube-arts-lettres-sciences-humaines.apps.education.fr","beetoons.tv","comics.peertube.biz","makertube.net"],selector:".vjs-v7"},{host:k.dailymotion,url:"https://dai.ly/",match:/^geo([\d]+)?.dailymotion.com$/,selector:".player"},{host:k.trovo,url:"https://trovo.live/s/",match:/^trovo.live$/,selector:".player-video"},{host:k.yandexdisk,url:"https://yadi.sk/i/",match:/^disk.yandex.ru$/,selector:".video-player__player > div:nth-child(1)",eventSelector:".video-player__player",needBypassCSP:!0},{host:k.okru,url:"https://ok.ru/video/",match:/^ok.ru$/,selector:".html5-vpl_vid"},{host:k.googledrive,url:"https://drive.google.com/file/d/",match:/^youtube.googleapis.com$/,selector:".html5-video-container"},{host:k.bannedvideo,url:"https://madmaxworld.tv/watch?id=",match:/^(www.)?banned.video|madmaxworld.tv$/,selector:".vjs-v7",needExtraData:!0},{host:k.weverse,url:"https://weverse.io/",match:/^weverse.io$/,selector:".webplayer-internal-source-wrapper",needExtraData:!0},{host:k.newgrounds,url:"https://www.newgrounds.com/",match:/^(www.)?newgrounds.com$/,selector:".ng-video-player"},{host:k.egghead,url:"https://egghead.io/",match:/^egghead.io$/,selector:".cueplayer-react-video-holder"},{host:k.youku,url:"https://v.youku.com/",match:/^v.youku.com$/,selector:"#ykPlayer"},{host:k.archive,url:"https://archive.org/details/",match:/^archive.org$/,selector:".jw-media"},{host:k.kodik,url:"stub",match:/^kodik.(info|biz|cc)$/,selector:".fp-player",needExtraData:!0},{host:k.patreon,url:"stub",match:/^(www.)?patreon.com$/,selector:'div[data-tag="post-card"] div[elevation="subtle"] > div > div > div > div',needExtraData:!0},{host:k.reddit,url:"stub",match:/^(www.|new.|old.)?reddit.com$/,selector:".reddit-video-player-root",needExtraData:!0,needBypassCSP:!0},{host:k.kick,url:"https://kick.com/",match:/^kick.com$/,selector:"#injected-embedded-channel-player-video > div",needExtraData:!0},{host:k.appledeveloper,url:"https://developer.apple.com/",match:/^developer.apple.com$/,selector:".developer-video-player",needExtraData:!0,needBypassCSP:!0},{host:k.epicgames,url:"https://dev.epicgames.com/community/learning/",match:/^dev.epicgames.com$/,selector:".vjs-v7",needExtraData:!0},{host:k.nineanimetv,url:"https://9animetv.to/watch/",match:/^rapid-cloud.co$/,selector:".jw-media",needExtraData:!0},{host:k.odysee,url:"stub",match:/^odysee.com$/,selector:".vjs-v7",needExtraData:!0},{host:k.coursehunter,url:"https://coursehunter.net/course/",match:/^coursehunter.net$/,selector:"#oframeplayer > pjsdiv:nth-of-type(1)",needExtraData:!0},{host:k.udemy,url:"https://www.udemy.com/",match:/udemy.com$/,selector:'div[data-purpose="curriculum-item-viewer-content"] > section > div > div > div > div:nth-of-type(2)',needExtraData:!0},{host:k.coursera,url:"https://www.coursera.org/",match:/coursera.org$/,selector:".vjs-v6",needExtraData:!0},{host:k.sap,url:"https://learning.sap.com/courses/",match:/^learning.sap.com$/,selector:".playkit-container",eventSelector:".playkit-player",needExtraData:!0,needBypassCSP:!0},{host:k.watchpornto,url:"https://watchporn.to/",match:/^watchporn.to$/,selector:".fp-player"},{host:k.linkedin,url:"https://www.linkedin.com/learning/",match:/^(www)?.linkedin.com$/,selector:".vjs-v7",needExtraData:!0,needBypassCSP:!0},{host:k.custom,url:"stub",match:t=>/([^.]+).(mp4|webm)/.test(t.pathname),rawResult:!0}],O=JSON.parse('{"__version__":5,"recommended":"recommended","translateVideo":"Translate video","disableTranslate":"Turn off","translationSettings":"Translation settings","subtitlesSettings":"Subtitles settings","about":"About extension","resetSettings":"Reset settings","videoBeingTranslated":"The video is being translated","videoLanguage":"Video language","translationLanguage":"Translation language","translationTake":"The translation will take","translationTakeMoreThanHour":"The translation will take more than an hour","translationTakeAboutMinute":"The translation will take about a minute","translationTakeFewMinutes":"The translation will take a few minutes","translationTakeApproximatelyMinutes":"The translation will take approximately {0} minutes","translationTakeApproximatelyMinute":"The translation will take approximately {0} minutes","unSupportedExtensionError":"Error! {0} is not supported by this version of the extension!\\n\\nPlease use the cloudflare version of the VOT extension.","requestTranslationFailed":"Failed to request video translation","audioNotReceived":"Audio link not received","grantPermissionToAutoPlay":"Grant permission to autoplay","audioFormatNotSupported":"The audio format is not supported","VOTAutoTranslate":"Translate on open","VOTDontTranslateYourLang":"Do not translate from my language","VOTVolume":"Video volume","VOTVolumeTranslation":"Translation Volume","VOTAutoSetVolume":"Reduce video volume to ","VOTShowVideoSlider":"Video volume slider","VOTSyncVolume":"Link translation and video volume","VOTAudioProxy":"Proxy received audio","VOTDisableFromYourLang":"You have disabled the translation of the video in your language","VOTLiveNotSupported":"Translation of live streams is not supported","VOTPremiere":"Wait for the premiere to end before translating","VOTVideoIsTooLong":"Video is too long","VOTNoVideoIDFound":"No video ID found","VOTSubtitles":"Subtitles","VOTSubtitlesDisabled":"Disabled","VOTSubtitlesMaxLength":"Subtitles max length","VOTHighlightWords":"Highlight words","VOTTranslatedFrom":"translated from","VOTAutogenerated":"autogenerated","VOTSettings":"VOT Settings","VOTMenuLanguage":"Menu language","VOTAuthors":"Authors","VOTVersion":"Version","VOTLoader":"Loader","VOTBrowser":"Browser","VOTShowPiPButton":"Show PiP button","langs":{"auto":"Auto","af":"Afrikaans","ak":"Akan","sq":"Albanian","am":"Amharic","ar":"Arabic","hy":"Armenian","as":"Assamese","ay":"Aymara","az":"Azerbaijani","bn":"Bangla","eu":"Basque","be":"Belarusian","bho":"Bhojpuri","bs":"Bosnian","bg":"Bulgarian","my":"Burmese","ca":"Catalan","ceb":"Cebuano","zh":"Chinese","zh-Hans":"Chinese (Simplified)","zh-Hant":"Chinese (Traditional)","co":"Corsican","hr":"Croatian","cs":"Czech","da":"Danish","dv":"Divehi","nl":"Dutch","en":"English","eo":"Esperanto","et":"Estonian","ee":"Ewe","fil":"Filipino","fi":"Finnish","fr":"French","gl":"Galician","lg":"Ganda","ka":"Georgian","de":"German","el":"Greek","gn":"Guarani","gu":"Gujarati","ht":"Haitian Creole","ha":"Hausa","haw":"Hawaiian","iw":"Hebrew","hi":"Hindi","hmn":"Hmong","hu":"Hungarian","is":"Icelandic","ig":"Igbo","id":"Indonesian","ga":"Irish","it":"Italian","ja":"Japanese","jv":"Javanese","kn":"Kannada","kk":"Kazakh","km":"Khmer","rw":"Kinyarwanda","ko":"Korean","kri":"Krio","ku":"Kurdish","ky":"Kyrgyz","lo":"Lao","la":"Latin","lv":"Latvian","ln":"Lingala","lt":"Lithuanian","lb":"Luxembourgish","mk":"Macedonian","mg":"Malagasy","ms":"Malay","ml":"Malayalam","mt":"Maltese","mi":"Māori","mr":"Marathi","mn":"Mongolian","ne":"Nepali","nso":"Northern Sotho","no":"Norwegian","ny":"Nyanja","or":"Odia","om":"Oromo","ps":"Pashto","fa":"Persian","pl":"Polish","pt":"Portuguese","pa":"Punjabi","qu":"Quechua","ro":"Romanian","ru":"Russian","sm":"Samoan","sa":"Sanskrit","gd":"Scottish Gaelic","sr":"Serbian","sn":"Shona","sd":"Sindhi","si":"Sinhala","sk":"Slovak","sl":"Slovenian","so":"Somali","st":"Southern Sotho","es":"Spanish","su":"Sundanese","sw":"Swahili","sv":"Swedish","tg":"Tajik","ta":"Tamil","tt":"Tatar","te":"Telugu","th":"Thai","ti":"Tigrinya","ts":"Tsonga","tr":"Turkish","tk":"Turkmen","uk":"Ukrainian","ur":"Urdu","ug":"Uyghur","uz":"Uzbek","vi":"Vietnamese","cy":"Welsh","fy":"Western Frisian","xh":"Xhosa","yi":"Yiddish","yo":"Yoruba","zu":"Zulu"},"udemyModuleArgsNotFound":"Could not get udemy module data due to the fact that ModuleArgs was not found","VOTTranslationHelpNull":"Could not get the data required for the translate","streamNoConnectionToServer":"There is no connection to the server","searchField":"Search...","VOTTranslateAPIErrors":"Translate errors from the API","VOTTranslationService":"Translation Service","VOTDetectService":"Detect Service","VOTTranslatingError":"Translating the error","VOTProxyWorkerHost":"Enter the proxy worker address","VOTM3u8ProxyHost":"Enter the address of the m3u8 proxy worker","proxySettings":"Proxy Settings","translationTakeApproximatelyMinute2":"The translation will take approximately {0} minutes","VOTAudioBooster":"Extended translation volume increase","VOTSubtitlesDesign":"Subtitles design","VOTSubtitlesFontSize":"Font size of subtitles","VOTSubtitlesOpacity":"Transparency of the subtitle background","VOTPressNewHotkey":"Press the new hotkey...","VOTCreateTranslationHotkey":"Create Hotkey for Translation","VOTChangeHotkeyWithCurrent":"Change Hotkey (Current: {0})","VOTSubtitlesDownloadFormat":"The format for downloading subtitles","VOTDownloadWithName":"Download files with the video name","VOTUpdateLocaleFiles":"Update localization files","VOTLocaleHash":"Locale hash","VOTUpdatedAt":"Updated at","VOTNeedWebAudioAPI":"To enable this, you must have a Web Audio API","VOTBypassMediaCSP":"Bypassing Media CSP","VOTMediaCSPEnabledOnSite":"Media CSP is enabled on this site"}'),I={log:(...t)=>{}},P=I,E="media-proxy.toil.cc/v1/proxy/m3u8",_="vot-worker.toil.cc",$="https://vot.toil.cc/v1",N=.15,R="yandex",B="yandex",D={yandex:"https://translate.toil.cc/detect",rustServer:"https://rust-server-531j.onrender.com/detect"},F={yandex:"https://translate.toil.cc/translate",deepl:"https://translate-deepl.toil.cc/translate"},q=new class{constructor(){this.gmSupport="function"==typeof GM_getValue,P.log(`GM Storage Status: ${this.gmSupport}`)}syncGet(t,e=void 0){if(this.gmSupport)return GM_getValue(t,e);const o="number"==typeof e;const n=window.localStorage.getItem(t)??e;return o?Number(n):n}async get(t,e=void 0){if(this.gmSupport)return await GM_getValue(t,e);const o="number"==typeof e;return Promise.resolve(this.syncGet(t,e,o))}syncSet(t,e){return this.gmSupport?GM_setValue(t,e):window.localStorage.setItem(t,e)}async set(t,e){return this.gmSupport?await GM_setValue(t,e):Promise.resolve(this.syncSet(t,e))}syncDelete(t){return this.gmSupport?GM_deleteValue(t):window.localStorage.removeItem(t)}async delete(t){return this.gmSupport?await GM_deleteValue(t):Promise.resolve(this.syncDelete(t))}syncList(){return this.gmSupport?GM_listValues():["autoTranslate","dontTranslateLanguage","dontTranslateYourLang","autoSetVolumeYandexStyle","autoVolume","buttonPos","showVideoSlider","syncVolume","subtitlesMaxLength","highlightWords","responseLanguage","defaultVolume","audioProxy","showPiPButton","translateAPIErrors","translationService","detectService","m3u8ProxyHost","translateProxyEnabled","hotkeyButton","proxyWorkerHost","audioBooster","locale-version","locale-lang","locale-phrases"]}async list(){return this.gmSupport?await GM_listValues():Promise.resolve(this.syncList())}},H="https://raw.githubusercontent.com/ilyhalight/voice-over-translation/master/src/localization",z=["auto","en","ru","af","am","ar","az","bg","bn","bs","ca","cs","cy","da","de","el","es","et","eu","fa","fi","fr","gl","hi","hr","hu","hy","id","it","ja","jv","kk","km","kn","ko","lo","mk","ml","mn","ms","mt","my","ne","nl","pa","pl","pt","ro","si","sk","sl","sq","sr","su","sv","sw","tr","uk","ur","uz","vi","zh","zu"],U=new class{lang="en";locale={};gmValues=["locale-phrases","locale-lang","locale-version","locale-lang-override"];constructor(){const t=q.syncGet("locale-lang-override","auto");this.lang=t&&"auto"!==t?t:(navigator.language||navigator.userLanguage)?.substr(0,2)?.toLowerCase()??"en",this.setLocaleFromJsonString(q.syncGet("locale-phrases",""))}reset(){for(let t=0;tn&&o===this.lang)return;const a=await this.checkUpdates();if(await q.set("locale-updated-at",n),a){P.log("Updating locale...");try{const t=await X(`${H}/locales/${this.lang}.json`);if(200!==t.status)throw t.status;const e=await t.text();await q.set("locale-phrases",e),this.setLocaleFromJsonString(e),await q.set("locale-hash",a),await q.set("locale-lang",this.lang)}catch(t){console.error("[VOT] [localizationProvider] Failed to get locale, cause:",t),this.setLocaleFromJsonString(await q.get("locale-phrases",""))}}}setLocaleFromJsonString(t){try{this.locale=JSON.parse(t)??{}}catch(t){console.error("[VOT] [localizationProvider]",t),this.locale={}}}getFromLocale(t,e){const o=e.split(".").reduce(((t,e)=>{if("object"==typeof t&&t)return t[e]}),t);return void 0===o&&console.warn("[VOT] [localizationProvider] locale",t,"doesn't contain key",e),o}getDefault(t){return this.getFromLocale(O,t)??t}get(t){return this.getFromLocale(this.locale,t)??this.getFromLocale(O,t)??t}},W=navigator.language||navigator.userLanguage,j=W?.substr(0,2)?.toLowerCase()??"en";function G(t){return t.toLowerCase().split(/[_;-]/)[0].trim()}function J(){return"pictureInPictureEnabled"in document&&document.pictureInPictureEnabled}function K(){return"undefined"!=typeof Hls&&Hls?.isSupported()?new Hls({debug:!1,lowLatencyMode:!0,backBufferLength:90}):void 0}const Y=new RegExp([/(?:https?|ftp):\/\/\S+/g,/https?:\/\/\S+|www\.\S+/gm,/\b\S+\.\S+/gm,/#[^\s#]+/g,/Auto-generated by YouTube/g,/Provided to YouTube by/g,/Released on/g,/0x[a-fA-F0-9]{40}/g,/[13][a-km-zA-HJ-NP-Z1-9]{25,34}/g,/4[0-9AB][1-9A-HJ-NP-Za-km-z]{93}/g,/Paypal/g].map((t=>t.source)).join("|"));function Z(t,e){const o=URL.createObjectURL(t),n=document.createElement("a");n.href=o,n.download=e,n.click(),URL.revokeObjectURL(o)}function Q(t){return 0===t.trim().length?(new Date).toLocaleDateString("en-us").replaceAll("/","-"):t.replace(/[\\/:*?"'<>|]/g,"")}async function X(t,e={}){const{timeout:o=15e3,...n}=e,a=new AbortController,i=setTimeout((()=>a.abort()),o);try{if(t.includes("api.browser.yandex.ru"))throw new Error("Preventing yandex cors");const e=await fetch(t,{signal:a.signal,...n});return clearTimeout(i),e}catch(e){return P.log("GM_fetch preventing cors by GM_xmlhttpRequest",e.message),new Promise(((e,a)=>{clearTimeout(i),GM_xmlhttpRequest({method:n.method||"GET",url:t,responseType:"blob",...n,data:n.body,timeout:o,onload:t=>{const o=Object.fromEntries(t.responseHeaders.trim().split(/\r?\n/).map((t=>t.split(/: (.+)/))).filter((([t])=>t&&/^[\w-]+$/.test(t))));e(new Response(t.response,{status:t.status,headers:o}))},ontimeout:()=>a(new Error("Timeout")),onerror:t=>a(t),onabort:()=>a(new Error("AbortError"))})}))}}function tt(){return Math.floor(Date.now()/1e3)}class et extends Error{constructor(t){super(t),this.name="VideoHelper",this.message=t}}class ot{API_ORIGIN="https://example.com";fetch;constructor({fetchFn:t=X}={}){this.fetch=t}async getVideoData(t){}async getVideoId(t){}}class nt extends ot{API_ORIGIN="https://my.mail.ru";async getVideoMeta(t){try{const e=await this.fetch(`${this.API_ORIGIN}/+/video/meta/${t}?xemail=&ajax_call=1&func_name=&mna=&mnb=&ext=1&_=${(new Date).getTime()}`);return await e.json()}catch(t){return void console.error("Failed to get mail.ru video data",t.message)}}async getVideoId(t){const e=t.pathname;if(/\/(v|mail|bk|inbox)\//.exec(e))return e.slice(1);const o=/video\/embed\/([^/]+)/.exec(e)?.[1];if(!o)return;const n=await this.getVideoMeta(o);return n?n.meta.url.replace("//my.mail.ru/",""):void 0}}class at extends ot{API_ORIGIN="https://global.apis.naver.com/weverse/wevweb";API_APP_ID="be4d79eb8fc7bd008ee82c8ec4ff6fd4";API_HMAC_KEY="1b9cb6378d959b45714bec49971ade22e6e24e42";HEADERS={Accept:"application/json, text/plain, */*",Origin:"https://weverse.io",Referer:"https://weverse.io/"};getURLData(){return{appId:this.API_APP_ID,language:"en",os:"WEB",platform:"WEB",wpf:"pc"}}async createHash(t){const e=Date.now(),o=t.substring(0,Math.min(255,t.length))+e,n=await async function(t,e){try{const o=w.encode(e),n=await x("SHA-1",t,o);return btoa(String.fromCharCode(...new Uint8Array(n)))}catch(t){return console.error(t),!1}}(this.API_HMAC_KEY,o);if(!n)throw new et("Failed to get weverse HMAC signature");return{wmsgpad:e.toString(),wmd:n}}async getHashURLParams(t){const e=await this.createHash(t);return new URLSearchParams(e).toString()}async getPostPreview(t){const e=`/post/v1.0/post-${t}/preview?`+new URLSearchParams({fieldSet:"postForPreview",...this.getURLData()}).toString();try{const t=await this.getHashURLParams(e),o=await this.fetch(this.API_ORIGIN+e+"&"+t,{headers:this.HEADERS});return await o.json()}catch(e){return console.error(`Failed to get weverse post preview by postId: ${t}`,e.message),!1}}async getVideoInKey(t){const e=`/video/v1.1/vod/${t}/inKey?`+new URLSearchParams({gcc:"RU",...this.getURLData()}).toString();try{const t=await this.getHashURLParams(e),o=await this.fetch(this.API_ORIGIN+e+"&"+t,{method:"POST",headers:this.HEADERS});return await o.json()}catch(e){return console.error(`Failed to get weverse InKey by videoId: ${t}`,e.message),!1}}async getVideoInfo(t,e,o){const n=Date.now();try{const a=new URLSearchParams({key:e,sid:o,nonce:n.toString(),devt:"html5_pc",prv:"N",aup:"N",stpb:"N",cpl:"en",env:"prod",lc:"en",adi:JSON.stringify([{adSystem:null}]),adu:"/"}).toString(),i=await this.fetch(`https://global.apis.naver.com/rmcnmv/rmcnmv/vod/play/v2.0/${t}?`+a,{headers:this.HEADERS});return await i.json()}catch(n){return console.error(`Failed to get weverse video info (infraVideoId: ${t}, inkey: ${e}, serviceId: ${o}`,n.message),!1}}extractVideoInfo(t){return t.find((t=>!1===t.useP2P&&t.source.includes(".mp4")))}async getVideoData(t){const e=await this.getPostPreview(t);if(!e)return;const{videoId:o,serviceId:n,infraVideoId:a}=e.extension.video;if(!(o&&n&&a))return;const i=await this.getVideoInKey(o);if(!i)return;const r=await this.getVideoInfo(a,i.inKey,n);if(!r)return;const s=this.extractVideoInfo(r.videos.list);return s?{url:s.source,duration:s.duration}:void 0}async getVideoId(t){return/([^/]+)\/(live|media)\/([^/]+)/.exec(t.pathname)?.[3]}}class it extends ot{API_ORIGIN=window.location.origin;async getSecureData(t){try{const e=await this.fetch(`${this.API_ORIGIN}${t}`,{headers:{"User-Agent":y.userAgent,Origin:this.API_ORIGIN,Referer:this.API_ORIGIN}}),o=await e.text(),[n,a,i]=t.split("/").filter((t=>t)),r=(new DOMParser).parseFromString(o,"text/html"),s=Array.from(r.getElementsByTagName("script")).filter((t=>t.innerHTML.includes(`videoId = "${a}"`)));if(!s.length)throw new et("Failed to find secure script");const l=/'{[^']+}'/.exec(s[0].textContent.trim())?.[0];if(!l)throw new et("Secure json wasn't found in secure script");const d=JSON.parse(l.replaceAll("'",""));return{videoType:n,videoId:a,hash:i,...d}}catch(e){return console.error(`Failed to get kodik secure data by videoPath: ${t}.`,e.message),!1}}async getFtor(t){const{videoType:e,videoId:o,hash:n,d:a,d_sign:i,pd:r,pd_sign:s,ref:l,ref_sign:d}=t;try{const t=await this.fetch(this.API_ORIGIN+"/ftor",{method:"POST",headers:{"User-Agent":y.userAgent,Origin:this.API_ORIGIN,Referer:`${this.API_ORIGIN}/${e}/${o}/${n}/360p`},body:new URLSearchParams({d:a,d_sign:i,pd:r,pd_sign:s,ref:decodeURIComponent(l),ref_sign:d,bad_user:"false",cdn_is_working:"true",info:"{}",type:e,hash:n,id:o})});return await t.json()}catch(t){return console.error(`Failed to get kodik video data (type: ${e}, id: ${o}, hash: ${n})`,t.message),!1}}decryptUrl(t){return"https:"+atob(t.replace(/[a-zA-Z]/g,(function(t){const e=t.charCodeAt(0)+13,o=t<="Z"?90:122;return String.fromCharCode(o>=e?e:e-26)})))}async getVideoData(t){const e=await this.getSecureData(t);if(!e)return;const o=await this.getFtor(e);if(!o)return;const n=Object.entries(o.links[o.default.toString()]),a=n.find((([t,e])=>"application/x-mpegURL"===e.type))?.[1];return a?{url:this.decryptUrl(a.src)}:void 0}async getVideoId(t){return/\/(seria|video)\/([^/]+)\/([^/]+)\/([\d]+)p/.exec(t.pathname)?.[0]}}class rt extends ot{API_ORIGIN="https://www.patreon.com/api";async getPosts(t){try{const e=await this.fetch(`${this.API_ORIGIN}/posts/${t}?json-api-use-default-includes=false`);return await e.json()}catch(e){return console.error(`Failed to get patreon posts by postId: ${t}.`,e.message),!1}}async getVideoData(t){const e=await this.getPosts(t);if(!e)return;const o=e.data.attributes.post_file.url;return o?{url:o}:void 0}async getVideoId(t){const e=/posts\/([^/]+)/.exec(t.pathname)?.[1];if(e)return e.replace(/[^\d.]/g,"")}}class st extends ot{API_ORIGIN="https://www.reddit.com";async getVideoData(t){const e=document.querySelector("[data-hls-url]")?.dataset.hlsUrl.replaceAll("&","&");if(e)return{url:decodeURIComponent(e)}}async getVideoId(t){return/\/r\/(([^/]+)\/([^/]+)\/([^/]+)\/([^/]+))/.exec(t.pathname)?.[1]}}class lt extends ot{API_ORIGIN="https://api.banned.video";async getVideoInfo(t){try{const e=await this.fetch(`${this.API_ORIGIN}/graphql`,{method:"POST",body:JSON.stringify({operationName:"GetVideo",query:"query GetVideo($id: String!) {\n getVideo(id: $id) {\n title\n description: summary\n duration: videoDuration\n videoUrl: directUrl\n isStream: live\n }\n }",variables:{id:t}}),headers:{"User-Agent":"bannedVideoFrontEnd","apollographql-client-name":"banned-web","apollographql-client-version":"1.3","content-type":"application/json"}});return await e.json()}catch(e){return console.error(`Failed to get bannedvideo video info by videoId: ${t}.`,e.message),!1}}async getVideoData(t){const e=await this.getVideoInfo(t);if(!e)return;const{videoUrl:o,duration:n,isStream:a,description:i,title:r}=e.data.getVideo;return{url:o,duration:n,isStream:a,title:r,description:i}}async getVideoId(t){return t.searchParams.get("id")??void 0}}class dt extends ot{API_ORIGIN="https://kick.com/api";async getClipInfo(t){try{const e=await this.fetch(`${this.API_ORIGIN}/v2/clips/${t}`),o=await e.json(),{clip_url:n,duration:a,title:i}=o.clip;return{url:n,duration:a,title:i}}catch(e){return void console.error(`Failed to get kick clip info by clipId: ${t}.`,e.message)}}async getVideoInfo(t){try{const e=await this.fetch(`${this.API_ORIGIN}/v1/video/${t}`),o=await e.json(),{source:n,livestream:a}=o,{session_title:i,duration:r}=a;return{url:n,duration:Math.round(r/1e3),title:i}}catch(e){return void console.error(`Failed to get kick video info by videoId: ${t}.`,e.message)}}async getVideoData(t){return t.startsWith("videos")?await this.getVideoInfo(t.replace("videos/","")):await this.getClipInfo(t.replace("clips/",""))}async getVideoId(t){return/([^/]+)\/((videos|clips)\/([^/]+))/.exec(t.pathname)?.[2]}}class ut extends ot{API_ORIGIN="https://developer.apple.com";async getVideoData(t){const e=document.querySelector("meta[property='og:video']")?.content;if(e)return{url:e}}async getVideoId(t){return/videos\/play\/([^/]+)\/([\d]+)/.exec(t.pathname)?.[0]}}class ct extends ot{API_ORIGIN="https://dev.epicgames.com/community/api/learning";async getPostInfo(t){try{const e=await this.fetch(`${this.API_ORIGIN}/post.json?hash_id=${t}`);return await e.json()}catch(e){return console.error(`Failed to get epicgames post info by videoId: ${t}.`,e.message),!1}}async getVideoData(t){const e=await this.getPostInfo(t);if(!e)return;const o=e.blocks.find((t=>"video"===t.type)),n=o?.video_url?.replace("qsep://","https://");if(!n)return;const{title:a,description:i}=e,r=o?.video_captions?.map((t=>({language:L(t.locale),format:"vtt",url:t.signed_url})));return{url:n,title:a,description:i,subtitles:r}}async getVideoId(t){return/\/(\w{3,5})\/[^/]+$/.exec(t.pathname)?.[1]}}class ht extends ot{API_ORIGIN="https://9animetv.to/ajax/episode";RAPID_CLOUD_ORIGIN="https://rapid-cloud.co/ajax/embed-6-v2";async getSourceId(t){try{const e=await this.fetch(`${this.API_ORIGIN}/servers?episodeId=${t}`),o=await e.json();return!!o.html&&/data-id="(\d+)"/.exec(o.html)?.[1]}catch(e){return console.error(`Failed to get 9animetv servers info by episodeId: ${t}.`,e.message),!1}}async getPlayerLink(t){try{const e=await this.fetch(`${this.API_ORIGIN}/sources?id=${t}`),o=await e.json();return!!o.link.includes("rapid-cloud.co")&&o.link}catch(e){return console.error(`Failed to get player link by sourceId: ${t}.`,e.message),!1}}async getRapidCloudData(t){try{const e=await this.fetch(`${this.RAPID_CLOUD_ORIGIN}/getSources?id=${t}`),o=await e.json();return o.encrypted?(console.warn("Encrypted RapidCloud data found. Let us know about it",o),!1):o}catch(e){return console.error(`Failed to get rapid cloud data by rapidId: ${t}.`,e.message),!1}}async getVideoData(t){const e=t.split("?ep=")[1],o=await this.getSourceId(e);if(!o)return;const n=await this.getPlayerLink(o);if(!n)return;const a=/\/([^/?]+)\?/.exec(n)?.[1];if(!a)return;const i=await this.getRapidCloudData(a);if(!i)return;const r=i.sources.find((t=>"hls"===t.type))?.file;if(!r)return;return{url:r,subtitles:i.tracks.reduce(((t,e)=>{const o=/([\w+]+)(-\d)?\.vtt/.exec(e.file)?.[1];if(!o)return t;const n=L(3===o.length?o:e.label);return t.find((t=>t.language===n))||t.push({language:n,format:"vtt",url:e.file}),t}),[])}}async getVideoId(t){return new Promise((t=>{const e="https://9animetv.to";window.addEventListener("message",(o=>{o.origin===e&&o.data?.startsWith("getVideoId:")&&t(o.data.replace("getVideoId:",""))})),window.top.postMessage("getVideoId",e)}))}}class pt extends ot{API_ORIGIN="https://odysee.com";async getVideoData(t){try{const e=await this.fetch(`${this.API_ORIGIN}/${t}`),o=await e.text(),n=/"contentUrl":(\s)?"([^"]+)"/.exec(o)?.[2];if(!n)throw new Error("Odysee url doesn't parsed");return{url:n}}catch(t){return void console.error("Failed to get odysee video data",t.message)}}async getVideoId(t){return t.pathname.slice(1)}}class gt extends ot{API_ORIGIN="https://coursehunter.net/api/v1";getCourseId(t){return window.course_id??+document.querySelector('input[name="course_id"]')?.value}async getLessonsData(t){try{const e=await this.fetch(`${this.API_ORIGIN}/course/${t}/lessons`);return await e.json()}catch(e){return console.error(`Failed to get Coursehunter lessons data by courseId: ${t}`,e.message),!1}}async getVideoData(t){const e=this.getCourseId(t);if(!e)return;const o=window.lessons??await this.getLessonsData(e);if(!o)return;const n=+(t.split("?lesson=")?.[1]??document.querySelector(".lessons-item_active")?.dataset?.index??1),a=o?.[n-1],{file:i,duration:r,title:s}=a;return i?{url:i,duration:r,title:s}:void 0}async getVideoId(t){const e=/\/course\/([^/]+)/.exec(t.pathname)?.[1];return e?e+t.search:void 0}}class vt extends ot{API_ORIGIN="https://clips.twitch.tv";async getClipLink(t,e){const o=document.querySelector("script[type='application/ld+json']"),n=t.slice(1);if(o){const t=JSON.parse(o.innerText),e=t["@graph"].find((t=>"VideoObject"===t["@type"]))?.creator.url;return`${e.replace("https://www.twitch.tv/","")}/clip/${n}`}const a="embed"===n,i=document.querySelector(a?".tw-link[data-test-selector='stream-info-card-component__stream-avatar-link']":".clips-player a:not([class])");if(!i)return;return`${i.href.replace("https://www.twitch.tv/","")}/clip/${a?e:n}`}async getVideoId(t){const e=t.pathname;if(/^m\.twitch\.tv$/.test(e))return/videos\/([^/]+)/.exec(t.href)?.[0]??e.slice(1);if(/^player\.twitch\.tv$/.test(t.hostname))return`videos/${t.searchParams.get("video")}`;const o=/([^/]+)\/(?:clip)\/([^/]+)/.exec(e);if(o)return o[0];return/^clips\.twitch\.tv$/.test(t.hostname)?await this.getClipLink(e,t.searchParams.get("clip")):/(?:videos)\/([^/]+)/.exec(e)?.[0]}}const mt=["auto","ru","en","zh","ko","lt","lv","ar","fr","it","es","de","ja"],bt=["ru","en","kk"],ft=["srt","vtt","json"];class yt extends ot{API_ORIGIN="https://www.udemy.com/api-2.0";getModuleData(){const t=document.querySelector(".ud-app-loader[data-module-id='course-taking']")?.dataset?.moduleArgs;return t?JSON.parse(t):(console.error(U.get("udemyModuleArgsNotFound")),{})}getLectureId(){return/learn\/lecture\/([^/]+)/.exec(window.location.pathname)?.[1]}async getLectureData(t,e){const o=await this.fetch(`${this.API_ORIGIN}/users/me/subscribed-courses/${t}/lectures/${e}/?`+new URLSearchParams({"fields[lecture]":"title,description,asset","fields[asset]":"length,media_sources,captions"}));return await o.json()}async getCourseLang(t){const e=await this.fetch(`${this.API_ORIGIN}/users/me/subscribed-courses/${t}?`+new URLSearchParams({"fields[course]":"locale"}));return await e.json()}findVideoUrl(t){return t?.find((t=>"video/mp4"===t.type))?.src}findSubtitleUrl(t,e){let o=t?.find((t=>G(t.locale_id)===e));return o||(o=t?.find((t=>"en"===G(t.locale_id)))??t?.[0]),o?.url}async getVideoData(t){const{courseId:e}=this.getModuleData();if(!e)return;const o=this.getLectureId();if(P.log(`[Udemy] courseId: ${e}, lectureId: ${o}`),!o)return;const{title:n,description:a,asset:i}=await this.getLectureData(e,o),{length:r,media_sources:s,captions:l}=i,d=this.findVideoUrl(s);if(!d)return void console.log("Failed to find .mp4 video file in media_sources",s);const u=await this.getCourseLang(e);let{locale:{locale:c}}=u;c=c?G(c):"en",mt.includes(c)||(c="en");const h=this.findSubtitleUrl(l,c);return h||console.log("Failed to find subtitle file in captions",l),{...h?{url:A.find((t=>t.host===k.udemy)).url+t,translationHelp:[{target:"subtitles_file_url",targetUrl:h},{target:"video_file_url",targetUrl:d}],detectedLanguage:c}:{url:d,translationHelp:null},duration:r,title:n,description:a}}async getVideoId(t){return t.pathname.slice(1)}}class wt extends ot{API_ORIGIN="https://www.coursera.org/api";async getCourseData(t){const e=await this.fetch(`${this.API_ORIGIN}/onDemandCourses.v1/${t}`),o=await e.json();return o?.elements?.[0]}getPlayer(){return document.querySelector(".vjs-v6")}getPlayerData(){return this.getPlayer()?.player}findVideoUrl(t){return t?.find((t=>"video/mp4"===t.type))?.src}findSubtitleUrl(t,e){let o=t?.find((t=>G(t.srclang)===e));return o||(o=t?.find((t=>"en"===G(t.srclang)))||t?.[0]),o?.src}async getVideoData(t){const e=this.getPlayerData(),{duration:o}=e?.cache_||{},{courseId:n,tracks:a,sources:i}=e?.options_||{},r=this.findVideoUrl(i);if(!r)return void console.log("Failed to find .mp4 video file in sources",i);const{primaryLanguageCodes:s}=await this.getCourseData(n);let l=s?.[0];l=l?G(l):"en",mt.includes(l)||(l="en");const d=this.findSubtitleUrl(a,l);return d||console.log("Failed to find subtitle file in tracks",a),{...d?{url:A.find((t=>t.host===k.coursera)).url+t,translationHelp:[{target:"subtitles_file_url",targetUrl:d},{target:"video_file_url",targetUrl:r}],detectedLanguage:l}:{url:r,translationHelp:null},duration:o}}async getVideoId(t){return/learn\/([^/]+)\/lecture\/([^/]+)/.exec(t.pathname)?.[0]}}class xt extends ot{API_ORIGIN="https://learning.sap.com/";async requestKaltura(t,e,o){try{const n=await this.fetch(`https://${t}/api_v3/service/multirequest`,{method:"POST",body:JSON.stringify({1:{service:"session",action:"startWidgetSession",widgetId:`_${e}`},2:{service:"baseEntry",action:"list",ks:"{1:result:ks}",filter:{redirectFromEntryId:o},responseProfile:{type:1,fields:"id,referenceId,name,description,dataUrl,duration,flavorParamsIds,type,dvrStatus,externalSourceType,createdAt,updatedAt,endDate,plays,views,downloadUrl,creatorId"}},3:{service:"baseEntry",action:"getPlaybackContext",entryId:"{2:result:objects:0:id}",ks:"{1:result:ks}",contextDataParams:{objectType:"KalturaContextDataParams",flavorTags:"all"}},apiVersion:"3.3.0",format:1,ks:"",clientTag:"html5:v3.17.22",partnerId:e}),headers:{"Content-Type":"application/json"}});return await n.json()}catch(t){return void console.error("Failed to request kaltura data",t.message)}}async getKalturaData(t){try{const e=/https:\/\/([^"]+)\/p\/([^"]+)\/embedPlaykitJs\/uiconf_id\/([^"]+)/.exec(document.querySelector('script[data-nscript="beforeInteractive"]')?.src);if(!e)throw new et(`Failed to get sap data for videoId: ${t}`);const[,o,n]=e;let a=document.querySelector("#shadow")?.firstChild?.getAttribute("id");if(a||(a=/"sourceId":\s?"([^"]+)"/.exec(document.querySelector("#__NEXT_DATA__")?.innerText)?.[1]),!o||Number.isNaN(+n)||!a)throw new et(`One of the necessary parameters for getting a link to a sap video in wasn't found for ${t}. Params: kalturaDomain = ${o}, partnerId = ${n}, entryId = ${a}`);return await this.requestKaltura(o,n,a)}catch(t){return void console.error("Failed to get kaltura data",t.message)}}async getVideoData(t){const e=await this.getKalturaData(t);if(!e)return;const[,o,n]=e,{duration:a}=o.objects[0],i=n.sources.find((t=>"url"===t.format&&"http,https"===t.protocols&&t.url.includes(".mp4")))?.url;if(!i)return;return{url:i,subtitles:n.playbackCaptions.map((t=>({language:L(t.languageCode),format:"vtt",url:t.webVttUrl,isAutoGenerated:t.label.includes("auto-generated")}))),duration:a}}async getVideoId(t){return/((courses|learning-journeys)\/([^/]+)(\/[^/]+)?)/.exec(t.pathname)?.[1]}}class St extends ot{API_ORIGIN="https://www.linkedin.com/learning";async getVideoData(t){try{const e=document.querySelector(".video-js");if(!e)throw new et(`Failed to find video element for videoID ${t}`);const o=(e.getAttribute("data-sources")??"[]").replaceAll(""",'"').replaceAll("&","&"),n=JSON.parse(o).find((t=>t.src.includes(".mp4")));if(!n)throw new Error(`Failed to find video url for videoID ${t}`);const a=new URL(n.src),i=e.getAttribute("data-captions-url"),r=i?[{language:"en",format:"vtt",url:i}]:void 0;return{url:M(a),subtitles:r}}catch(t){return void console.error("Failed to get linkedin video data",t.message)}}async getVideoId(t){return/\/learning\/(([^/]+)\/([^/]+))/.exec(t.pathname)?.[1]}}class kt{static[k.mailru]=new nt;static[k.weverse]=new at;static[k.kodik]=new it;static[k.patreon]=new rt;static[k.reddit]=new st;static[k.bannedvideo]=new lt;static[k.kick]=new dt;static[k.appledeveloper]=new ut;static[k.epicgames]=new ct;static[k.nineanimetv]=new ht;static[k.odysee]=new pt;static[k.twitch]=new vt;static[k.coursehunter]=new gt;static[k.udemy]=new yt;static[k.coursera]=new wt;static[k.sap]=new xt;static[k.linkedin]=new St}class Tt extends Error{constructor(t){super(t),this.name="VideoDataError",this.message=t}}async function Ct(t,e){const o=new URL(window.location.href),n=t.host;if(Object.getOwnPropertyDescriptor(kt,n))return await kt[n].getVideoId(o);switch(n){case k.custom:return o.href;case k.piped:case k.poketube:case k.invidious:case k.youtube:return"youtu.be"===o.hostname&&(o.search=`?v=${o.pathname.replace("/","")}`,o.pathname="/watch"),/(?:watch|embed|shorts|live)\/([^/]+)/.exec(o.pathname)?.[1]??o.searchParams.get("v");case k.vk:{const t=/^\/(video|clip)-?\d{8,9}_\d{9}$/.exec(o.pathname),n=o.searchParams.get("z"),a=o.searchParams.get("oid"),i=o.searchParams.get("id");if(t)return t[0].slice(1);if(n)return n.split("/")[0];if(a&&i)return`video-${Math.abs(parseInt(a))}_${i}`;const r=e.parentElement?.closest(".video_box_wrap");return r?r.id.replace("video_box_wrap","video"):null}case k.nine_gag:case k.gag:return/gag\/([^/]+)/.exec(o.pathname)?.[1];case k.proxitok:case k.tiktok:return/([^/]+)\/video\/([^/]+)/.exec(o.pathname)?.[0];case k.vimeo:{const t=o.searchParams.get("app_id"),e=/[^/]+\/[^/]+$/.exec(o.pathname)?.[0]??/[^/]+$/.exec(o.pathname)?.[0];return t?`${e}?app_id=${t}`:e}case k.xvideos:return/[^/]+\/[^/]+$/.exec(o.pathname)?.[0];case k.pornhub:return o.searchParams.get("viewkey")??/embed\/([^/]+)/.exec(o.pathname)?.[1];case k.twitter:return/status\/([^/]+)/.exec(o.pathname)?.[1];case k.rumble:case k.facebook:return o.pathname.slice(1);case k.rutube:return/(?:video|embed)\/([^/]+)/.exec(o.pathname)?.[1];case k.bilibili:{const t=o.searchParams.get("bvid");if(t)return t;let e=/video\/([^/]+)/.exec(o.pathname)?.[1];return e&&null!==o.searchParams.get("p")&&(e+=`/?p=${o.searchParams.get("p")}`),e}case k.bitchute:return/(video|embed)\/([^/]+)/.exec(o.pathname)?.[2];case k.eporner:return/video-([^/]+)\/([^/]+)/.exec(o.pathname)?.[0];case k.peertube:return/\/w\/([^/]+)/.exec(o.pathname)?.[0];case k.dailymotion:{const t=Array.from(document.querySelectorAll("*")).filter((t=>t.innerHTML.trim().includes(".m3u8")));let e=t?.[1]?.lastChild?.src;if(!e)return;return/\/video\/(\w+)\.m3u8/.exec(e)?.[1]}case k.trovo:{const t=o.searchParams.get("vid");if(!t)return null;const e=/([^/]+)\/([\d]+)/.exec(o.pathname)?.[0];return e?`${e}?vid=${t}`:null}case k.yandexdisk:return/\/i\/([^/]+)/.exec(o.pathname)?.[1];case k.okru:return/\/video\/(\d+)/.exec(o.pathname)?.[1];case k.googledrive:return o.searchParams.get("docid");case k.newgrounds:return/([^/]+)\/(view)\/([^/]+)/.exec(o.pathname)?.[0];case k.egghead:return o.pathname.slice(1);case k.youku:return/v_show\/id_[\w=]+/.exec(o.pathname)?.[0];case k.archive:return/(details|embed)\/([^/]+)/.exec(o.pathname)?.[2];case k.watchpornto:return/\/(video|embed)\/(\d+)(\/[^/]+\/)?/.exec(o.pathname)?.[0];default:return}}async function Vt(t,e){const o=await Ct(t,e);if(!o)throw new Tt(`Entered unsupported link: "${t.host}"`);if(t.host===k.peertube&&(t.url=window.location.origin),t.rawResult)return{url:o,videoId:o,host:t.host,duration:void 0};if(!t.needExtraData)return{url:t.url+o,videoId:o,host:t.host,duration:void 0};const n=await kt[t.host].getVideoData(o);if(!n)throw new Tt(`Failed to get video raw url for ${t.host}`);return{...n,videoId:o,host:t.host}}class Lt extends Error{constructor(t){super(U.getDefault(t)),this.name="VOTLocalizedError",this.unlocalizedMessage=t,this.localizedMessage=U.get(t)}}const{rE:Mt}={rE:"1.2.9"};class At extends Error{data;constructor(t,e=void 0){super(t),this.data=e,this.name="VOTJSError",this.message=t}}class Ot{host;hostVOT;schema;schemaVOT;fetch;fetchOpts;getVideoDataFn;sessions={};requestLang;responseLang;userAgent=y.userAgent;componentVersion=y.componentVersion;paths={videoTranslation:"/video-translation/translate",videoSubtitles:"/video-subtitles/get-subtitles",streamPing:"/stream-translation/ping-stream",streamTranslation:"/stream-translation/translate-stream",createSession:"/session/create"};isCustomLink(t){return!!(/\.(m3u8|m4(a|v)|mpd)/.exec(t)??/^https:\/\/cdn\.qstv\.on\.epicgames\.com/.exec(t))}headers={"User-Agent":this.userAgent,Accept:"application/x-protobuf","Accept-Language":"en","Content-Type":"application/x-protobuf",Pragma:"no-cache","Cache-Control":"no-cache","Sec-Fetch-Mode":"no-cors"};headersVOT={"User-Agent":`vot.js/${Mt}`,"Content-Type":"application/json",Pragma:"no-cache","Cache-Control":"no-cache"};constructor({host:t=y.host,hostVOT:e=y.hostVOT,fetchFn:o=V,fetchOpts:n={},getVideoDataFn:a=Vt,requestLang:i="en",responseLang:r="ru",headers:s={}}={}){const l=/(http(s)?):\/\//,d=l.exec(t)?.[1];this.host=d?t.replace(`${d}://`,""):t,this.schema=d??"https";const u=l.exec(e)?.[1];this.hostVOT=u?e.replace(`${u}://`,""):e,this.schemaVOT=u??"https",this.fetch=o,this.fetchOpts=n,this.getVideoDataFn=a,this.requestLang=i,this.responseLang=r,this.headers={...this.headers,...s}}getOpts(t,e={}){return{method:"POST",headers:{...this.headers,...e},body:t,...this.fetchOpts}}async request(t,e,o={}){const n=this.getOpts(new Blob([e]),o);try{const e=await this.fetch(`${this.schema}://${this.host}${t}`,n),o=await e.arrayBuffer();return{success:200===e.status,data:o}}catch(t){return{success:!1,data:t?.message}}}async requestVOT(t,e,o={}){const n=this.getOpts(JSON.stringify(e),{...this.headersVOT,...o});try{const e=await this.fetch(`${this.schemaVOT}://${this.hostVOT}${t}`,n),o=await e.json();return{success:200===e.status,data:o}}catch(t){return{success:!1,data:t?.message}}}async getSession(t){const e=Math.floor(Date.now()/1e3),o=this.sessions[t];if(o&&o.timestamp+o.expires>e)return o;const{secretKey:n,expires:a,uuid:i}=await this.createSession(t);return this.sessions[t]={secretKey:n,expires:a,timestamp:e,uuid:i},this.sessions[t]}async translateVideoYAImpl({videoData:t,requestLang:e=this.requestLang,responseLang:o=this.responseLang,translationHelp:n=null,headers:a={}}){const{url:i,duration:r=y.defaultDuration}=t,{secretKey:s,uuid:l}=await this.getSession("video-translation"),d=f.encodeTranslationRequest(i,r,e,o,n),u=await S(d),c=await this.request(this.paths.videoTranslation,d,{"Vtrans-Signature":u,"Sec-Vtrans-Sk":s,"Sec-Vtrans-Token":`${u}:${l}:${this.paths.videoTranslation}:${this.componentVersion}`,...a});if(!c.success)throw new Lt("requestTranslationFailed");const h=f.decodeTranslationResponse(c.data);switch(P.log("requestTranslation",h),h.status){case T.FAILED:throw h?.message?new At("Yandex couldn't translate video",h):new Lt("requestTranslationFailed");case T.FINISHED:case T.PART_CONTENT:if(!h.url)throw new Lt("audioNotReceived");return{translated:!0,url:h.url,remainingTime:h.remainingTime??-1};case T.WAITING:return{translated:!1,remainingTime:h.remainingTime};case T.LONG_WAITING:case T.LONG_WAITING_2:return{translated:!1,remainingTime:h.remainingTime??-1};default:throw console.error("[vot.js] Unknown response",h),new At("Unknown response from Yandex",h)}}async translateVideoVOTImpl({url:t,videoId:e,service:o,requestLang:n=this.requestLang,responseLang:a=this.responseLang,headers:i={}}){const r=function(t,e,o){return t===k.patreon?{service:"mux",videoId:new URL(o).pathname.slice(1)}:{service:t,videoId:e}}(o,e,t),s=await this.requestVOT(this.paths.videoTranslation,{provider:"yandex",service:r.service,videoId:r.videoId,fromLang:n,toLang:a,rawVideo:t},i);if(!s.success)throw new Lt("requestTranslationFailed",s);const l=s.data;switch(l.status){case"failed":throw new At("Yandex couldn't translate video",l);case"success":if(!l.translatedUrl)throw new Lt("audioNotReceived");return{translated:!0,url:l.translatedUrl,remainingTime:-1};case"waiting":return{translated:!1,remainingTime:l.remainingTime,message:l.message}}}async translateVideo({videoData:t,requestLang:e=this.requestLang,responseLang:o=this.responseLang,translationHelp:n=null,headers:a={}}){const{url:i,videoId:r,host:s}=t;return this.isCustomLink(i)?await this.translateVideoVOTImpl({url:i,videoId:r,service:s,requestLang:e,responseLang:o,headers:a}):await this.translateVideoYAImpl({videoData:t,requestLang:e,responseLang:o,translationHelp:n,headers:a})}async getSubtitles({videoData:t,requestLang:e=this.requestLang,headers:o={}}){const{url:n}=t;if(this.isCustomLink(n))return{waiting:!1,subtitles:[]};const{secretKey:a,uuid:i}=await this.getSession("video-translation"),r=f.encodeSubtitlesRequest(n,e),s=await S(r),l=await this.request(this.paths.videoSubtitles,r,{"Vsubs-Signature":await S(r),"Sec-Vsubs-Sk":a,"Sec-Vsubs-Token":`${s}:${i}:${this.paths.videoSubtitles}:${this.componentVersion}`,...o});if(!l.success)throw new At("Failed to request video subtitles",l);return f.decodeSubtitlesResponse(l.data)}async pingStream({pingId:t,headers:e={}}){const{secretKey:o,uuid:n}=await this.getSession("video-translation"),a=f.encodeStreamPingRequest(t),i=await S(a),r=await this.request(this.paths.streamPing,a,{"Vtrans-Signature":await S(a),"Sec-Vtrans-Sk":o,"Sec-Vtrans-Token":`${i}:${n}:${this.paths.streamPing}:${this.componentVersion}`,...e});if(!r.success)throw new At("Failed to request stream ping",r);return!0}async translateStream({videoData:t,requestLang:e=this.requestLang,responseLang:o=this.responseLang,headers:a={}}){const{url:i}=t;if(this.isCustomLink(i))throw new Lt("VOTStreamNotSupportedUrl");const{secretKey:r,uuid:s}=await this.getSession("video-translation"),l=f.encodeStreamRequest(i,e,o),d=await S(l),u=await this.request(this.paths.streamTranslation,l,{"Vtrans-Signature":await S(l),"Sec-Vtrans-Sk":r,"Sec-Vtrans-Token":`${d}:${s}:${this.paths.streamTranslation}:${this.componentVersion}`,...a});if(!u.success)throw new At("Failed to request stream translation",u);const c=f.decodeStreamResponse(u.data),h=c.interval;switch(h){case n.NO_CONNECTION:case n.TRANSLATING:return{translated:!1,interval:h,message:h===n.NO_CONNECTION?"streamNoConnectionToServer":"translationTakeFewMinutes"};case n.STREAMING:return{translated:!0,interval:h,pingId:c.pingId,result:c.translatedInfo};default:throw console.error("[vot.js] Unknown response",c),new At("Unknown response from Yandex",c)}}async createSession(t){const e=function(){let t="";for(let e=0;e<32;e++)t+="0123456789ABCDEF"[Math.floor(16*Math.random())];return t}(),o=f.encodeYandexSessionRequest(e,t),n=await this.request(this.paths.createSession,o,{"Vtrans-Signature":await S(o)});if(!n.success)throw new At("Failed to request create session",n);return{...f.decodeYandexSessionResponse(n.data),uuid:e}}}class It extends Ot{async request(t,e,o={}){const n=this.getOpts(JSON.stringify({headers:{...this.headers,...o},body:Array.from(e)}),{"Content-Type":"application/json"});try{const e=await this.fetch(`${this.schema}://${this.host}${t}`,n),o=await e.arrayBuffer();return{success:200===e.status,data:o}}catch(t){return{success:!1,data:t?.message}}}}var Pt;function Et(t,e=","){const o=t/1e3,n=Math.floor(o/3600),a=Math.floor(o%3600/60),i=Math.floor(o%60),r=Math.floor(t%1e3);return`${n.toString().padStart(2,"0")}:${a.toString().padStart(2,"0")}:${i.toString().padStart(2,"0")}${e}${r.toString().padStart(3,"0")}`}function _t(t){const e=t.split(" ")?.[0]?.split(":");e.length<3&&e.unshift("00");const[o,n,a]=e;return 36e5*+o+6e4*+n+ +a.replace(/[,.]/,"")}function $t(t,e="srt"){const o="vtt"===e,n=o?".":",",a=t.subtitles.map(((t,e)=>(o?"":`${e+1}\n`)+`${Et(t.startMs,n)} --\x3e ${Et(t.startMs+t.durationMs,n)}\n${t.text}\n\n`)).join("").trim();return o?`WEBVTT\n\n${a}`:a}function Nt(t,e="srt"){const o=function(t){return"string"!=typeof t?"json":/(WEBVTT)(\r?\n\r?\n)/.exec(t)?"vtt":"srt"}(t);return o===e?t:"json"===o?$t(t,e):(t=function(t,e="srt"){const o=t.split(/\r?\n\r?\n/g);"vtt"===e&&o.shift();const n=+("srt"===e);return{containsTokens:!1,subtitles:o.reduce(((t,e)=>{const o=e.trim().split("\n"),a=o[n],i=o.slice(n+1).join("\n");if(!(2===o.length&&e.includes(" --\x3e ")||a?.includes(" --\x3e ")))return 0===t.length||(t[t.length-1].text+=`\n\n${o.join("\n")}`),t;const[r,s]=a.split(" --\x3e "),l=_t(r),d=_t(s)-l;return t.push({text:i,startMs:l,durationMs:d,speakerId:"0"}),t}),[])}}(t,o),"json"===e?t:$t(t,e))}!function(t){t.Channel="Channel",t.Video="Video"}(Pt||(Pt={}));const Rt=globalThis,Bt=Rt.trustedTypes,Dt=Bt?Bt.createPolicy("lit-html",{createHTML:t=>t}):void 0,Ft="$lit$",qt=`lit$${Math.random().toFixed(9).slice(2)}$`,Ht="?"+qt,zt=`<${Ht}>`,Ut=document,Wt=()=>Ut.createComment(""),jt=t=>null===t||"object"!=typeof t&&"function"!=typeof t,Gt=Array.isArray,Jt=t=>Gt(t)||"function"==typeof t?.[Symbol.iterator],Kt="[ \t\n\f\r]",Yt=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Zt=/-->/g,Qt=/>/g,Xt=RegExp(`>|${Kt}(?:([^\\s"'>=/]+)(${Kt}*=${Kt}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),te=/'/g,ee=/"/g,oe=/^(?:script|style|textarea|title)$/i,ne=t=>(e,...o)=>({_$litType$:t,strings:e,values:o}),ae=ne(1),ie=ne(2),re=(ne(3),Symbol.for("lit-noChange")),se=Symbol.for("lit-nothing"),le=new WeakMap,de=Ut.createTreeWalker(Ut,129);function ue(t,e){if(!Gt(t)||!t.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==Dt?Dt.createHTML(e):e}const ce=(t,e)=>{const o=t.length-1,n=[];let a,i=2===e?"":3===e?"":"",r=Yt;for(let e=0;e"===l[0]?(r=a??Yt,d=-1):void 0===l[1]?d=-2:(d=r.lastIndex-l[2].length,s=l[1],r=void 0===l[3]?Xt:'"'===l[3]?ee:te):r===ee||r===te?r=Xt:r===Zt||r===Qt?r=Yt:(r=Xt,a=void 0);const c=r===Xt&&t[e+1].startsWith("/>")?" ":"";i+=r===Yt?o+zt:d>=0?(n.push(s),o.slice(0,d)+Ft+o.slice(d)+qt+c):o+qt+(-2===d?e:c)}return[ue(t,i+(t[o]||"")+(2===e?"":3===e?"":"")),n]};class he{constructor({strings:t,_$litType$:e},o){let n;this.parts=[];let a=0,i=0;const r=t.length-1,s=this.parts,[l,d]=ce(t,e);if(this.el=he.createElement(l,o),de.currentNode=this.el.content,2===e||3===e){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(n=de.nextNode())&&s.length0){n.textContent=Bt?Bt.emptyScript:"";for(let o=0;o2||""!==o[0]||""!==o[1]?(this._$AH=Array(o.length-1).fill(new String),this.strings=o):this._$AH=se}_$AI(t,e=this,o,n){const a=this.strings;let i=!1;if(void 0===a)t=pe(this,t,e,0),i=!jt(t)||t!==this._$AH&&t!==re,i&&(this._$AH=t);else{const n=t;let r,s;for(t=a[0],r=0;r{const n=o?.renderBefore??e;let a=n._$litPart$;if(void 0===a){const t=o?.renderBefore??null;n._$litPart$=a=new ve(e.insertBefore(Wt(),t),t,void 0,o??{})}return a._$AI(t),a};o("./src/styles/main.scss");const ke="#UNDEFINED",Te=ie` -`,Ce={easing:"linear",delay:function(t,e){return 200*e}};function Me(t){const e=document.createElement("vot-block");return e.classList.add("vot-icon-button"),Te(t,e),e}function Ae(t){const e=+t.value,o=+t.min,n=(e-o)/(+t.max-o);t.parentElement.setAttribute("style",`--vot-progress: ${n}`)}function Oe(t,e="",o=" ",n=!1){const a=document.createElement("vot-block");a.classList.add("vot-textfield");const i=document.createElement(n?"textarea":"input");i.placeholder=o,i.value=e,t||i.classList.add("vot-show-placeholer");const r=document.createElement("span");return r.append(t),a.append(i,r),{container:a,input:i,label:r}}function Ie(t){const e=document.createElement("vot-block");e.classList.add("vot-dialog-container"),e.hidden=!0;const o=document.createElement("vot-block");o.classList.add("vot-dialog-backdrop");const n=document.createElement("vot-block");n.classList.add("vot-dialog");const a=document.createElement("vot-block");a.classList.add("vot-dialog-content-wrapper");const i=document.createElement("vot-block");i.classList.add("vot-dialog-header-container");const r=document.createElement("vot-block");r.classList.add("vot-dialog-body-container");const s=document.createElement("vot-block");s.classList.add("vot-dialog-footer-container");const l=document.createElement("vot-block");l.classList.add("vot-dialog-title-container");const d=Me(se``,Ce={easing:"linear",delay:function(t,e){return 200*e}};function Ve(t){const e=document.createElement("vot-block");return e.classList.add("vot-icon-button"),Se(t,e),e}function Le(t){const e=+t.value,o=+t.min,n=(e-o)/(+t.max-o);t.parentElement.setAttribute("style",`--vot-progress: ${n}`)}function Me(t,e="",o=" ",n=!1){const a=document.createElement("vot-block");a.classList.add("vot-textfield");const i=document.createElement(n?"textarea":"input");i.placeholder=o,i.value=e,t||i.classList.add("vot-show-placeholer");const r=document.createElement("span");return r.append(t),a.append(i,r),{container:a,input:i,label:r}}function Ae(t){const e=document.createElement("vot-block");e.classList.add("vot-dialog-container"),e.hidden=!0;const o=document.createElement("vot-block");o.classList.add("vot-dialog-backdrop");const n=document.createElement("vot-block");n.classList.add("vot-dialog");const a=document.createElement("vot-block");a.classList.add("vot-dialog-content-wrapper");const i=document.createElement("vot-block");i.classList.add("vot-dialog-header-container");const r=document.createElement("vot-block");r.classList.add("vot-dialog-body-container");const s=document.createElement("vot-block");s.classList.add("vot-dialog-footer-container");const l=document.createElement("vot-block");l.classList.add("vot-dialog-title-container");const d=Ve(ie` - `);d.classList.add("vot-dialog-close-button"),o.onclick=d.onclick=()=>{e.hidden=!0};const u=document.createElement("vot-block");return u.classList.add("vot-dialog-title"),u.append(t),e.append(o,n),n.append(a),a.append(i,r,s),i.append(l,d),l.append(u),{container:e,backdrop:o,dialog:n,contentWrapper:a,headerContainer:i,bodyContainer:r,footerContainer:s,titleContainer:l,closeButton:d,title:u}}function Pe(t,e,o,n={}){const{onSelectCb:a=function(){},labelElement:i=""}=n;let r=[];const s=document.createElement("vot-block");s.classList.add("vot-select"),i&&s.append(i);const l=document.createElement("vot-block");l.classList.add("vot-select-outer");const d=document.createElement("span");d.classList.add("vot-select-title"),d.textContent=t,void 0===t&&(d.textContent=o.find((t=>!0===t.selected))?.label);const u=document.createElement("vot-block");u.classList.add("vot-select-arrow-icon"),Te(Le,u),l.append(d,u),l.onclick=()=>{const t=Ie(e);t.container.classList.add("vot-dialog-temp"),t.container.hidden=!1,document.documentElement.appendChild(t.container);const n=document.createElement("vot-block");n.classList.add("vot-select-content-list");for(const t of o){const e=document.createElement("vot-block");e.classList.add("vot-select-content-item"),e.textContent=t.label,e.dataset.votSelected=t.selected,e.dataset.votValue=t.value,t.disabled&&(e.inert=!0),e.onclick=async i=>{if(i.target.inert)return;const r=n.childNodes;for(let t of r)t.dataset.votSelected=!1;for(let e of o)e.selected=e.value===t.value;e.dataset.votSelected=!0,d.textContent=t.label,await a(i)},n.appendChild(e)}const i=Oe(j.get("searchField"));i.input.oninput=t=>{const e=t.target.value.toLowerCase();for(let t=0;t{t.container.remove(),r=[]}},s.append(l);return{container:s,title:d,arrowIcon:u,labelElement:i,setTitle:t=>{d.textContent=t},setSelected:t=>{const e=Array.from(r).filter((t=>!t.inert));for(let o=0;o{o=t}}}const Ee={createHeader:function(t,e=4){const o=document.createElement("vot-block");return o.classList.add("vot-header",`vot-header-level-${e}`),o.append(t),o},createInformation:function(t,e){const o=document.createElement("vot-block");o.classList.add("vot-info");const n=document.createElement("vot-block");Te(t,n);const a=document.createElement("vot-block");return Te(e,a),o.append(n,a),{container:o,header:n,value:a}},createButton:function(t){const e=document.createElement("vot-block");return e.classList.add("vot-button"),e.append(t),e},createTextButton:function(t){const e=document.createElement("vot-block");return e.classList.add("vot-text-button"),e.append(t),e},createOutlinedButton:function(t){const e=document.createElement("vot-block");return e.classList.add("vot-outlined-button"),e.append(t),e},createIconButton:Me,createCheckbox:function(t,e=!1){const o=document.createElement("label");o.classList.add("vot-checkbox");const n=document.createElement("input");n.type="checkbox",n.checked=Boolean(e);const a=document.createElement("span");return a.append(t),o.append(n,a),{container:o,input:n,label:a}},createSlider:function(t,e=50,o=0,n=100){const a=document.createElement("vot-block");a.classList.add("vot-slider");const i=document.createElement("input");i.type="range",i.min=o,i.max=n,i.value=e;const r=document.createElement("span");return Te(t,r),a.append(i,r),i.addEventListener("input",(t=>Ae(t.target))),Ae(i),{container:a,input:i,label:r}},createTextfield:Oe,createDialog:Ie,createVOTButton:function(t){const e=document.createElement("vot-block");e.classList.add("vot-segmented-button");const o=document.createElement("vot-block");o.classList.add("vot-segment"),o.classList.add("vot-translate-button"),Te(se``);d.classList.add("vot-dialog-close-button"),o.onclick=d.onclick=()=>{e.hidden=!0};const u=document.createElement("vot-block");return u.classList.add("vot-dialog-title"),u.append(t),e.append(o,n),n.append(a),a.append(i,r,s),i.append(l,d),l.append(u),{container:e,backdrop:o,dialog:n,contentWrapper:a,headerContainer:i,bodyContainer:r,footerContainer:s,titleContainer:l,closeButton:d,title:u}}function Oe(t,e,o,n={}){const{onSelectCb:a=function(){},labelElement:i=""}=n;let r=[];const s=document.createElement("vot-block");s.classList.add("vot-select"),i&&s.append(i);const l=document.createElement("vot-block");l.classList.add("vot-select-outer");const d=document.createElement("span");d.classList.add("vot-select-title"),d.textContent=t,void 0===t&&(d.textContent=o.find((t=>!0===t.selected))?.label);const u=document.createElement("vot-block");u.classList.add("vot-select-arrow-icon"),Se(Te,u),l.append(d,u),l.onclick=()=>{const t=Ae(e);t.container.classList.add("vot-dialog-temp"),t.container.hidden=!1,document.documentElement.appendChild(t.container);const n=document.createElement("vot-block");n.classList.add("vot-select-content-list");for(const t of o){const e=document.createElement("vot-block");e.classList.add("vot-select-content-item"),e.textContent=t.label,e.dataset.votSelected=t.selected,e.dataset.votValue=t.value,t.disabled&&(e.inert=!0),e.onclick=async i=>{if(i.target.inert)return;const r=n.childNodes;for(let t of r)t.dataset.votSelected=!1;for(let e of o)e.selected=e.value===t.value;e.dataset.votSelected=!0,d.textContent=t.label,await a(i)},n.appendChild(e)}const i=Me(U.get("searchField"));i.input.oninput=t=>{const e=t.target.value.toLowerCase();for(let t=0;t{t.container.remove(),r=[]}},s.append(l);return{container:s,title:d,arrowIcon:u,labelElement:i,setTitle:t=>{d.textContent=t},setSelected:t=>{const e=Array.from(r).filter((t=>!t.inert));for(let o=0;o{o=t}}}const Ie={createHeader:function(t,e=4){const o=document.createElement("vot-block");return o.classList.add("vot-header",`vot-header-level-${e}`),o.append(t),o},createInformation:function(t,e){const o=document.createElement("vot-block");o.classList.add("vot-info");const n=document.createElement("vot-block");Se(t,n);const a=document.createElement("vot-block");return Se(e,a),o.append(n,a),{container:o,header:n,value:a}},createButton:function(t){const e=document.createElement("vot-block");return e.classList.add("vot-button"),e.append(t),e},createTextButton:function(t){const e=document.createElement("vot-block");return e.classList.add("vot-text-button"),e.append(t),e},createOutlinedButton:function(t){const e=document.createElement("vot-block");return e.classList.add("vot-outlined-button"),e.append(t),e},createIconButton:Ve,createCheckbox:function(t,e=!1){const o=document.createElement("label");o.classList.add("vot-checkbox");const n=document.createElement("input");n.type="checkbox",n.checked=Boolean(e);const a=document.createElement("span");return a.append(t),o.append(n,a),{container:o,input:n,label:a}},createSlider:function(t,e=50,o=0,n=100){const a=document.createElement("vot-block");a.classList.add("vot-slider");const i=document.createElement("input");i.type="range",i.min=o,i.max=n,i.value=e;const r=document.createElement("span");return Se(t,r),a.append(i,r),i.addEventListener("input",(t=>Le(t.target))),Le(i),{container:a,input:i,label:r}},createTextfield:Me,createDialog:Ae,createVOTButton:function(t){const e=document.createElement("vot-block");e.classList.add("vot-segmented-button");const o=document.createElement("vot-block");o.classList.add("vot-segment"),o.classList.add("vot-translate-button"),Se(ie` - `,o);const n=document.createElement("vot-block");n.classList.add("vot-separator");const a=document.createElement("vot-block");a.classList.add("vot-segment-only-icon"),Te(se``,o);const n=document.createElement("vot-block");n.classList.add("vot-separator");const a=document.createElement("vot-block");a.classList.add("vot-segment-only-icon"),Se(ie` - `,a);const i=document.createElement("vot-block");i.classList.add("vot-separator");const r=document.createElement("vot-block");r.classList.add("vot-segment-only-icon"),Te(se``,a);const i=document.createElement("vot-block");i.classList.add("vot-separator");const r=document.createElement("vot-block");r.classList.add("vot-segment-only-icon"),Se(ie` - `,r);const s=document.createElement("span");return s.classList.add("vot-segment-label"),s.append(t),e.append(o,n,a,i,r),o.append(s),{container:e,translateButton:o,separator:n,pipButton:a,separator2:i,menuButton:r,label:s}},createVOTMenu:function(t){const e=document.createElement("vot-block");e.classList.add("vot-menu"),e.hidden=!0;const o=document.createElement("vot-block");o.classList.add("vot-menu-content-wrapper");const n=document.createElement("vot-block");n.classList.add("vot-menu-header-container");const a=document.createElement("vot-block");a.classList.add("vot-menu-body-container");const i=document.createElement("vot-block");i.classList.add("vot-menu-footer-container");const r=document.createElement("vot-block");r.classList.add("vot-menu-title-container");const s=document.createElement("vot-block");return s.classList.add("vot-menu-title"),s.append(t),e.append(o),o.append(n,a,i),n.append(r),r.append(s),{container:e,contentWrapper:o,headerContainer:n,bodyContainer:a,footerContainer:i,titleContainer:r,title:s}},createVOTSelectLabel:function(t){const e=document.createElement("span");return e.classList.add("vot-select-label"),e.textContent=t,e},createVOTSelect:Pe,createVOTLanguageSelect:function(t){const{fromTitle:e=Ve,fromDialogTitle:o=Ve,fromItems:n=[],fromOnSelectCB:a=null,toTitle:i=Ve,toDialogTitle:r=Ve,toItems:s=[],toOnSelectCB:l=null}=t,d=document.createElement("vot-block");d.classList.add("vot-lang-select");const u=Pe(e,o,n,{onSelectCb:a}),c=document.createElement("vot-block");c.classList.add("vot-lang-select-icon"),Te(se``,r);const s=document.createElement("span");return s.classList.add("vot-segment-label"),s.append(t),e.append(o,n,a,i,r),o.append(s),{container:e,translateButton:o,separator:n,pipButton:a,separator2:i,menuButton:r,label:s}},createVOTMenu:function(t){const e=document.createElement("vot-block");e.classList.add("vot-menu"),e.hidden=!0;const o=document.createElement("vot-block");o.classList.add("vot-menu-content-wrapper");const n=document.createElement("vot-block");n.classList.add("vot-menu-header-container");const a=document.createElement("vot-block");a.classList.add("vot-menu-body-container");const i=document.createElement("vot-block");i.classList.add("vot-menu-footer-container");const r=document.createElement("vot-block");r.classList.add("vot-menu-title-container");const s=document.createElement("vot-block");return s.classList.add("vot-menu-title"),s.append(t),e.append(o),o.append(n,a,i),n.append(r),r.append(s),{container:e,contentWrapper:o,headerContainer:n,bodyContainer:a,footerContainer:i,titleContainer:r,title:s}},createVOTSelectLabel:function(t){const e=document.createElement("span");return e.classList.add("vot-select-label"),e.textContent=t,e},createVOTSelect:Oe,createVOTLanguageSelect:function(t){const{fromTitle:e=ke,fromDialogTitle:o=ke,fromItems:n=[],fromOnSelectCB:a=null,toTitle:i=ke,toDialogTitle:r=ke,toItems:s=[],toOnSelectCB:l=null}=t,d=document.createElement("vot-block");d.classList.add("vot-lang-select");const u=Oe(e,o,n,{onSelectCb:a}),c=document.createElement("vot-block");c.classList.add("vot-lang-select-icon"),Se(ie` - `,c);const h=Pe(i,r,s,{onSelectCb:l});return d.append(u.container,c,h.container),{container:d,fromSelect:u,icon:c,toSelect:h}},updateSlider:Ae,animateLoader:function(t,e="139, 180, 245"){const o=t.querySelector(".vot-loader-helper"),n=t.querySelector(".vot-loader-main");anime.timeline({...Ce,targets:[o,n],duration:250}).add({"fill-opacity":0,"stroke-width":2,d:"M 12 1.5 C 17.799 1.5 22.5 6.201 22.5 12 C 22.5 17.799 17.799 22.5 12 22.5 C 6.201 22.5 1.5 17.799 1.5 12 C 1.5 6.201 6.201 1.5 12 1.5 Z",duration:0}).add({targets:o,stroke:`rgb(${e})`,"stroke-opacity":0,duration:0},0).add({targets:n,stroke:"#888888","stroke-opacity":.25},0);const a=anime.timeline({targets:o,easing:"easeInOutSine",duration:1e3,autoplay:!1}).add({strokeOpacity:1,duration:0},0).add({strokeDashoffset:[anime.setDashoffset,0]},0);return t=>{a.seek(a.duration*(t/100))}},afterAnimateLoader:function(t,e="139, 180, 245"){const o=t.querySelector(".vot-loader-helper"),n=t.querySelector(".vot-loader-main");anime.timeline({...Ce,targets:n,duration:600}).add({d:"M 9.0596 14.8571 L 9.7667 15.5642 L 10.4738 14.8571 L 17.0071 8.3238 C 17.0457 8.2852 17.0937 8.25 17.2333 8.25 C 17.373 8.25 17.421 8.2852 17.4596 8.3238 C 17.4981 8.3624 17.5333 8.4104 17.5333 8.55 C 17.5333 8.6896 17.4981 8.7376 17.4596 8.7762 L 9.9929 16.2429 C 9.9011 16.3346 9.8397 16.35 9.7667 16.35 C 9.6937 16.35 9.6322 16.3346 9.5404 16.2429 L 6.0738 12.7762 C 6.0352 12.7376 6 12.6897 6 12.55 C 6 12.4103 6.0352 12.3624 6.0738 12.3238 C 6.1124 12.2852 6.1603 12.25 6.3 12.25 C 6.4397 12.25 6.4876 12.2852 6.5262 12.3238 L 9.0596 14.8571 Z",duration:0}).add({strokeDashoffset:[anime.setDashoffset,0],stroke:`rgb(${e})`,"stroke-opacity":1}),setTimeout((()=>{anime.timeline({...Ce,targets:n,duration:600}).add({d:"M12 15.575C11.8667 15.575 11.7417 15.5542 11.625 15.5125C11.5083 15.4708 11.4 15.4 11.3 15.3L7.7 11.7C7.5 11.5 7.40417 11.2667 7.4125 11C7.42083 10.7333 7.51667 10.5 7.7 10.3C7.9 10.1 8.1375 9.99583 8.4125 9.9875C8.6875 9.97917 8.925 10.075 9.125 10.275L11 12.15V5C11 4.71667 11.0958 4.47917 11.2875 4.2875C11.4792 4.09583 11.7167 4 12 4C12.2833 4 12.5208 4.09583 12.7125 4.2875C12.9042 4.47917 13 4.71667 13 5V12.15L14.875 10.275C15.075 10.075 15.3125 9.97917 15.5875 9.9875C15.8625 9.99583 16.1 10.1 16.3 10.3C16.4833 10.5 16.5792 10.7333 16.5875 11C16.5958 11.2667 16.5 11.5 16.3 11.7L12.7 15.3C12.6 15.4 12.4917 15.4708 12.375 15.5125C12.2583 15.5542 12.1333 15.575 12 15.575ZM6 20C5.45 20 4.97917 19.8042 4.5875 19.4125C4.19583 19.0208 4 18.55 4 18V16C4 15.7167 4.09583 15.4792 4.2875 15.2875C4.47917 15.0958 4.71667 15 5 15C5.28333 15 5.52083 15.0958 5.7125 15.2875C5.90417 15.4792 6 15.7167 6 16V18H18V16C18 15.7167 18.0958 15.4792 18.2875 15.2875C18.4792 15.0958 18.7167 15 19 15C19.2833 15 19.5208 15.0958 19.7125 15.2875C19.9042 15.4792 20 15.7167 20 16V18C20 18.55 19.8042 19.0208 19.4125 19.4125C19.0208 19.8042 18.55 20 18 20H6Z",duration:100}).add({targets:o,d:"",duration:200},0).add({targets:n,"stroke-width":"0",stroke:`rgba(${e}), 0)`,"fill-opacity":"1","stroke-dasharray":"0","stroke-dashoffset":"0",duration:0})}),2e3)},createDetails:function(t){const e=document.createElement("vot-block");e.classList.add("vot-details");const o=document.createElement("vot-block");o.append(t);const n=document.createElement("vot-block");return n.classList.add("vot-details-arrow-icon"),Te(Le,n),e.append(o,n),{container:e,header:o,arrowIcon:n}}};const _e={async translate(t,e){try{const o=await et(`${H.yandex}?${new URLSearchParams({text:t,lang:e})}`,{timeout:3e3});if(o instanceof Error)throw o;const n=await o.json();if(200!==n.code)throw n.message;return n.text[0]}catch(e){return console.error("Error translating text:",e),t}},async detect(t){try{const e=await et(`${q.yandex}?${new URLSearchParams({text:t})}`,{timeout:3e3});if(e instanceof Error)throw e;const o=await e.json();if(200!==o.code)throw o.message;return o.lang??"en"}catch(t){return console.error("Error getting lang from text:",t),"en"}}},$e={async detect(t){try{const e=await et(q.rustServer,{method:"POST",body:t});if(e instanceof Error)throw e;return await e.text()}catch(t){return console.error("Error getting lang from text:",t),"en"}}},Ne={async translate(t,e="auto",o="ru"){try{const n=await et(H.deepl,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:new URLSearchParams({text:t,source_lang:e,target_lang:o})});if(n instanceof Error)throw n;const a=await n.json();if(200!==a.code)throw a.message;return a.data}catch(e){return console.error("Error translating text:",e),t}}};const Re=Object.keys(H),De=Object.keys(q).map((t=>"rustServer"===t?"rust-server":t));async function Be(t,e,o,n){if(!window.location.hostname.includes("m.youtube.com")&&t?.getAudioTrack){const e=t.getAudioTrack(),o=e?.getLanguageInfo();if("und"!==o?.id)return K(o.id.split(".")[0])}const a=e?.captions?.playerCaptionsTracklistRenderer?.captionTracks;if(a?.length){const t=a.find((t=>"asr"===t.kind));if(t&&t.languageCode)return K(t.languageCode)}const i=function(t,e){return`${t} ${e?e.split("\n").filter((t=>!Q.test(t))).join(" "):""}`.slice(0,450).replace(/[^\p{L}\s]+|\s+/gu," ").trim()}(o,n);return _.log(`Detecting language text: ${i}`),async function(t){switch(await z.get("detectService",F)){case"yandex":return await _e.detect(t);case"rust-server":return await $e.detect(t);default:return"en"}}(i)}function Fe(){return/^m\.youtube\.com$/.test(window.location.hostname)}function qe(){return window.location.pathname.startsWith("/shorts/")&&!Fe()?document.querySelector("#shorts-player"):document.querySelector("#movie_player")}function He(){const t=qe();return t?.getPlayerResponse?t?.getPlayerResponse?.call()??null:t?.data?.playerResponse??null}function ze(){const t=qe();return t?.getVideoData?t?.getVideoData?.call()??null:t?.data?.playerResponse?.videoDetails??null}const Ue={isMobile:Fe,getPlayer:qe,getPlayerResponse:He,getPlayerData:ze,getVideoVolume:function(){const t=qe();return t?.getVolume?t.getVolume.call()/100:1},getSubtitles:function(){const t=He(),e=t?.captions?.playerCaptionsTracklistRenderer;if(!e)return[];let o=e.captionTracks??[];const n=e.translationLanguages??[],a=j.lang,i=n.find((t=>t.languageCode===a)),r=o.find((t=>"asr"===t?.kind))?.languageCode??"en";return o=o.reduce(((t,e)=>{if(!("languageCode"in e))return t;const o=e.languageCode?K(e.languageCode):void 0,n=e?.url||e?.baseUrl;if(!o||!n)return t;const s=`${n.startsWith("http")?n:`${window.location.origin}/${n}`}&fmt=json3`;return t.push({source:"youtube",language:o,isAutoGenerated:"asr"===e?.kind,url:s}),i&&e.isTranslatable&&e.languageCode===r&&a!==o&&t.push({source:"youtube",language:a,isAutoGenerated:"asr"===e?.kind,translatedFromLanguage:o,url:`${s}&tlang=${a}`}),t}),[]),_.log("youtube subtitles:",o),o},getVideoData:async function(){const t=qe(),e=He(),o=ze(),{title:n}=o??{},{shortDescription:a,isLive:i,title:r}=e?.videoDetails??{};let s=r?await Be(t,e,r,a):"en";s=ft.includes(s)?s:"en";const l={isLive:!!i,title:r,localizedTitle:n,description:a,detectedLanguage:s};return _.log("youtube video data:",l),console.log("[VOT] Detected language: ",l.detectedLanguage),l},setVideoVolume:function(t){const e=qe();if(e?.setVolume)return e.setVolume(Math.round(100*t)),!0},videoSeek:function(t,e){_.log("videoSeek",e);const o=(qe()?.getProgressState()?.seekableEnd||t.currentTime)-e;t.currentTime=o},isMuted:function(){const t=qe();return!!t?.isMuted&&t.isMuted.call()},isMusic:function(){const t=ze().author,e=ze().title.toUpperCase(),o=e.match(/\w+/g),n=document.body.querySelector("ytd-watch-flexy")?.playerData;return[e,document.URL,t,n?.microformat?.playerMicroformatRenderer.category,n?.title].some((t=>t?.toUpperCase().includes("MUSIC")))||document.body.querySelector("#upload-info #channel-name .badge-style-type-verified-artist")||t&&/(VEVO|Topic|Records|RECORDS|Recordings|AMV)$/.test(t)||t&&/(MUSIC|ROCK|SOUNDS|SONGS)/.test(t.toUpperCase())||o?.length&&["🎵","♫","SONG","SONGS","SOUNDTRACK","LYRIC","LYRICS","AMBIENT","MIX","VEVO","CLIP","KARAOKE","OPENING","COVER","COVERED","VOCAL","INSTRUMENTAL","ORCHESTRAL","DUBSTEP","DJ","DNB","BASS","BEAT","ALBUM","PLAYLIST","DUBSTEP","CHILL","RELAX","CLASSIC","CINEMATIC"].some((t=>o.includes(t)))||["OFFICIAL VIDEO","OFFICIAL AUDIO","FEAT.","FT.","LIVE RADIO","DANCE VER","HIP HOP","ROCK N ROLL","HOUR VER","HOURS VER","INTRO THEME"].some((t=>e.includes(t)))||o?.length&&["OP","ED","MV","OST","NCS","BGM","EDM","GMV","AMV","MMD","MAD"].some((t=>o.includes(t)))}};function We(t){const e=t.startMs+t.durationMs;return t.tokens.reduce(((o,n,a)=>{const i=t.tokens[a+1];let r;o.length>0&&(r=o[o.length-1]);const s=r?.alignRange?.end??0,l=s+n.text.length;if(n.alignRange={start:s,end:l},o.push(n),i){const t=n.startMs+n.durationMs,a=i.startMs?i.startMs-t:e-t;o.push({text:" ",startMs:t,durationMs:a,alignRange:{start:l,end:l+1}})}return o}),[])}function je(t,e){const o=t.text.split(/([\n \t])/).reduce(((t,o)=>{if(o.length){const n=t[t.length-1]??e,a=n?.alignRange?.end??0,i=a+o.length;t.push({text:o,alignRange:{start:a,end:i}})}return t}),[]),n=Math.floor(t.durationMs/o.length),a=t.startMs+t.durationMs;return o.map(((e,i)=>{const r=i===o.length-1,s=t.startMs+n*i;return{...e,startMs:s,durationMs:r?a-s:n}}))}async function Ge(t){const{source:e,isAutoGenerated:o,format:n,url:a}=t,i=(async()=>{try{const t=await et(a,{timeout:5e3});if(["vtt","srt"].includes(n)){return Dt(await t.text(),"json")}return await t.json()}catch(t){return console.error("[VOT] Failed to fetch subtitles.",t),{containsTokens:!1,subtitles:[]}}})();let r=await i;return"youtube"===e&&(r=function(t,e=!1){const o={containsTokens:e,subtitles:[]};if("object"!=typeof t||!Array.isArray(t.events))return console.error("[VOT] Failed to format youtube subtitles",t),o;for(let n=0;nt.events[n+1].tStartMs&&(i=t.events[n+1].tStartMs-a.tStartMs);const r=[];let s=i;for(let t=0;tt.text)).join(" ");l&&o.subtitles.push({text:l,startMs:a.tStartMs,durationMs:i,...e?{tokens:r}:{},speakerId:"0"})}return o}(r,o)),r.subtitles=function(t,e){const o=[];let n;const{source:a,isAutoGenerated:i}=e;for(let e=0;esetTimeout((()=>e(new Error("Timeout"))),5e3)));try{const e=await Promise.race([t.getSubtitles({videoData:{host:o,url:n,videoId:i,duration:r},requestLang:a}),d]);console.log("[VOT] Subtitles response: ",e),e.waiting&&console.error("[VOT] Failed to get yandex subtitles");let s=e.subtitles??[];return s=s.reduce(((t,e)=>(e.language&&!t.find((t=>"yandex"===t.source&&t.language===e.language&&!t.translatedFromLanguage))&&t.push({source:"yandex",language:e.language,url:e.url}),e.translatedLanguage&&t.push({source:"yandex",language:e.translatedLanguage,translatedFromLanguage:e.language,url:e.translatedUrl}),t)),[]),[...s,...l].sort(((t,e)=>{if(t.source!==e.source)return"yandex"===t.source?-1:1;if(t.language!==e.language&&(t.language===J||e.language===J))return t.language===J?-1:1;if("yandex"===t.source){if(t.translatedFromLanguage!==e.translatedFromLanguage)return t.translatedFromLanguage&&e.translatedFromLanguage?t.translatedFromLanguage===a?-1:1:t.language===e.language?t.translatedFromLanguage?1:-1:t.translatedFromLanguage?-1:1;if(!t.translatedFromLanguage)return t.language===a?-1:1}return"yandex"!==t.source&&t.isAutoGenerated!==e.isAutoGenerated?t.isAutoGenerated?1:-1:0}))}catch(t){throw"Timeout"===t.message?console.error("[VOT] Failed to get yandex subtitles. Reason: timeout"):console.error("[VOT] Error in getSubtitles function",t),t}}class Ke{constructor(t,e,o){this.video=t,this.container="youtube"===o.host&&"mobile"!==o.additionalData?e.parentElement:e,this.site=o,this.subtitlesContainer=this.createSubtitlesContainer(),this.position={left:25,top:75},this.dragging={active:!1,offset:{x:0,y:0}},this.subtitles=null,this.lastContent=null,this.highlightWords=!1,this.fontSize=20,this.opacity=.2,this.maxLength=300,this.maxLengthRegexp=/.{1,300}(?:\s|$)/g,this.bindEvents(),this.updateContainerRect()}createSubtitlesContainer(){const t=document.createElement("vot-block");return t.classList.add("vot-subtitles-widget"),this.container.appendChild(t),t}bindEvents(){this.onMouseDownBound=t=>this.onMouseDown(t),this.onMouseUpBound=()=>this.onMouseUp(),this.onMouseMoveBound=t=>this.onMouseMove(t),this.onTimeUpdateBound=this.debounce((()=>this.update()),100),document.addEventListener("mousedown",this.onMouseDownBound),document.addEventListener("mouseup",this.onMouseUpBound),document.addEventListener("mousemove",this.onMouseMoveBound),this.video?.addEventListener("timeupdate",this.onTimeUpdateBound),this.resizeObserver=new ResizeObserver((()=>this.onResize())),this.resizeObserver.observe(this.container)}onMouseDown(t){if(this.subtitlesContainer.contains(t.target)){const e=this.subtitlesContainer.getBoundingClientRect(),o=this.container.getBoundingClientRect();this.dragging={active:!0,offset:{x:t.clientX-e.left,y:t.clientY-e.top},containerOffset:{x:o.left,y:o.top}}}}onMouseUp(){this.dragging.active=!1}onMouseMove(t){if(this.dragging.active){t.preventDefault();const{width:e,height:o}=this.container.getBoundingClientRect(),n=this.dragging.containerOffset;this.position={left:(t.clientX-this.dragging.offset.x-n.x)/e*100,top:(t.clientY-this.dragging.offset.y-n.y)/o*100},this.applySubtitlePosition()}}onResize(){this.updateContainerRect()}updateContainerRect(){this.containerRect=this.container.getBoundingClientRect(),this.applySubtitlePosition()}applySubtitlePosition(){const{width:t,height:e}=this.containerRect,{offsetWidth:o,offsetHeight:n}=this.subtitlesContainer,a=(t-o)/t*100,i=(e-n)/e*100;this.position.left=Math.max(0,Math.min(this.position.left,a)),this.position.top=Math.max(0,Math.min(this.position.top,i)),this.subtitlesContainer.style.left=`${this.position.left}%`,this.subtitlesContainer.style.top=`${this.position.top}%`}setContent(t){t&&this.video?(this.subtitles=t,this.update()):(this.subtitles=null,Te(null,this.subtitlesContainer))}setMaxLength(t){"number"==typeof t&&t&&(this.maxLength=t,this.maxLengthRegexp=new RegExp(`.{1,${t}}(?:\\s|$)`,"g"),this.update())}setHighlightWords(t){this.highlightWords=Boolean(t),this.update()}setFontSize(t){this.fontSize=t;const e=this.subtitlesContainer?.querySelector(".vot-subtitles");e&&(e.style.fontSize=`${this.fontSize}px`)}setOpacity(t){this.opacity=((100-+t)/100).toFixed(2);const e=this.subtitlesContainer?.querySelector(".vot-subtitles");e&&e.style.setProperty("--vot-subtitles-opacity",this.opacity)}update(){if(!this.video||!this.subtitles)return;const t=1e3*this.video.currentTime,e=this.subtitles.subtitles?.findLast((e=>e.startMs`,c);const h=Oe(i,r,s,{onSelectCb:l});return d.append(u.container,c,h.container),{container:d,fromSelect:u,icon:c,toSelect:h}},updateSlider:Le,animateLoader:function(t,e="139, 180, 245"){const o=t.querySelector(".vot-loader-helper"),n=t.querySelector(".vot-loader-main");anime.timeline({...Ce,targets:[o,n],duration:250}).add({"fill-opacity":0,"stroke-width":2,d:"M 12 1.5 C 17.799 1.5 22.5 6.201 22.5 12 C 22.5 17.799 17.799 22.5 12 22.5 C 6.201 22.5 1.5 17.799 1.5 12 C 1.5 6.201 6.201 1.5 12 1.5 Z",duration:0}).add({targets:o,stroke:`rgb(${e})`,"stroke-opacity":0,duration:0},0).add({targets:n,stroke:"#888888","stroke-opacity":.25},0);const a=anime.timeline({targets:o,easing:"easeInOutSine",duration:1e3,autoplay:!1}).add({strokeOpacity:1,duration:0},0).add({strokeDashoffset:[anime.setDashoffset,0]},0);return t=>{a.seek(a.duration*(t/100))}},afterAnimateLoader:function(t,e="139, 180, 245"){const o=t.querySelector(".vot-loader-helper"),n=t.querySelector(".vot-loader-main");anime.timeline({...Ce,targets:n,duration:600}).add({d:"M 9.0596 14.8571 L 9.7667 15.5642 L 10.4738 14.8571 L 17.0071 8.3238 C 17.0457 8.2852 17.0937 8.25 17.2333 8.25 C 17.373 8.25 17.421 8.2852 17.4596 8.3238 C 17.4981 8.3624 17.5333 8.4104 17.5333 8.55 C 17.5333 8.6896 17.4981 8.7376 17.4596 8.7762 L 9.9929 16.2429 C 9.9011 16.3346 9.8397 16.35 9.7667 16.35 C 9.6937 16.35 9.6322 16.3346 9.5404 16.2429 L 6.0738 12.7762 C 6.0352 12.7376 6 12.6897 6 12.55 C 6 12.4103 6.0352 12.3624 6.0738 12.3238 C 6.1124 12.2852 6.1603 12.25 6.3 12.25 C 6.4397 12.25 6.4876 12.2852 6.5262 12.3238 L 9.0596 14.8571 Z",duration:0}).add({strokeDashoffset:[anime.setDashoffset,0],stroke:`rgb(${e})`,"stroke-opacity":1}),setTimeout((()=>{anime.timeline({...Ce,targets:n,duration:600}).add({d:"M12 15.575C11.8667 15.575 11.7417 15.5542 11.625 15.5125C11.5083 15.4708 11.4 15.4 11.3 15.3L7.7 11.7C7.5 11.5 7.40417 11.2667 7.4125 11C7.42083 10.7333 7.51667 10.5 7.7 10.3C7.9 10.1 8.1375 9.99583 8.4125 9.9875C8.6875 9.97917 8.925 10.075 9.125 10.275L11 12.15V5C11 4.71667 11.0958 4.47917 11.2875 4.2875C11.4792 4.09583 11.7167 4 12 4C12.2833 4 12.5208 4.09583 12.7125 4.2875C12.9042 4.47917 13 4.71667 13 5V12.15L14.875 10.275C15.075 10.075 15.3125 9.97917 15.5875 9.9875C15.8625 9.99583 16.1 10.1 16.3 10.3C16.4833 10.5 16.5792 10.7333 16.5875 11C16.5958 11.2667 16.5 11.5 16.3 11.7L12.7 15.3C12.6 15.4 12.4917 15.4708 12.375 15.5125C12.2583 15.5542 12.1333 15.575 12 15.575ZM6 20C5.45 20 4.97917 19.8042 4.5875 19.4125C4.19583 19.0208 4 18.55 4 18V16C4 15.7167 4.09583 15.4792 4.2875 15.2875C4.47917 15.0958 4.71667 15 5 15C5.28333 15 5.52083 15.0958 5.7125 15.2875C5.90417 15.4792 6 15.7167 6 16V18H18V16C18 15.7167 18.0958 15.4792 18.2875 15.2875C18.4792 15.0958 18.7167 15 19 15C19.2833 15 19.5208 15.0958 19.7125 15.2875C19.9042 15.4792 20 15.7167 20 16V18C20 18.55 19.8042 19.0208 19.4125 19.4125C19.0208 19.8042 18.55 20 18 20H6Z",duration:100}).add({targets:o,d:"",duration:200},0).add({targets:n,"stroke-width":"0",stroke:`rgba(${e}), 0)`,"fill-opacity":"1","stroke-dasharray":"0","stroke-dashoffset":"0",duration:0})}),2e3)},createDetails:function(t){const e=document.createElement("vot-block");e.classList.add("vot-details");const o=document.createElement("vot-block");o.append(t);const n=document.createElement("vot-block");return n.classList.add("vot-details-arrow-icon"),Se(Te,n),e.append(o,n),{container:e,header:o,arrowIcon:n}}};const Pe={async translate(t,e){try{const o=await X(`${F.yandex}?${new URLSearchParams({text:t,lang:e})}`,{timeout:3e3});if(o instanceof Error)throw o;const n=await o.json();if(200!==n.code)throw n.message;return n.text[0]}catch(e){return console.error("Error translating text:",e),t}},async detect(t){try{const e=await X(`${D.yandex}?${new URLSearchParams({text:t})}`,{timeout:3e3});if(e instanceof Error)throw e;const o=await e.json();if(200!==o.code)throw o.message;return o.lang??"en"}catch(t){return console.error("Error getting lang from text:",t),"en"}}},Ee={async detect(t){try{const e=await X(D.rustServer,{method:"POST",body:t});if(e instanceof Error)throw e;return await e.text()}catch(t){return console.error("Error getting lang from text:",t),"en"}}},_e={async translate(t,e="auto",o="ru"){try{const n=await X(F.deepl,{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:new URLSearchParams({text:t,source_lang:e,target_lang:o})});if(n instanceof Error)throw n;const a=await n.json();if(200!==a.code)throw a.message;return a.data}catch(e){return console.error("Error translating text:",e),t}}};const $e=Object.keys(F),Ne=Object.keys(D).map((t=>"rustServer"===t?"rust-server":t));async function Re(t,e,o,n){if(!window.location.hostname.includes("m.youtube.com")&&t?.getAudioTrack){const e=t.getAudioTrack(),o=e?.getLanguageInfo();if("und"!==o?.id)return G(o.id.split(".")[0])}const a=e?.captions?.playerCaptionsTracklistRenderer?.captionTracks;if(a?.length){const t=a.find((t=>"asr"===t.kind));if(t&&t.languageCode)return G(t.languageCode)}const i=function(t,e){return`${t} ${e?e.split("\n").filter((t=>!Y.test(t))).join(" "):""}`.slice(0,450).replace(/[^\p{L}\s]+|\s+/gu," ").trim()}(o,n);return P.log(`Detecting language text: ${i}`),async function(t){switch(await q.get("detectService",B)){case"yandex":return await Pe.detect(t);case"rust-server":return await Ee.detect(t);default:return"en"}}(i)}function Be(){return/^m\.youtube\.com$/.test(window.location.hostname)}function De(){return window.location.pathname.startsWith("/shorts/")&&!Be()?document.querySelector("#shorts-player"):document.querySelector("#movie_player")}function Fe(){const t=De();return t?.getPlayerResponse?t?.getPlayerResponse?.call()??null:t?.data?.playerResponse??null}function qe(){const t=De();return t?.getVideoData?t?.getVideoData?.call()??null:t?.data?.playerResponse?.videoDetails??null}const He={isMobile:Be,getPlayer:De,getPlayerResponse:Fe,getPlayerData:qe,getVideoVolume:function(){const t=De();return t?.getVolume?t.getVolume.call()/100:1},getSubtitles:function(){const t=Fe(),e=t?.captions?.playerCaptionsTracklistRenderer;if(!e)return[];let o=e.captionTracks??[];const n=e.translationLanguages??[],a=U.lang,i=n.find((t=>t.languageCode===a)),r=o.find((t=>"asr"===t?.kind))?.languageCode??"en";return o=o.reduce(((t,e)=>{if(!("languageCode"in e))return t;const o=e.languageCode?G(e.languageCode):void 0,n=e?.url||e?.baseUrl;if(!o||!n)return t;const s=`${n.startsWith("http")?n:`${window.location.origin}/${n}`}&fmt=json3`;return t.push({source:"youtube",language:o,isAutoGenerated:"asr"===e?.kind,url:s}),i&&e.isTranslatable&&e.languageCode===r&&a!==o&&t.push({source:"youtube",language:a,isAutoGenerated:"asr"===e?.kind,translatedFromLanguage:o,url:`${s}&tlang=${a}`}),t}),[]),P.log("youtube subtitles:",o),o},getVideoData:async function(){const t=De(),e=Fe(),o=qe(),{title:n}=o??{},{shortDescription:a,isLive:i,title:r}=e?.videoDetails??{};let s=r?await Re(t,e,r,a):"en";s=mt.includes(s)?s:"en";const l={isLive:!!i,title:r,localizedTitle:n,description:a,detectedLanguage:s};return P.log("youtube video data:",l),console.log("[VOT] Detected language: ",l.detectedLanguage),l},setVideoVolume:function(t){const e=De();if(e?.setVolume)return e.setVolume(Math.round(100*t)),!0},videoSeek:function(t,e){P.log("videoSeek",e);const o=(De()?.getProgressState()?.seekableEnd||t.currentTime)-e;t.currentTime=o},isMuted:function(){const t=De();return!!t?.isMuted&&t.isMuted.call()},isMusic:function(){const t=qe().author,e=qe().title.toUpperCase(),o=e.match(/\w+/g),n=document.body.querySelector("ytd-watch-flexy")?.playerData;return[e,document.URL,t,n?.microformat?.playerMicroformatRenderer.category,n?.title].some((t=>t?.toUpperCase().includes("MUSIC")))||document.body.querySelector("#upload-info #channel-name .badge-style-type-verified-artist")||t&&/(VEVO|Topic|Records|RECORDS|Recordings|AMV)$/.test(t)||t&&/(MUSIC|ROCK|SOUNDS|SONGS)/.test(t.toUpperCase())||o?.length&&["🎵","♫","SONG","SONGS","SOUNDTRACK","LYRIC","LYRICS","AMBIENT","MIX","VEVO","CLIP","KARAOKE","OPENING","COVER","COVERED","VOCAL","INSTRUMENTAL","ORCHESTRAL","DUBSTEP","DJ","DNB","BASS","BEAT","ALBUM","PLAYLIST","DUBSTEP","CHILL","RELAX","CLASSIC","CINEMATIC"].some((t=>o.includes(t)))||["OFFICIAL VIDEO","OFFICIAL AUDIO","FEAT.","FT.","LIVE RADIO","DANCE VER","HIP HOP","ROCK N ROLL","HOUR VER","HOURS VER","INTRO THEME"].some((t=>e.includes(t)))||o?.length&&["OP","ED","MV","OST","NCS","BGM","EDM","GMV","AMV","MMD","MAD"].some((t=>o.includes(t)))}};function ze(t){const e=t.startMs+t.durationMs;return t.tokens.reduce(((o,n,a)=>{const i=t.tokens[a+1];let r;o.length>0&&(r=o[o.length-1]);const s=r?.alignRange?.end??0,l=s+n.text.length;if(n.alignRange={start:s,end:l},o.push(n),i){const t=n.startMs+n.durationMs,a=i.startMs?i.startMs-t:e-t;o.push({text:" ",startMs:t,durationMs:a,alignRange:{start:l,end:l+1}})}return o}),[])}function Ue(t,e){const o=t.text.split(/([\n \t])/).reduce(((t,o)=>{if(o.length){const n=t[t.length-1]??e,a=n?.alignRange?.end??0,i=a+o.length;t.push({text:o,alignRange:{start:a,end:i}})}return t}),[]),n=Math.floor(t.durationMs/o.length),a=t.startMs+t.durationMs;return o.map(((e,i)=>{const r=i===o.length-1,s=t.startMs+n*i;return{...e,startMs:s,durationMs:r?a-s:n}}))}async function We(t){const{source:e,isAutoGenerated:o,format:n,url:a}=t,i=(async()=>{try{const t=await X(a,{timeout:5e3});if(["vtt","srt"].includes(n)){return Nt(await t.text(),"json")}return await t.json()}catch(t){return console.error("[VOT] Failed to fetch subtitles.",t),{containsTokens:!1,subtitles:[]}}})();let r=await i;return"youtube"===e&&(r=function(t,e=!1){const o={containsTokens:e,subtitles:[]};if("object"!=typeof t||!Array.isArray(t.events))return console.error("[VOT] Failed to format youtube subtitles",t),o;for(let n=0;nt.events[n+1].tStartMs&&(i=t.events[n+1].tStartMs-a.tStartMs);const r=[];let s=i;for(let t=0;tt.text)).join(" ");l&&o.subtitles.push({text:l,startMs:a.tStartMs,durationMs:i,...e?{tokens:r}:{},speakerId:"0"})}return o}(r,o)),r.subtitles=function(t,e){const o=[];let n;const{source:a,isAutoGenerated:i}=e;for(let e=0;esetTimeout((()=>e(new Error("Timeout"))),5e3)));try{const e=await Promise.race([t.getSubtitles({videoData:{host:o,url:n,videoId:i,duration:r},requestLang:a}),d]);console.log("[VOT] Subtitles response: ",e),e.waiting&&console.error("[VOT] Failed to get yandex subtitles");let s=e.subtitles??[];return s=s.reduce(((t,e)=>(e.language&&!t.find((t=>"yandex"===t.source&&t.language===e.language&&!t.translatedFromLanguage))&&t.push({source:"yandex",language:e.language,url:e.url}),e.translatedLanguage&&t.push({source:"yandex",language:e.translatedLanguage,translatedFromLanguage:e.language,url:e.translatedUrl}),t)),[]),[...s,...l].sort(((t,e)=>{if(t.source!==e.source)return"yandex"===t.source?-1:1;if(t.language!==e.language&&(t.language===j||e.language===j))return t.language===j?-1:1;if("yandex"===t.source){if(t.translatedFromLanguage!==e.translatedFromLanguage)return t.translatedFromLanguage&&e.translatedFromLanguage?t.translatedFromLanguage===a?-1:1:t.language===e.language?t.translatedFromLanguage?1:-1:t.translatedFromLanguage?-1:1;if(!t.translatedFromLanguage)return t.language===a?-1:1}return"yandex"!==t.source&&t.isAutoGenerated!==e.isAutoGenerated?t.isAutoGenerated?1:-1:0}))}catch(t){throw"Timeout"===t.message?console.error("[VOT] Failed to get yandex subtitles. Reason: timeout"):console.error("[VOT] Error in getSubtitles function",t),t}}class Ge{constructor(t,e,o){this.video=t,this.container="youtube"===o.host&&"mobile"!==o.additionalData?e.parentElement:e,this.site=o,this.subtitlesContainer=this.createSubtitlesContainer(),this.position={left:25,top:75},this.dragging={active:!1,offset:{x:0,y:0}},this.subtitles=null,this.lastContent=null,this.highlightWords=!1,this.fontSize=20,this.opacity=.2,this.maxLength=300,this.maxLengthRegexp=/.{1,300}(?:\s|$)/g,this.bindEvents(),this.updateContainerRect()}createSubtitlesContainer(){const t=document.createElement("vot-block");return t.classList.add("vot-subtitles-widget"),this.container.appendChild(t),t}bindEvents(){this.onMouseDownBound=t=>this.onMouseDown(t),this.onMouseUpBound=()=>this.onMouseUp(),this.onMouseMoveBound=t=>this.onMouseMove(t),this.onTimeUpdateBound=this.debounce((()=>this.update()),100),document.addEventListener("mousedown",this.onMouseDownBound),document.addEventListener("mouseup",this.onMouseUpBound),document.addEventListener("mousemove",this.onMouseMoveBound),this.video?.addEventListener("timeupdate",this.onTimeUpdateBound),this.resizeObserver=new ResizeObserver((()=>this.onResize())),this.resizeObserver.observe(this.container)}onMouseDown(t){if(this.subtitlesContainer.contains(t.target)){const e=this.subtitlesContainer.getBoundingClientRect(),o=this.container.getBoundingClientRect();this.dragging={active:!0,offset:{x:t.clientX-e.left,y:t.clientY-e.top},containerOffset:{x:o.left,y:o.top}}}}onMouseUp(){this.dragging.active=!1}onMouseMove(t){if(this.dragging.active){t.preventDefault();const{width:e,height:o}=this.container.getBoundingClientRect(),n=this.dragging.containerOffset;this.position={left:(t.clientX-this.dragging.offset.x-n.x)/e*100,top:(t.clientY-this.dragging.offset.y-n.y)/o*100},this.applySubtitlePosition()}}onResize(){this.updateContainerRect()}updateContainerRect(){this.containerRect=this.container.getBoundingClientRect(),this.applySubtitlePosition()}applySubtitlePosition(){const{width:t,height:e}=this.containerRect,{offsetWidth:o,offsetHeight:n}=this.subtitlesContainer,a=(t-o)/t*100,i=(e-n)/e*100;this.position.left=Math.max(0,Math.min(this.position.left,a)),this.position.top=Math.max(0,Math.min(this.position.top,i)),this.subtitlesContainer.style.left=`${this.position.left}%`,this.subtitlesContainer.style.top=`${this.position.top}%`}setContent(t){t&&this.video?(this.subtitles=t,this.update()):(this.subtitles=null,Se(null,this.subtitlesContainer))}setMaxLength(t){"number"==typeof t&&t&&(this.maxLength=t,this.maxLengthRegexp=new RegExp(`.{1,${t}}(?:\\s|$)`,"g"),this.update())}setHighlightWords(t){this.highlightWords=Boolean(t),this.update()}setFontSize(t){this.fontSize=t;const e=this.subtitlesContainer?.querySelector(".vot-subtitles");e&&(e.style.fontSize=`${this.fontSize}px`)}setOpacity(t){this.opacity=((100-+t)/100).toFixed(2);const e=this.subtitlesContainer?.querySelector(".vot-subtitles");e&&e.style.setProperty("--vot-subtitles-opacity",this.opacity)}update(){if(!this.video||!this.subtitles)return;const t=1e3*this.video.currentTime,e=this.subtitles.subtitles?.findLast((e=>e.startMs${n}`,this.subtitlesContainer))}processTokens(t){if(t.at(-1).alignRange.end<=this.maxLength)return t;let e=[],o=[],n=0;for(const a of t)n+=a.text.length,o.push(a),n>this.maxLength&&(e.push(this.trimChunk(o)),o=[],n=0);o.length&&e.push(this.trimChunk(o));const a=1e3*this.video.currentTime;return e.find((t=>t[0].startMs{const o=this.highlightWords&&(e>t.startMs+t.durationMs/2||e>t.startMs-100&&t.startMs+t.durationMs/2-e<275);return re``,this.subtitlesContainer))}processTokens(t){if(t.at(-1).alignRange.end<=this.maxLength)return t;let e=[],o=[],n=0;for(const a of t)n+=a.text.length,o.push(a),n>this.maxLength&&(e.push(this.trimChunk(o)),o=[],n=0);o.length&&e.push(this.trimChunk(o));const a=1e3*this.video.currentTime;return e.find((t=>t[0].startMs{const o=this.highlightWords&&(e>t.startMs+t.durationMs/2||e>t.startMs-100&&t.startMs+t.durationMs/2-e<275);return ae`${t.text.replace("\\n","
")}
`}))}debounce(t,e){let o;return(...n)=>{clearTimeout(o),o=setTimeout((()=>t.apply(this,n)),e)}}release(){document.removeEventListener("mousedown",this.onMouseDownBound),document.removeEventListener("mouseup",this.onMouseUpBound),document.removeEventListener("mousemove",this.onMouseMoveBound),this.video?.removeEventListener("timeupdate",this.onTimeUpdateBound),this.resizeObserver.disconnect(),this.subtitlesContainer.remove()}}o("./node_modules/requestidlecallback-polyfill/index.js");class Ye{constructor(){this.listeners=new Set}hasListener(t){return this.listeners.has(t)}dispatchToListener(t,...e){try{t(...e)}catch(t){console.error("[VOT]",t)}}addListener(t){if(this.hasListener(t))throw new Error("[VOT] The listener has already been added.");this.listeners.add(t)}removeListener(t){if(!this.hasListener(t))throw new Error("[VOT] The listener has not been added yet.");this.listeners.delete(t)}dispatch(...t){for(const e of Array.from(this.listeners))this.dispatchToListener(e,...t)}}const Ze=new Set(["advertise","promo","sponsor","banner","commercial","preroll","midroll","postroll","ad-container","sponsored"]),Qe=(()=>{const t=Array.from(Ze).join("|");return new RegExp(t,"i")})(),Xe=t=>{const e=[];for(let o=0;o({label:j.get("langs")[t]??t.toUpperCase(),value:t,selected:e===t})))}const ao=t=>t?j.get("VOTChangeHotkeyWithCurrent").replace("{0}",t.replace("Key","")):j.get("VOTCreateTranslationHotkey");class io{translateFromLang="en";translateToLang=J;timer;videoData="";firstPlay=!0;audio=new Audio;audioContext=function(){const t=window.AudioContext||window.webkitAudioContext;return t?new t:void 0}();hls=Z();votClient;videoTranslations=[];videoTranslationTTL=7200;cachedTranslation;downloadTranslationUrl=null;autoRetry;streamPing;votOpts;volumeOnStart;tempOriginalVolume;tempVolume;firstSyncVolume=!0;subtitlesList=[];subtitlesListVideoId=null;dragging;constructor(t,e,o){_.log("[VideoHandler] add video:",t,"container:",e,this),this.video=t,this.container=e,this.site=o,this.init()}async translateVideoImpl(t,e,o,n=null){if(clearTimeout(this.autoRetry),_.log(t,`Translate video (requestLang: ${e}, responseLang: ${o})`),await Ct(this.site,this.video)!==t.videoId)return null;try{const a=await this.votClient.translateVideo({videoData:t,requestLang:e,responseLang:o,translationHelp:n});if(_.log("Translate video result",a),a.translated&&a.remainingTime<1)return _.log("Video translation finished with this data: ",a),a;await this.updateTranslationErrorMsg(a.remainingTime>0?function(t){const e=Math.floor(t/60),o=Math.floor(t%60);return e>=60?j.get("translationTakeMoreThanHour"):1===e||0===e&&o>0?j.get("translationTakeAboutMinute"):11!==e&&e%10==1?j.get("translationTakeApproximatelyMinute2").replace("{0}",e):![12,13,14].includes(e)&&[2,3,4].includes(e%10)?j.get("translationTakeApproximatelyMinute").replace("{0}",e):j.get("translationTakeApproximatelyMinutes").replace("{0}",e)}(a.remainingTime):a.message??j.get("translationTakeFewMinutes"))}catch(t){return console.error("[VOT] Failed to translate video",t),await this.updateTranslationErrorMsg(t.data?.message??t),null}return new Promise((a=>{const i=this.subtitlesList.some((t=>"yandex"===t.source))?2e4:3e4;this.autoRetry=setTimeout((async()=>{const i=await this.translateVideoImpl(t,e,o,n);(!i||i.translated&&i.remainingTime<1)&&a(i)}),i)}))}async translateStreamImpl(t,e,o){if(clearTimeout(this.autoRetry),_.log(t,`Translate stream (requestLang: ${e}, responseLang: ${o})`),await Ct(this.site,this.video)!==t.videoId)return null;try{const n=await this.votClient.translateStream({videoData:t,requestLang:e,responseLang:o});if(_.log("Translate stream result",n),!n.translated&&10===n.interval)return await this.updateTranslationErrorMsg(j.get("translationTakeFewMinutes")),new Promise((a=>{this.autoRetry=setTimeout((async()=>{const n=await this.translateStreamImpl(t,e,o);n&&!n.translated&&10===n.interval||a(n)}),1e3*n.interval)}));if(n.message)throw _.log(`Stream translation aborted! Message: ${n.message}`),new At("streamNoConnectionToServer");if(!n.result)throw _.log("Failed to find translation result! Data:",n),new At("audioNotReceived");return _.log("Stream translated successfully. Running...",n),this.streamPing=setInterval((async()=>{_.log("Ping stream translation",n.pingId),this.votClient.pingStream({pingId:n.pingId})}),1e3*n.interval),n}catch(t){return console.error("[VOT] Failed to translate stream",t),await this.updateTranslationErrorMsg(t.data?.message??t),null}}async autoTranslate(){if(this.firstPlay&&1===this.data.autoTranslate&&this.videoData.videoId){this.firstPlay=!1;try{await this.translateExecutor(this.videoData.videoId)}catch(t){console.error("[VOT]",t),this.transformBtn("error","VOTLocalizedError"===t?.name?t.localizedMessage:t)}}}async init(){if(this.initialized)return;const t={autoTranslate:z.get("autoTranslate",0),dontTranslateLanguage:z.get("dontTranslateLanguage",J),dontTranslateYourLang:z.get("dontTranslateYourLang",1),autoSetVolumeYandexStyle:z.get("autoSetVolumeYandexStyle",1),autoVolume:z.get("autoVolume",D),buttonPos:z.get("buttonPos","default"),showVideoSlider:z.get("showVideoSlider",1),syncVolume:z.get("syncVolume",0),downloadWithName:z.get("downloadWithName",1),subtitlesMaxLength:z.get("subtitlesMaxLength",300),highlightWords:z.get("highlightWords",0),subtitlesFontSize:z.get("subtitlesFontSize",20),subtitlesOpacity:z.get("subtitlesOpacity",20),subtitlesDownloadFormat:z.get("subtitlesDownloadFormat","srt"),responseLanguage:z.get("responseLanguage",J),defaultVolume:z.get("defaultVolume",100),audioProxy:z.get("audioProxy",0),showPiPButton:z.get("showPiPButton",0),translateAPIErrors:z.get("translateAPIErrors",1),translationService:z.get("translationService",B),detectService:z.get("detectService",F),hotkeyButton:z.get("hotkeyButton",null),m3u8ProxyHost:z.get("m3u8ProxyHost",$),translateProxyEnabled:z.get("translateProxyEnabled",0),proxyWorkerHost:z.get("proxyWorkerHost",N),audioBooster:z.get("audioBooster",0),localeHash:z.get("locale-hash",""),localeUpdatedAt:z.get("locale-updated-at",0)};this.data=Object.fromEntries(await Promise.all(Object.entries(t).map((async([t,e])=>[t,await e])))),console.log("[db] data from db: ",this.data),"m3u8-proxy.toil.cc"===this.data.m3u8ProxyHost&&(this.data.m3u8ProxyHost=$,await z.set("m3u8ProxyHost",$),console.log(`[VOT] Old m3u8 proxy host converted to new ${this.data.m3u8ProxyHost} media-proxy`)),"vot.toil.cc"===this.data.proxyWorkerHost&&(this.data.proxyWorkerHost=N,await z.set("proxyWorkerHost",N),console.log(`[VOT] Old proxy worker host converted to new ${this.data.proxyWorkerHost}`)),!this.data.translateProxyEnabled&&GM_info?.scriptHandler&&eo.includes(GM_info.scriptHandler)&&(this.data.translateProxyEnabled=1,await z.set("translateProxyEnabled",1),_.log("translateProxyEnabled",this.data.translateProxyEnabled)),_.log("Extension compatibility passed..."),this.votOpts={headers:this.data.translateProxyEnabled?{}:{"sec-ch-ua":null,"sec-ch-ua-mobile":null,"sec-ch-ua-platform":null},fetchFn:et,hostVOT:R,host:this.data.translateProxyEnabled?this.data.proxyWorkerHost:"api.browser.yandex.ru"},this.votClient=new(this.data.translateProxyEnabled?Et:Pt)(this.votOpts),this.subtitlesWidget=new Ke(this.video,this.container,this.site),this.subtitlesWidget.setMaxLength(this.data.subtitlesMaxLength),this.subtitlesWidget.setHighlightWords(this.data.highlightWords),this.subtitlesWidget.setFontSize(this.data.subtitlesFontSize),this.subtitlesWidget.setOpacity(this.data.subtitlesOpacity),this.initUI(),this.initUIEvents(),this.initAudioBooster(),this.videoData=await this.getVideoData(),this.setSelectMenuValues(this.videoData.detectedLanguage,this.data.responseLanguage??"ru"),this.translateToLang=this.data.responseLanguage??"ru",this.initExtraEvents(),await Promise.all([this.updateSubtitles(),this.autoTranslate()]),this.initialized=!0}transformBtn(t,e){this.votButton.container.dataset.status=t;const o="error"===t&&e.includes(j.get("translationTake"));this.setLoadingBtn(o),this.votButton.label.textContent=e,this.votButton.container.title="error"===t?e:""}setLoadingBtn(t=!1){this.votButton.container.dataset.loading=t}initAudioBooster(){this.audio.crossOrigin="anonymous",this.audioContext&&(this.gainNode=this.audioContext.createGain(),this.gainNode.connect(this.audioContext.destination),this.audioSource=this.audioContext.createMediaElementSource(this.audio),this.audioSource.connect(this.gainNode))}initUI(){this.votButton=Ee.createVOTButton(j.get("translateVideo")),this.votButton.container.style.opacity=0,this.data?.buttonPos&&"default"!==this.data?.buttonPos&&this.container.clientWidth>550?(this.votButton.container.dataset.direction="column",this.votButton.container.dataset.position=this.data?.buttonPos):(this.votButton.container.dataset.direction="row",this.votButton.container.dataset.position="default"),this.container.appendChild(this.votButton.container),this.votButton.pipButton.hidden=!Y()||!this.data?.showPiPButton,this.votButton.separator2.hidden=!Y()||!this.data?.showPiPButton,this.votButton.container.addEventListener("click",(t=>{t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation()})),this.votMenu=Ee.createVOTMenu(j.get("VOTSettings")),this.votMenu.container.dataset.position=this.container.clientWidth&&this.container.clientWidth>550?this.data?.buttonPos:"default",this.container.appendChild(this.votMenu.container),this.votDownloadButton=Ee.createIconButton(se``}))}debounce(t,e){let o;return(...n)=>{clearTimeout(o),o=setTimeout((()=>t.apply(this,n)),e)}}release(){document.removeEventListener("mousedown",this.onMouseDownBound),document.removeEventListener("mouseup",this.onMouseUpBound),document.removeEventListener("mousemove",this.onMouseMoveBound),this.video?.removeEventListener("timeupdate",this.onTimeUpdateBound),this.resizeObserver.disconnect(),this.subtitlesContainer.remove()}}o("./node_modules/requestidlecallback-polyfill/index.js");class Je{constructor(){this.listeners=new Set}hasListener(t){return this.listeners.has(t)}dispatchToListener(t,...e){try{t(...e)}catch(t){console.error("[VOT]",t)}}addListener(t){if(this.hasListener(t))throw new Error("[VOT] The listener has already been added.");this.listeners.add(t)}removeListener(t){if(!this.hasListener(t))throw new Error("[VOT] The listener has not been added yet.");this.listeners.delete(t)}dispatch(...t){for(const e of Array.from(this.listeners))this.dispatchToListener(e,...t)}}const Ke=new Set(["advertise","promo","sponsor","banner","commercial","preroll","midroll","postroll","ad-container","sponsored"]),Ye=(()=>{const t=Array.from(Ke).join("|");return new RegExp(t,"i")})(),Ze=t=>{const e=[];for(let o=0;o({label:U.get("langs")[t]??t.toUpperCase(),value:t,selected:e===t})))}const oo=t=>t?U.get("VOTChangeHotkeyWithCurrent").replace("{0}",t.replace("Key","")):U.get("VOTCreateTranslationHotkey");class no{translateFromLang="en";translateToLang=j;timer;videoData="";firstPlay=!0;audio=new Audio;audioContext=function(){const t=window.AudioContext||window.webkitAudioContext;return t?new t:void 0}();hls=K();votClient;videoTranslations=[];videoTranslationTTL=7200;cachedTranslation;downloadTranslationUrl=null;autoRetry;streamPing;votOpts;volumeOnStart;tempOriginalVolume;tempVolume;firstSyncVolume=!0;subtitlesList=[];subtitlesListVideoId=null;dragging;constructor(t,e,o){P.log("[VideoHandler] add video:",t,"container:",e,this),this.video=t,this.container=e,this.site=o,this.init()}async translateVideoImpl(t,e,o,n=null){if(clearTimeout(this.autoRetry),P.log(t,`Translate video (requestLang: ${e}, responseLang: ${o})`),await Ct(this.site,this.video)!==t.videoId)return null;try{const a=await this.votClient.translateVideo({videoData:t,requestLang:e,responseLang:o,translationHelp:n});if(P.log("Translate video result",a),a.translated&&a.remainingTime<1)return P.log("Video translation finished with this data: ",a),a;await this.updateTranslationErrorMsg(a.remainingTime>0?function(t){const e=Math.floor(t/60),o=Math.floor(t%60);return e>=60?U.get("translationTakeMoreThanHour"):1===e||0===e&&o>0?U.get("translationTakeAboutMinute"):11!==e&&e%10==1?U.get("translationTakeApproximatelyMinute2").replace("{0}",e):![12,13,14].includes(e)&&[2,3,4].includes(e%10)?U.get("translationTakeApproximatelyMinute").replace("{0}",e):U.get("translationTakeApproximatelyMinutes").replace("{0}",e)}(a.remainingTime):a.message??U.get("translationTakeFewMinutes"))}catch(t){return console.error("[VOT] Failed to translate video",t),await this.updateTranslationErrorMsg(t.data?.message??t),null}return new Promise((a=>{const i=this.subtitlesList.some((t=>"yandex"===t.source))?2e4:3e4;this.autoRetry=setTimeout((async()=>{const i=await this.translateVideoImpl(t,e,o,n);(!i||i.translated&&i.remainingTime<1)&&a(i)}),i)}))}async translateStreamImpl(t,e,o){if(clearTimeout(this.autoRetry),P.log(t,`Translate stream (requestLang: ${e}, responseLang: ${o})`),await Ct(this.site,this.video)!==t.videoId)return null;try{const n=await this.votClient.translateStream({videoData:t,requestLang:e,responseLang:o});if(P.log("Translate stream result",n),!n.translated&&10===n.interval)return await this.updateTranslationErrorMsg(U.get("translationTakeFewMinutes")),new Promise((a=>{this.autoRetry=setTimeout((async()=>{const n=await this.translateStreamImpl(t,e,o);n&&!n.translated&&10===n.interval||a(n)}),1e3*n.interval)}));if(n.message)throw P.log(`Stream translation aborted! Message: ${n.message}`),new Lt("streamNoConnectionToServer");if(!n.result)throw P.log("Failed to find translation result! Data:",n),new Lt("audioNotReceived");return P.log("Stream translated successfully. Running...",n),this.streamPing=setInterval((async()=>{P.log("Ping stream translation",n.pingId),this.votClient.pingStream({pingId:n.pingId})}),1e3*n.interval),n}catch(t){return console.error("[VOT] Failed to translate stream",t),await this.updateTranslationErrorMsg(t.data?.message??t),null}}async autoTranslate(){if(this.firstPlay&&1===this.data.autoTranslate&&this.videoData.videoId){this.firstPlay=!1;try{await this.translateExecutor(this.videoData.videoId)}catch(t){console.error("[VOT]",t),this.transformBtn("error","VOTLocalizedError"===t?.name?t.localizedMessage:t)}}}async init(){if(this.initialized)return;const t={autoTranslate:q.get("autoTranslate",0),dontTranslateLanguage:q.get("dontTranslateLanguage",j),dontTranslateYourLang:q.get("dontTranslateYourLang",1),autoSetVolumeYandexStyle:q.get("autoSetVolumeYandexStyle",1),autoVolume:q.get("autoVolume",N),buttonPos:q.get("buttonPos","default"),showVideoSlider:q.get("showVideoSlider",1),syncVolume:q.get("syncVolume",0),downloadWithName:q.get("downloadWithName",1),subtitlesMaxLength:q.get("subtitlesMaxLength",300),highlightWords:q.get("highlightWords",0),subtitlesFontSize:q.get("subtitlesFontSize",20),subtitlesOpacity:q.get("subtitlesOpacity",20),subtitlesDownloadFormat:q.get("subtitlesDownloadFormat","srt"),responseLanguage:q.get("responseLanguage",j),defaultVolume:q.get("defaultVolume",100),audioProxy:q.get("audioProxy",0),bypassMediaCSP:q.get("bypassMediaCSP",Number(!!this.audioContext)),showPiPButton:q.get("showPiPButton",0),translateAPIErrors:q.get("translateAPIErrors",1),translationService:q.get("translationService",R),detectService:q.get("detectService",B),hotkeyButton:q.get("hotkeyButton",null),m3u8ProxyHost:q.get("m3u8ProxyHost",E),translateProxyEnabled:q.get("translateProxyEnabled",0),proxyWorkerHost:q.get("proxyWorkerHost",_),audioBooster:q.get("audioBooster",0),localeHash:q.get("locale-hash",""),localeUpdatedAt:q.get("locale-updated-at",0)};this.data=Object.fromEntries(await Promise.all(Object.entries(t).map((async([t,e])=>[t,await e])))),console.log("[db] data from db: ",this.data),"m3u8-proxy.toil.cc"===this.data.m3u8ProxyHost&&(this.data.m3u8ProxyHost=E,await q.set("m3u8ProxyHost",E),console.log(`[VOT] Old m3u8 proxy host converted to new ${this.data.m3u8ProxyHost} media-proxy`)),"vot.toil.cc"===this.data.proxyWorkerHost&&(this.data.proxyWorkerHost=_,await q.set("proxyWorkerHost",_),console.log(`[VOT] Old proxy worker host converted to new ${this.data.proxyWorkerHost}`)),!this.data.translateProxyEnabled&&GM_info?.scriptHandler&&Xe.includes(GM_info.scriptHandler)&&(this.data.translateProxyEnabled=1,await q.set("translateProxyEnabled",1),P.log("translateProxyEnabled",this.data.translateProxyEnabled)),P.log("Extension compatibility passed..."),this.votOpts={headers:this.data.translateProxyEnabled?{}:{"sec-ch-ua":null,"sec-ch-ua-mobile":null,"sec-ch-ua-platform":null},fetchFn:X,hostVOT:$,host:this.data.translateProxyEnabled?this.data.proxyWorkerHost:"api.browser.yandex.ru"},this.votClient=new(this.data.translateProxyEnabled?It:Ot)(this.votOpts),this.subtitlesWidget=new Ge(this.video,this.container,this.site),this.subtitlesWidget.setMaxLength(this.data.subtitlesMaxLength),this.subtitlesWidget.setHighlightWords(this.data.highlightWords),this.subtitlesWidget.setFontSize(this.data.subtitlesFontSize),this.subtitlesWidget.setOpacity(this.data.subtitlesOpacity),this.initUI(),this.initUIEvents(),this.initAudioBooster(),this.videoData=await this.getVideoData(),this.setSelectMenuValues(this.videoData.detectedLanguage,this.data.responseLanguage??"ru"),this.translateToLang=this.data.responseLanguage??"ru",this.initExtraEvents(),await Promise.all([this.updateSubtitles(),this.autoTranslate()]),this.initialized=!0}transformBtn(t,e){this.votButton.container.dataset.status=t;const o="error"===t&&e.includes(U.get("translationTake"));this.setLoadingBtn(o),this.votButton.label.textContent=e,this.votButton.container.title="error"===t?e:""}setLoadingBtn(t=!1){this.votButton.container.dataset.loading=t}initAudioBooster(){this.audio.crossOrigin="anonymous",this.audioContext&&(this.gainNode=this.audioContext.createGain(),this.gainNode.connect(this.audioContext.destination),this.audioSource=this.audioContext.createMediaElementSource(this.audio),this.audioSource.connect(this.gainNode))}initUI(){this.votButton=Ie.createVOTButton(U.get("translateVideo")),this.votButton.container.style.opacity=0,this.data?.buttonPos&&"default"!==this.data?.buttonPos&&this.container.clientWidth>550?(this.votButton.container.dataset.direction="column",this.votButton.container.dataset.position=this.data?.buttonPos):(this.votButton.container.dataset.direction="row",this.votButton.container.dataset.position="default"),this.container.appendChild(this.votButton.container),this.votButton.pipButton.hidden=!J()||!this.data?.showPiPButton,this.votButton.separator2.hidden=!J()||!this.data?.showPiPButton,this.votButton.container.addEventListener("click",(t=>{t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation()})),this.votMenu=Ie.createVOTMenu(U.get("VOTSettings")),this.votMenu.container.dataset.position=this.container.clientWidth&&this.container.clientWidth>550?this.data?.buttonPos:"default",this.container.appendChild(this.votMenu.container),this.votDownloadButton=Ie.createIconButton(ie` - `),this.votDownloadButton.hidden=!0,this.votMenu.headerContainer.appendChild(this.votDownloadButton),this.votDownloadSubtitlesButton=Ee.createIconButton(se``),this.votDownloadButton.hidden=!0,this.votMenu.headerContainer.appendChild(this.votDownloadButton),this.votDownloadSubtitlesButton=Ie.createIconButton(ie` - `),this.votDownloadSubtitlesButton.hidden=!0,this.votMenu.headerContainer.appendChild(this.votDownloadSubtitlesButton),this.votSettingsButton=Ee.createIconButton(se``),this.votDownloadSubtitlesButton.hidden=!0,this.votMenu.headerContainer.appendChild(this.votDownloadSubtitlesButton),this.votSettingsButton=Ie.createIconButton(ie` - `),this.votMenu.headerContainer.appendChild(this.votSettingsButton),this.votTranslationLanguageSelect=Ee.createVOTLanguageSelect({fromTitle:j.get("langs")[this.video.detectedLanguage],fromDialogTitle:j.get("videoLanguage"),fromItems:no(ft,this.videoData.detectedLanguage),fromOnSelectCB:async t=>{_.log("[fromOnSelectCB] select from language",t.target.dataset.votValue),this.videoData=await this.getVideoData(),this.setSelectMenuValues(t.target.dataset.votValue,this.videoData.responseLanguage)},toTitle:j.get("langs")[this.video.responseLanguage],toDialogTitle:j.get("translationLanguage"),toItems:no(yt,this.videoData.responseLanguage),toOnSelectCB:async t=>{const e=t.target.dataset.votValue;_.log("[toOnSelectCB] select to language",e),this.data.responseLanguage=this.translateToLang=e,await z.set("responseLanguage",this.data.responseLanguage),_.log("Response Language value changed. New value: ",this.data.responseLanguage),this.videoData=await this.getVideoData(),this.setSelectMenuValues(this.videoData.detectedLanguage,this.data.responseLanguage)}}),this.votMenu.bodyContainer.appendChild(this.votTranslationLanguageSelect.container),this.votSubtitlesSelect=Ee.createVOTSelect(j.get("VOTSubtitlesDisabled"),j.get("VOTSubtitles"),[{label:j.get("VOTSubtitlesDisabled"),value:"disabled",selected:!0,disabled:!1}],{onSelectCb:async t=>{await this.changeSubtitlesLang(t.target.dataset.votValue)},labelElement:Ee.createVOTSelectLabel(j.get("VOTSubtitles"))}),this.votMenu.bodyContainer.appendChild(this.votSubtitlesSelect.container),this.votVideoVolumeSlider=Ee.createSlider(re`${j.get("VOTVolume")}: - ${100*this.getVideoVolume()}%`,100*this.getVideoVolume()),this.votVideoVolumeSlider.container.hidden=1!==this.data.showVideoSlider||"success"!==this.votButton.container.dataset.status,this.votMenu.bodyContainer.appendChild(this.votVideoVolumeSlider.container),this.votVideoTranslationVolumeSlider=Ee.createSlider(re`${j.get("VOTVolumeTranslation")}: - ${this.data?.defaultVolume??100}%`,this.data?.defaultVolume??100,0,this.data.audioBooster?900:100),this.votVideoTranslationVolumeSlider.container.hidden="success"!==this.votButton.container.dataset.status,this.votMenu.bodyContainer.appendChild(this.votVideoTranslationVolumeSlider.container),this.votMenu.container.addEventListener("click",(t=>{t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation()})),this.votSettingsDialog=Ee.createDialog(j.get("VOTSettings")),document.documentElement.appendChild(this.votSettingsDialog.container),this.votTranslationHeader=Ee.createHeader(j.get("translationSettings")),this.votSettingsDialog.bodyContainer.appendChild(this.votTranslationHeader),this.votAutoTranslateCheckbox=Ee.createCheckbox(j.get("VOTAutoTranslate"),this.data?.autoTranslate??!1),this.votSettingsDialog.bodyContainer.appendChild(this.votAutoTranslateCheckbox.container),this.votDontTranslateYourLangSelect=Ee.createVOTSelect(j.get("langs")[this.data.dontTranslateLanguage],j.get("VOTDontTranslateYourLang"),no(ft,this.data.dontTranslateLanguage),{onSelectCb:async t=>{this.data.dontTranslateLanguage=t.target.dataset.votValue,await z.set("dontTranslateLanguage",this.data.dontTranslateLanguage)},labelElement:Ee.createCheckbox(j.get("VOTDontTranslateYourLang"),this.data?.dontTranslateYourLang??!0).container}),this.votSettingsDialog.bodyContainer.appendChild(this.votDontTranslateYourLangSelect.container),this.changehotkeyButton=Ee.createOutlinedButton(ao(this.data.hotkeyButton)),this.votSettingsDialog.bodyContainer.appendChild(this.changehotkeyButton),this.votAutoSetVolumeCheckbox=Ee.createCheckbox(`${j.get("VOTAutoSetVolume")}`,this.data?.autoSetVolumeYandexStyle??!0),this.votSettingsDialog.bodyContainer.appendChild(this.votAutoSetVolumeCheckbox.container),this.votAutoSetVolumeSlider=Ee.createSlider(re`${Math.round(100*(this.data?.autoVolume??D))}%`,Math.round(100*(this.data?.autoVolume??D)),0,100),this.votSettingsDialog.bodyContainer.appendChild(this.votAutoSetVolumeSlider.container),this.votShowVideoSliderCheckbox=Ee.createCheckbox(j.get("VOTShowVideoSlider"),this.data?.showVideoSlider??!1),this.votSettingsDialog.bodyContainer.appendChild(this.votShowVideoSliderCheckbox.container),this.votAudioBoosterCheckbox=Ee.createCheckbox(j.get("VOTAudioBooster"),this.data?.audioBooster??!1),this.votAudioBoosterCheckbox.container.hidden=!this.audioContext,this.votSettingsDialog.bodyContainer.appendChild(this.votAudioBoosterCheckbox.container),this.votSyncVolumeCheckbox=Ee.createCheckbox(j.get("VOTSyncVolume"),this.data?.syncVolume??!1),this.votSettingsDialog.bodyContainer.appendChild(this.votSyncVolumeCheckbox.container),this.votDownloadWithNameCheckbox=Ee.createCheckbox(j.get("VOTDownloadWithName"),this.data?.downloadWithName??!1),this.votSettingsDialog.bodyContainer.appendChild(this.votDownloadWithNameCheckbox.container),this.votTranslationServiceSelect=Ee.createVOTSelect(this.data.translationService.toUpperCase(),j.get("VOTTranslationService"),no(Re,this.data.translationService),{onSelectCb:async t=>{this.data.translationService=t.target.dataset.votValue,await z.set("translationService",this.data.translationService)},labelElement:Ee.createCheckbox(j.get("VOTTranslateAPIErrors"),this.data.translateAPIErrors??!0).container}),this.votTranslationServiceSelect.container.hidden="ru"===j.lang,this.votSettingsDialog.bodyContainer.appendChild(this.votTranslationServiceSelect.container),this.votDetectServiceSelect=Ee.createVOTSelect(this.data.detectService.toUpperCase(),j.get("VOTDetectService"),no(De,this.data.detectService),{onSelectCb:async t=>{this.data.detectService=t.target.dataset.votValue,await z.set("detectService",this.data.detectService)},labelElement:Ee.createVOTSelectLabel(j.get("VOTDetectService"))}),this.votSettingsDialog.bodyContainer.appendChild(this.votDetectServiceSelect.container),this.votSubtitlesHeader=Ee.createHeader(j.get("subtitlesSettings")),this.votSettingsDialog.bodyContainer.appendChild(this.votSubtitlesHeader),this.votSubtitlesDetails=Ee.createDetails(j.get("VOTSubtitlesDesign")),this.votSettingsDialog.bodyContainer.appendChild(this.votSubtitlesDetails.container),this.votProxyHeader=Ee.createHeader(j.get("proxySettings")),this.votSettingsDialog.bodyContainer.appendChild(this.votProxyHeader),this.votM3u8ProxyHostTextfield=Ee.createTextfield(j.get("VOTM3u8ProxyHost"),this.data?.m3u8ProxyHost,$),this.votSettingsDialog.bodyContainer.appendChild(this.votM3u8ProxyHostTextfield.container),this.votProxyWorkerHostTextfield=Ee.createTextfield(j.get("VOTProxyWorkerHost"),this.data?.proxyWorkerHost,N),this.votSettingsDialog.bodyContainer.appendChild(this.votProxyWorkerHostTextfield.container),this.votAudioProxyCheckbox=Ee.createCheckbox(j.get("VOTAudioProxy"),this.data?.audioProxy??!1),this.votSettingsDialog.bodyContainer.appendChild(this.votAudioProxyCheckbox.container),this.votAboutHeader=Ee.createHeader(j.get("about")),this.votSettingsDialog.bodyContainer.appendChild(this.votAboutHeader),this.votLanguageSelect=Ee.createVOTSelect(j.get("langs")[z.syncGet("locale-lang-override","auto")],j.get("VOTMenuLanguage"),no(W,z.syncGet("locale-lang-override","auto")),{onSelectCb:async t=>{await z.set("locale-lang-override",t.target.dataset.votValue)},labelElement:Ee.createVOTSelectLabel(j.get("VOTMenuLanguage"))}),this.votSettingsDialog.bodyContainer.appendChild(this.votLanguageSelect.container),this.votShowPiPButtonCheckbox=Ee.createCheckbox(j.get("VOTShowPiPButton"),this.data?.showPiPButton??!1),this.votShowPiPButtonCheckbox.container.hidden=!Y(),this.votSettingsDialog.bodyContainer.appendChild(this.votShowPiPButtonCheckbox.container),this.votVersionInfo=Ee.createInformation(`${j.get("VOTVersion")}:`,GM_info.script.version),this.votSettingsDialog.bodyContainer.appendChild(this.votVersionInfo.container),this.votAuthorsInfo=Ee.createInformation(`${j.get("VOTAuthors")}:`,GM_info.script.author),this.votSettingsDialog.bodyContainer.appendChild(this.votAuthorsInfo.container),this.votLoaderInfo=Ee.createInformation(`${j.get("VOTLoader")}:`,`${GM_info.scriptHandler} v${GM_info.version}`),this.votSettingsDialog.bodyContainer.appendChild(this.votLoaderInfo.container),this.votBrowserInfo=Ee.createInformation(`${j.get("VOTBrowser")}:`,`${to.browser.name} ${to.browser.version} (${to.os.name} ${to.os.version})`),this.votSettingsDialog.bodyContainer.appendChild(this.votBrowserInfo.container),this.votLocaleInfo=Ee.createInformation(`${j.get("VOTLocaleHash")}:`,re`${this.data.localeHash}
(${j.get("VOTUpdatedAt")} - ${new Date(1e3*this.data.localeUpdatedAt).toLocaleString()})`),this.votSettingsDialog.bodyContainer.appendChild(this.votLocaleInfo.container),this.votUpdateLocaleFilesButton=Ee.createOutlinedButton(j.get("VOTUpdateLocaleFiles")),this.votSettingsDialog.bodyContainer.appendChild(this.votUpdateLocaleFilesButton),this.votResetSettingsButton=Ee.createButton(j.get("resetSettings")),this.votSettingsDialog.bodyContainer.appendChild(this.votResetSettingsButton)}async handleTranslationBtnClick(){if(this.audio.src)return _.log("[click translationBtn] audio.src is not empty"),void this.stopTranslate();if(this.hls.url)return _.log("[click translationBtn] hls is not empty"),void this.stopTranslate();try{if(_.log("[click translationBtn] trying execute translation"),!this.videoData.videoId)throw new At("VOTNoVideoIDFound");"vk"===this.site.host&&"clips"===this.site.additionalData&&(this.videoData=await this.getVideoData()),await this.translateExecutor(this.videoData.videoId)}catch(t){console.error("[VOT]",t),"VOTLocalizedError"===t?.name?this.transformBtn("error",t.localizedMessage):this.transformBtn("error",t?.message)}}initUIEvents(){this.votButton.translateButton.addEventListener("click",(async()=>{await this.handleTranslationBtnClick()})),this.votButton.pipButton.addEventListener("click",(()=>{(async()=>{this.video!==document.pictureInPictureElement?await this.video.requestPictureInPicture():await document.exitPictureInPicture()})()})),this.votButton.menuButton.addEventListener("click",(()=>{this.votMenu.container.hidden=!this.votMenu.container.hidden})),this.votButton.container.addEventListener("mousedown",(()=>{this.dragging=!0})),this.container.addEventListener("mouseup",(()=>{this.dragging=!1})),this.container.addEventListener("mousemove",(async t=>{if(this.dragging){t.preventDefault();const e=t.clientX/this.container.clientWidth*100,o=this.container.clientWidth>550,n=e<=44?"left":e>=66?"right":"default";this.data.buttonPos=o?n:"default",this.votButton.container.dataset.direction="default"===this.data.buttonPos?"row":"column",this.votButton.container.dataset.position=this.data.buttonPos,this.votMenu.container.dataset.position=this.data.buttonPos,o&&await z.set("buttonPos",this.data.buttonPos)}})),this.votDownloadButton.addEventListener("click",(async()=>{if(!this.downloadTranslationUrl)return;if(!this.data.downloadWithName)return window.open(this.downloadTranslationUrl,"_blank").focus();const t=document.querySelector("#vot-loader-download"),e=getComputedStyle(this.votMenu.container).getPropertyValue("--vot-primary-rgb"),o=Ee.animateLoader(t,e),n=await et(this.downloadTranslationUrl),a=n.body.getReader(),i=+n.headers.get("Content-Length");let r=0;const s=[];for(;;){const{done:t,value:e}=await a.read();if(t)break;s.push(e),r+=e.length,o(Math.round(r/i*100))}Ee.afterAnimateLoader(t,e);X(new Blob(s),`${tt(this.videoData.title??this.videoData.videoId)}.mp3`)})),this.votDownloadSubtitlesButton.addEventListener("click",(async()=>{const t=this.data.subtitlesDownloadFormat,e=Dt(this.yandexSubtitles,t);X(new Blob(["json"===t?JSON.stringify(e):e],{type:"text/plain"}),`${this.data.downloadWithName?tt(this.videoData.title??this.videoData.videoId):`subtitles_${this.videoData.videoId}`}.${t}`)})),this.votSettingsButton.addEventListener("click",(()=>{this.votSettingsDialog.container.hidden=!this.votSettingsDialog.container.hidden,(document.fullscreenElement||document.webkitFullscreenElement)&&(document.webkitExitFullscreen&&document.webkitExitFullscreen(),document.exitFullscreen&&document.exitFullscreen())})),this.votVideoVolumeSlider.input.addEventListener("input",(t=>{const e=Number(t.target.value);this.votVideoVolumeSlider.label.querySelector("strong").textContent=`${e}%`,this.setVideoVolume(e/100),this.data.syncVolume&&this.syncVolumeWrapper("video",e)})),this.votVideoTranslationVolumeSlider.input.addEventListener("input",(t=>{(async()=>{this.data.defaultVolume=Number(t.target.value),await z.set("defaultVolume",this.data.defaultVolume),this.votVideoTranslationVolumeSlider.label.querySelector("strong").textContent=`${this.data.defaultVolume}%`,this.setAudioVolume(this.data.defaultVolume/100),this.data.syncVolume&&(this.syncVolumeWrapper("translation",this.data.defaultVolume),["youtube","googledrive"].includes(this.site.host)&&"mobile"!==this.site.additionalData&&this.setVideoVolume(this.tempOriginalVolume/100))})()}));{this.votAutoTranslateCheckbox.input.addEventListener("change",(t=>{(async()=>{this.data.autoTranslate=Number(t.target.checked),await Promise.all([z.set("autoTranslate",this.data.autoTranslate),this.autoTranslate()]),_.log("autoTranslate value changed. New value: ",this.data.autoTranslate)})()})),this.votDontTranslateYourLangSelect.labelElement.addEventListener("change",(t=>{(async()=>{this.data.dontTranslateYourLang=Number(t.target.checked),await z.set("dontTranslateYourLang",this.data.dontTranslateYourLang),_.log("dontTranslateYourLang value changed. New value: ",this.data.dontTranslateYourLang)})()}));const t=async t=>{await z.set("hotkeyButton",t),this.data.hotkeyButton=t,this.changehotkeyButton.textContent=ao(t)},e=o=>{const n="Escape"===o.code?null:o.code;t(n),document.removeEventListener("keydown",e)};this.changehotkeyButton.addEventListener("click",(()=>{this.changehotkeyButton.textContent=j.get("VOTPressNewHotkey"),document.addEventListener("keydown",e)})),this.votAutoSetVolumeCheckbox.input.addEventListener("change",(t=>{(async()=>{this.data.autoSetVolumeYandexStyle=Number(t.target.checked),await z.set("autoSetVolumeYandexStyle",this.data.autoSetVolumeYandexStyle),_.log("autoSetVolumeYandexStyle value changed. New value: ",this.data.autoSetVolumeYandexStyle)})()})),this.votAutoSetVolumeSlider.input.addEventListener("input",(t=>{(async()=>{const e=Number(t.target.value);this.data.autoVolume=(e/100).toFixed(2),await z.set("autoVolume",this.data.autoVolume),this.votAutoSetVolumeSlider.label.querySelector("strong").textContent=`${e}%`})()})),this.votShowVideoSliderCheckbox.input.addEventListener("change",(t=>{(async()=>{this.data.showVideoSlider=Number(t.target.checked),await z.set("showVideoSlider",this.data.showVideoSlider),_.log("showVideoSlider value changed. New value: ",this.data.showVideoSlider),this.votVideoVolumeSlider.container.hidden=1!==this.data.showVideoSlider||"success"!==this.votButton.container.dataset.status})()})),this.votAudioBoosterCheckbox.input.addEventListener("change",(t=>{(async()=>{this.data.audioBooster=Number(t.target.checked),await z.set("audioBooster",this.data.audioBooster),_.log("audioBooster value changed. New value: ",this.data.audioBooster);const e=this.votVideoTranslationVolumeSlider.input.value;this.votVideoTranslationVolumeSlider.input.max=this.data.audioBooster?900:100,this.data.audioBooster||(this.votVideoTranslationVolumeSlider.input.value=e>100?100:e,this.votVideoTranslationVolumeSlider.input.dispatchEvent(new Event("input")))})()})),this.votSyncVolumeCheckbox.input.addEventListener("change",(t=>{(async()=>{this.data.syncVolume=Number(t.target.checked),await z.set("syncVolume",this.data.syncVolume),_.log("syncVolume value changed. New value: ",this.data.syncVolume)})()})),this.votDownloadWithNameCheckbox.input.addEventListener("change",(t=>{(async()=>{this.data.downloadWithName=Number(t.target.checked),await z.set("downloadWithName",this.data.downloadWithName),_.log("downloadWithName value changed. New value: ",this.data.downloadWithName)})()})),this.votTranslationServiceSelect.labelElement.addEventListener("change",(t=>{(async()=>{this.data.translateAPIErrors=Number(t.target.checked),await z.set("translateAPIErrors",this.data.translateAPIErrors),_.log("translateAPIErrors value changed. New value: ",this.data.translateAPIErrors)})()})),this.votSubtitlesDetails.container.addEventListener("click",(()=>{this.votSubtitlesDialog=Ee.createDialog(j.get("VOTSubtitlesDesign")),this.votSubtitlesDialog.container.classList.add("vot-dialog-temp"),this.votSubtitlesDialog.container.hidden=!1,this.votSubtitlesDialog.backdrop.onclick=this.votSubtitlesDialog.closeButton.onclick=()=>{this.votSubtitlesDialog.container.remove()},this.votSubtitlesHighlightWordsCheckbox=Ee.createCheckbox(j.get("VOTHighlightWords"),this.data?.highlightWords??!1),this.votSubtitlesDialog.bodyContainer.appendChild(this.votSubtitlesHighlightWordsCheckbox.container),this.votSubtitlesDownloadFormatSelect=Ee.createVOTSelect(this.data.subtitlesDownloadFormat.toUpperCase(),j.get("VOTSubtitlesDownloadFormat"),no(wt,this.data.subtitlesDownloadFormat),{onSelectCb:async t=>{this.data.subtitlesDownloadFormat=t.target.dataset.votValue,await z.set("subtitlesDownloadFormat",this.data.subtitlesDownloadFormat)},labelElement:Ee.createVOTSelectLabel(j.get("VOTSubtitlesDownloadFormat"))}),this.votSubtitlesDialog.bodyContainer.appendChild(this.votSubtitlesDownloadFormatSelect.container),this.votSubtitlesMaxLengthSlider=Ee.createSlider(re`${j.get("VOTSubtitlesMaxLength")}: - ${this.data?.subtitlesMaxLength??300}`,this.data?.subtitlesMaxLength??300,50,300),this.votSubtitlesDialog.bodyContainer.appendChild(this.votSubtitlesMaxLengthSlider.container),this.votSubtitlesFontSizeSlider=Ee.createSlider(re`${j.get("VOTSubtitlesFontSize")}: - ${this.data?.subtitlesFontSize??20}`,this.data?.subtitlesFontSize??20,8,50),this.votSubtitlesDialog.bodyContainer.appendChild(this.votSubtitlesFontSizeSlider.container),this.votSubtitlesOpacitySlider=Ee.createSlider(re`${j.get("VOTSubtitlesOpacity")}: - ${this.data?.subtitlesOpacity??20}`,this.data?.subtitlesOpacity??20,0,100),this.votSubtitlesDialog.bodyContainer.appendChild(this.votSubtitlesOpacitySlider.container),this.votSubtitlesHighlightWordsCheckbox.input.addEventListener("change",(t=>{(async()=>{this.data.highlightWords=Number(t.target.checked),await z.set("highlightWords",this.data.highlightWords),_.log("highlightWords value changed. New value: ",this.data.highlightWords),this.subtitlesWidget.setHighlightWords(this.data.highlightWords)})()})),this.votSubtitlesMaxLengthSlider.input.addEventListener("input",(t=>{(async()=>{this.data.subtitlesMaxLength=Number(t.target.value),await z.set("subtitlesMaxLength",this.data.subtitlesMaxLength),this.votSubtitlesMaxLengthSlider.label.querySelector("strong").textContent=`${this.data.subtitlesMaxLength}`,this.subtitlesWidget.setMaxLength(this.data.subtitlesMaxLength)})()})),this.votSubtitlesFontSizeSlider.input.addEventListener("input",(t=>{(async()=>{this.data.subtitlesFontSize=Number(t.target.value),await z.set("subtitlesFontSize",this.data.subtitlesFontSize),this.votSubtitlesFontSizeSlider.label.querySelector("strong").textContent=`${this.data.subtitlesFontSize}`,this.subtitlesWidget.setFontSize(this.data.subtitlesFontSize)})()})),this.votSubtitlesOpacitySlider.input.addEventListener("input",(t=>{(async()=>{this.data.subtitlesOpacity=Number(t.target.value),await z.set("subtitlesOpacity",this.data.subtitlesOpacity),this.votSubtitlesOpacitySlider.label.querySelector("strong").textContent=`${this.data.subtitlesOpacity}`,this.subtitlesWidget.setOpacity(this.data.subtitlesOpacity)})()})),document.documentElement.appendChild(this.votSubtitlesDialog.container)})),this.votShowPiPButtonCheckbox.input.addEventListener("change",(t=>{(async()=>{this.data.showPiPButton=Number(t.target.checked),await z.set("showPiPButton",this.data.showPiPButton),_.log("showPiPButton value changed. New value: ",this.data.showPiPButton),this.votButton.pipButton.hidden=!Y()||!this.data.showPiPButton,this.votButton.separator2.hidden=!Y()||!this.data.showPiPButton})()})),this.votM3u8ProxyHostTextfield.input.addEventListener("change",(t=>{(async()=>{this.data.m3u8ProxyHost=t.target.value||$,await z.set("m3u8ProxyHost",this.data.m3u8ProxyHost),_.log("m3u8ProxyHost value changed. New value: ",this.data.m3u8ProxyHost)})()})),this.votProxyWorkerHostTextfield.input.addEventListener("change",(t=>{(async()=>{this.data.proxyWorkerHost=t.target.value||N,await z.set("proxyWorkerHost",this.data.proxyWorkerHost),_.log("proxyWorkerHost value changed. New value: ",this.data.proxyWorkerHost),this.data.translateProxyEnabled&&(this.votClient.host=this.data.proxyWorkerHost)})()})),this.votAudioProxyCheckbox.input.addEventListener("change",(t=>{(async()=>{this.data.audioProxy=Number(t.target.checked),await z.set("audioProxy",this.data.audioProxy),_.log("audioProxy value changed. New value: ",this.data.audioProxy)})()})),this.votUpdateLocaleFilesButton.addEventListener("click",(()=>{(async()=>{await z.set("locale-hash",""),await j.update(!0),window.location.reload()})()})),this.votResetSettingsButton.addEventListener("click",(()=>{(async()=>{j.reset();const t=await z.list();for(let e=0;e{this.extraEvents.push({element:t,event:e,handler:o}),t.addEventListener(e,o)},e=(e,o,n)=>{for(const a of o)t(e,a,n)};if(this.resizeObserver=new ResizeObserver((t=>{for(let e=0;e550;this.votButton.container.dataset.position=this.votMenu.container.dataset.position=e?this.data?.buttonPos:"default",this.votButton.container.dataset.direction=this.data?.buttonPos&&"default"!==this.data?.buttonPos&&e?"column":"row"})),this.resizeObserver.observe(this.video),this.votMenu.container.setAttribute("style",`--vot-container-height: ${this.video.getBoundingClientRect().height}px`),["youtube","googledrive"].includes(this.site.host)&&"mobile"!==this.site.additionalData){this.syncVolumeObserver=new MutationObserver((t=>{if(this.audio.src&&this.data.syncVolume)for(let e=0;e{const e=t.target,o=this.votButton.container,n=this.votMenu.container,a=this.container,i=this.votSettingsDialog.container,r=document.querySelector(".vot-dialog-temp"),s=o.contains(e),l=n.contains(e),d=a.contains(e),u=i.contains(e),c=r?.contains(e)??!1;_.log(`[document click] ${s} ${l} ${d} ${u} ${c}`),s||l||u||c||(d||this.logout(0),this.votMenu.container.hidden=!0)})),document.addEventListener("keydown",(async t=>{const e=t.code,o=document.activeElement;["input","textarea"].includes(o.tagName.toLowerCase())||o.isContentEditable||e!==this.data.hotkeyButton||await this.handleTranslationBtnClick()}));let o=this.site.eventSelector?document.querySelector(this.site.eventSelector):this.container;o&&e(o,["mousemove","mouseout"],this.resetTimer),t(this.votButton.container,"mousemove",this.changeOpacityOnEvent),t(this.votMenu.container,"mousemove",this.changeOpacityOnEvent),e(document,["touchstart","touchmove","touchend"],this.changeOpacityOnEvent),t(this.votButton.container,"mousedown",(t=>{t.stopImmediatePropagation()})),t(this.votMenu.container,"mousedown",(t=>{t.stopImmediatePropagation()})),"youtube"===this.site.host&&(this.container.draggable=!1),"googledrive"===this.site.host&&(this.container.style.height="100%"),t(this.video,"canplay",(async()=>{"rutube"===this.site.host&&this.video.src||await this.setCanPlay()})),t(this.video,"emptied",(async()=>{this.video.src&&await Ct(this.site,this.video)===this.videoData.videoId||(_.log("lipsync mode is emptied"),this.videoData="",this.stopTranslation())})),["rutube","ok"].includes(this.site.host)||t(this.video,"volumechange",(()=>{this.syncVideoVolumeSlider()})),"youtube"!==this.site.host||this.site.additionalData||t(document,"yt-page-data-updated",(async()=>{_.log("yt-page-data-updated"),window.location.pathname.includes("/shorts/")&&await this.setCanPlay()}))}async setCanPlay(){await Ct(this.site,this.video)!==this.videoData.videoId&&(await this.handleSrcChanged(),await this.autoTranslate(),_.log("lipsync mode is canplay"))}logout(t){this.votMenu.container.hidden&&(this.votButton.container.style.opacity=t)}resetTimer=()=>{clearTimeout(this.timer),this.logout(1),this.timer=setTimeout((()=>{this.logout(0)}),1e3)};changeOpacityOnEvent=t=>{clearTimeout(this.timer),this.logout(1),t.stopPropagation()};async changeSubtitlesLang(t){if(_.log("[onchange] subtitles",t),this.votSubtitlesSelect.setSelected(t),"disabled"===t)this.votSubtitlesSelect.setTitle(j.get("VOTSubtitlesDisabled")),this.subtitlesWidget.setContent(null),this.votDownloadSubtitlesButton.hidden=!0,this.yandexSubtitles=null;else{const e=this.subtitlesList.at(parseInt(t));if(1===this.data.audioProxy&&e.url.startsWith("https://brosubs.s3-private.mds.yandex.net/vtrans/")){const t=e.url.replace("https://brosubs.s3-private.mds.yandex.net/vtrans/","");e.url=`https://${this.data.proxyWorkerHost}/video-subtitles/subtitles-proxy/${t}`,console.log(`[VOT] Subs proxied via ${e.url}`)}this.yandexSubtitles=await Ge(e),this.subtitlesWidget.setContent(this.yandexSubtitles),this.votDownloadSubtitlesButton.hidden=!1}}async updateSubtitlesLangSelect(){const t=[{label:j.get("VOTSubtitlesDisabled"),value:"disabled",selected:!0,disabled:!1},...this.subtitlesList.map(((t,e)=>({label:(j.get("langs")[t.language]??t.language.toUpperCase())+(t.translatedFromLanguage?` ${j.get("VOTTranslatedFrom")} ${j.get("langs")[t.translatedFromLanguage]??t.translatedFromLanguage.toUpperCase()}`:"")+("yandex"!==t.source?`, ${window.location.hostname}`:"")+(t.isAutoGenerated?` (${j.get("VOTAutogenerated")})`:""),value:e,selected:!1,disabled:!1})))];this.votSubtitlesSelect.updateItems(t),await this.changeSubtitlesLang(t[0].value)}async updateSubtitles(){if(await this.changeSubtitlesLang("disabled"),!this.videoData.videoId)return console.error(`[VOT] ${j.getDefault("VOTNoVideoIDFound")}`),this.subtitlesList=[],this.subtitlesListVideoId=null,this.votButton.container.hidden=!0,void await this.updateSubtitlesLangSelect();if(this.votButton.container.hidden=!1,this.subtitlesListVideoId!==this.videoData.videoId){try{this.subtitlesList=await Je(this.votClient,this.videoData)}catch(t){_.log("Error with yandex server, try auto-fix...",t),this.votOpts={fetchFn:et,hostVOT:R,host:this.data.proxyWorkerHost},this.votClient=new Et(this.votOpts),this.subtitlesList=await Je(this.votClient,this.videoData),await z.set("translateProxyEnabled",1)}this.subtitlesList?this.subtitlesListVideoId=this.videoData.videoId:await this.changeSubtitlesLang("disabled"),await this.updateSubtitlesLangSelect()}}getVideoVolume(){let t=this.video?.volume;return["youtube","googledrive"].includes(this.site.host)&&(t=Ue.getVideoVolume()??t),t}setVideoVolume(t){if(["youtube","googledrive"].includes(this.site.host)){if(Ue.setVideoVolume(t))return}this.video.volume=t}getAudioVolume(){return this.gainNode?this.gainNode.gain.value:this.audio.volume}setAudioVolume(t){return this.gainNode?this.gainNode.gain.value=t:this.audio.volume=t}isMuted(){return["youtube","googledrive"].includes(this.site.host)?Ue.isMuted():this.video?.muted}syncVideoVolumeSlider(){const t=this.isMuted()?0:100*this.getVideoVolume(),e=Math.round(t);this.votVideoVolumeSlider.input.value=e,this.votVideoVolumeSlider.label.querySelector("strong").textContent=`${e}%`,Ee.updateSlider(this.votVideoVolumeSlider.input),1===this.data.syncVolume&&(this.tempOriginalVolume=Number(e))}setSelectMenuValues(t,e){this.votTranslationLanguageSelect.fromSelect.setTitle(j.get("langs")[t]),this.votTranslationLanguageSelect.toSelect.setTitle(j.get("langs")[e]),this.votTranslationLanguageSelect.fromSelect.setSelected(t),this.votTranslationLanguageSelect.toSelect.setSelected(e),console.log(`[VOT] Set translation from ${t} to ${e}`),this.videoData.detectedLanguage=t,this.videoData.responseLanguage=e}syncVolumeWrapper(t,e){const o="translation"===t?this.votVideoVolumeSlider:this.votVideoTranslationVolumeSlider,n=Number(o.input.value),a=function(t,e,o,n){let a=e;return e>n?(a=o+(e-n),a=a>100?100:Math.max(a,0),t.volume=a/100):e100?100:Math.max(a,0),t.volume=a/100),a}("translation"===t?this.video:this.audio,e,n,"translation"===t?this.tempVolume:this.tempOriginalVolume);o.input.value=a,o.label.querySelector("strong").textContent=`${a}%`,Ee.updateSlider(o.input),this.tempOriginalVolume="translation"===t?a:e,this.tempVolume="translation"===t?e:a}async getVideoData(){const{duration:t,url:e,videoId:o,host:n,title:a,translationHelp:i,detectedLanguage:r,subtitles:s}=await Mt(this.site,this.video),l={translationHelp:i??null,isStream:!1,duration:this.video?.duration||t||y.defaultDuration,videoId:o,url:e,host:n,detectedLanguage:r??this.translateFromLang,responseLanguage:this.translateToLang,subtitles:s,title:a};if("youtube"===this.site.host){const t=await Ue.getVideoData();l.isStream=t.isLive,t.title&&(l.detectedLanguage=t.detectedLanguage,l.title=t.localizedTitle)}else if(["rutube","ok.ru","mail_ru"].includes(this.site.host))l.detectedLanguage="ru";else if("youku"===this.site.host)l.detectedLanguage="zh";else if("vk"===this.site.host){const t=document.getElementsByTagName("track")?.[0]?.srclang;l.detectedLanguage=t||"auto"}else"weverse"===this.site.host?l.detectedLanguage="ko":["bilibili","bitchute","rumble","peertube","dailymotion","trovo","yandexdisk","coursehunter","archive","nineanimetv","directlink"].includes(this.site.host)&&(l.detectedLanguage="auto");return l}videoValidator(){if(["youtube","ok.ru","vk"].includes(this.site.host)&&(_.log("VideoValidator videoData: ",this.videoData),1===this.data.dontTranslateYourLang&&this.videoData.detectedLanguage===this.data.dontTranslateLanguage))throw new At("VOTDisableFromYourLang");if(!this.videoData.isStream&&this.videoData.duration>14400)throw new At("VOTVideoIsTooLong");return!0}lipSync(t=!1){if(_.log("lipsync video",this.video),this.video)if(this.audio.currentTime=this.video.currentTime,this.audio.playbackRate=this.video.playbackRate,t)if("play"!=t)["pause","stop","waiting"].includes(t)&&(_.log(`lipsync mode is ${t}`),this.audio.pause()),"playing"==t&&(_.log("lipsync mode is playing"),this.audio.play());else{_.log("lipsync mode is play");const t=this.audio.play();void 0!==t&&t.catch((async t=>{if(console.error("[VOT]",t),"NotAllowedError"===t.name)throw this.transformBtn("error",j.get("grantPermissionToAutoPlay")),new At("grantPermissionToAutoPlay")}))}else _.log("lipsync mode is not set")}handleVideoEvent=t=>{_.log(`video ${t.type}`),this.lipSync(t.type)};stopTranslate(){for(const t of oo)this.video.removeEventListener(t,this.handleVideoEvent);this.audio.pause(),this.audio.src="",this.audio.removeAttribute("src"),this.votVideoVolumeSlider.container.hidden=!0,this.votVideoTranslationVolumeSlider.container.hidden=!0,this.votDownloadButton.hidden=!0,this.downloadTranslationUrl=null,this.transformBtn("none",j.get("translateVideo")),_.log(`Volume on start: ${this.volumeOnStart}`),this.volumeOnStart&&this.setVideoVolume(this.volumeOnStart),this.volumeOnStart="",clearInterval(this.streamPing),clearTimeout(this.autoRetry),this.hls?.destroy(),this.hls=Z(),this.firstSyncVolume=!0}async translateExecutor(t){_.log("Run translateFunc",t),await this.translateFunc(t,this.videoData.isStream,this.videoData.detectedLanguage,this.videoData.responseLanguage,this.videoData.translationHelp)}async updateTranslationErrorMsg(t){const e=j.get("translationTake"),o=j.lang;if("VOTLocalizedError"===t?.name)this.transformBtn("error",t.localizedMessage);else if(t instanceof Error)this.transformBtn("error",t?.message);else if(1!==this.data.translateAPIErrors||t.includes(e)||"ru"===o)this.transformBtn("error",t);else{this.setLoadingBtn(!0);const e=await async function(t,e="",o="ru"){switch(await z.get("translationService",B)){case"yandex":{const n=e&&o?`${e}-${o}`:o;return await _e.translate(t,n)}case"deepl":return await Ne.translate(t,e,o);default:return t}}(t,"ru",o);this.transformBtn("error",e)}["Подготавливаем перевод","Видео передано в обработку","Ожидаем перевод видео","Загружаем переведенное аудио"].includes(t)&&this.setLoadingBtn(!0)}afterUpdateTranslation(t){this.votVideoVolumeSlider.container.hidden=1!==this.data.showVideoSlider||"success"!==this.votButton.container.dataset.status,this.votVideoTranslationVolumeSlider.container.hidden="success"!==this.votButton.container.dataset.status,1===this.data.autoSetVolumeYandexStyle&&(this.votVideoVolumeSlider.input.value=100*this.data.autoVolume,this.votVideoVolumeSlider.label.querySelector("strong").textContent=100*this.data.autoVolume+"%",Ee.updateSlider(this.votVideoVolumeSlider.input)),this.votDownloadButton.hidden=!1,this.downloadTranslationUrl=t}async validateAudioUrl(t){try{const e=await et(t,{method:"HEAD",timeout:5e3});if(_.log("Test audio response",e),404===e.status){_.log("Yandex returned not valid audio, trying to fix...");let e=await this.translateVideoImpl(this.videoData,this.videoData.detectedLanguage="auto",this.videoData.responseLanguage,this.videoData.translationHelp);this.setSelectMenuValues(this.videoData.detectedLanguage,this.videoData.responseLanguage),t=e.url,_.log("Fixed audio audioUrl",t)}else _.log("Valid audioUrl",t)}catch(t){"Timeout"===t.message?(_.log("Request timed out. Handling timeout error..."),this.data.audioProxy=1,await z.set("audioProxy",1)):_.log("Test audio error:",t)}this.audio.src=t;try{await this.audio.play()}catch(t){if(console.error("[VOT]",t),"NotSupportedError"===t.name){if([...A,...O].includes(window.location.hostname))throw new At("VOTMediaCSPError");this.data.audioProxy=1,await z.set("audioProxy",1)}}return t}async updateTranslation(t){if(this.cachedTranslation?.url===this.audio.currentSrc?(_.log("[translateFunc] Audio src is the same"),this.audio.src=t):t=await this.validateAudioUrl(t),1===this.data.audioProxy&&t.startsWith("https://vtrans.s3-private.mds.yandex.net/tts/prod/")){const e=t.replace("https://vtrans.s3-private.mds.yandex.net/tts/prod/","");t=`https://${this.data.proxyWorkerHost}/video-translation/audio-proxy/${e}`,console.log(`[VOT] Audio proxied via ${t}`)}if(this.audio.src=t,this.volumeOnStart||(this.volumeOnStart=this.getVideoVolume()),this.setupAudioSettings(),"twitter"===this.site.host)document.querySelector('button[data-testid="app-bar-back"][role="button"]').addEventListener("click",this.stopTranslation);this.video&&!this.video.paused&&this.lipSync("play");for(const t of oo)this.video.addEventListener(t,this.handleVideoEvent);this.transformBtn("success",j.get("disableTranslate")),this.afterUpdateTranslation(t)}async translateFunc(t,e,o,n,a){if(console.log("[VOT] Video Data: ",this.videoData),_.log("Run videoValidator"),this.videoValidator(),this.setLoadingBtn(!0),e){let t=await this.translateStreamImpl(this.videoData,o,n);if(!t)return void _.log("Skip translation");this.transformBtn("success",j.get("disableTranslate"));const e=this.setHLSSource(t.result.url);if("youtube"===this.site.host&&Ue.videoSeek(this.video,10),this.setupAudioSettings(),!this.video.src&&!this.video.currentSrc&&!this.video.srcObject)return this.stopTranslation();this.video&&!this.video.paused&&this.lipSync("play");for(const t of oo)this.video.addEventListener(t,this.handleVideoEvent);return this.afterUpdateTranslation(e)}if(this.cachedTranslation=this.videoTranslations.find((e=>e.videoId===t&&e.expires>ot()&&e.from===o&&e.to===n)),this.cachedTranslation)return await this.updateTranslation(this.cachedTranslation.url),void _.log("[translateFunc] Cached translation was received");let i=await this.translateVideoImpl(this.videoData,o,n,a);_.log("[translateRes]",i),i?(await this.updateTranslation(i.url),this.subtitlesList.some((t=>"yandex"===t.source&&t.translatedFromLanguage===this.videoData.detectedLanguage&&t.language===this.videoData.responseLanguage))||(this.subtitlesList=await Je(this.votClient,this.videoData),await this.updateSubtitlesLangSelect()),this.videoTranslations.push({videoId:t,from:o,to:n,url:this.downloadTranslationUrl,expires:ot()+this.videoTranslationTTL})):_.log("Skip translation")}setupHLS(t){this.hls.on(Hls.Events.MEDIA_ATTACHED,(function(){_.log("audio and hls.js are now bound together !")})),this.hls.on(Hls.Events.MANIFEST_PARSED,(function(t){_.log("manifest loaded, found "+t?.levels?.length+" quality level")})),this.hls.loadSource(t),this.hls.attachMedia(this.audio),this.hls.on(Hls.Events.ERROR,(function(t){if(t.fatal)switch(t.type){case Hls.ErrorTypes.MEDIA_ERROR:console.log("fatal media error encountered, try to recover"),this.hls.recoverMediaError();break;case Hls.ErrorTypes.NETWORK_ERROR:console.error("fatal network error encountered",t);break;default:this.hls.destroy()}})),_.log(this.hls)}setHLSSource(t){const e=`https://${this.data.m3u8ProxyHost}/?all=yes&origin=${encodeURIComponent("https://strm.yandex.ru")}&referer=${encodeURIComponent("https://strm.yandex.ru")}&url=${encodeURIComponent(t)}`;if(this.hls)this.setupHLS(e);else{if(!this.audio.canPlayType("application/vnd.apple.mpegurl"))throw new At("audioFormatNotSupported");this.audio.src=e}return e}setupAudioSettings(){"number"==typeof this.data.defaultVolume&&this.setAudioVolume(this.data.defaultVolume/100),"number"==typeof this.data.autoSetVolumeYandexStyle&&this.data.autoSetVolumeYandexStyle&&this.setVideoVolume(this.data.autoVolume)}stopTranslation=()=>{this.stopTranslate(),this.syncVideoVolumeSlider()};async handleSrcChanged(){_.log("[VideoHandler] src changed",this),this.firstPlay=!0,this.stopTranslation();const t=!this.video.src&&!this.video.currentSrc&&!this.video.srcObject;this.votButton.container.hidden=t,t&&(this.votMenu.container.hidden=t),this.site.selector||(this.container=this.video.parentElement),this.container.contains(this.votButton.container)||this.container.append(this.votButton.container,this.votMenu.container),await Promise.all([this.videoData=await this.getVideoData(),this.updateSubtitles(),this.translateToLang=this.data.responseLanguage??"ru"]),this.setSelectMenuValues(this.videoData.detectedLanguage,this.videoData.responseLanguage)}async release(){_.log("[VideoHandler] release"),this.initialized=!1,this.releaseExtraEvents(),this.subtitlesWidget.release(),this.votButton.container.remove(),this.votMenu.container.remove()}}const ro=new class{constructor(){this.videoCache=new Set,this.onVideoAdded=new Ye,this.onVideoRemoved=new Ye,this.observer=new MutationObserver(this.handleMutations),this.intersectionObserver=new IntersectionObserver(this.handleIntersections,{threshold:.1})}handleMutations=t=>{window.requestIdleCallback((()=>{for(let e=0;e{for(let e=0;e{if(!t)return;const n=t.querySelectorAll("video");for(let t=0;t{this.videoCache.has(t)||(this.videoCache.add(t),this.intersectionObserver.observe(t))};handleIntersectingVideo=t=>{this.intersectionObserver.unobserve(t),(t=>{if(Qe.test(t.className)||Qe.test(t.title))return!0;let e=t.parentElement;for(;e;){if(Qe.test(e.className)||Qe.test(e.id))return!0;e=e.parentElement}return!1})(t)||(t=>t.hasAttribute("muted")&&!t.classList.contains("vjs-tech")&&!t.preload)(t)?_.log("The promotional/muted video was ignored",t):((t,e)=>{const o=()=>{(t=>t.readyState>=3)(t)?e(t):requestAnimationFrame(o)};o()})(t,this.handleVideoAdded)};handleVideoAdded=t=>{this.onVideoAdded.dispatch(t)};handleVideoRemoved=t=>{document.contains(t)||(this.videoCache.delete(t),this.onVideoRemoved.dispatch(t))}},so=new WeakMap;function lo(t,e){if(t.shadowRoot){let o=t.selector?Array.from(document.querySelectorAll(t.selector)).find((t=>t.shadowRoot.contains(e))):e.parentElement;return o&&o.shadowRoot?o.parentElement:o}const o=to.browser.version?.split(".")?.[0];if(t.selector?.includes(":not")&&t.selector?.includes("*")&&o&&("Chrome"===to.browser.name&&Number(o)<88||"Firefox"===to.browser.name&&Number(o)<84)){const o=t.selector.split(" *")[0];return o?Array.from(document.querySelectorAll(o)).find((t=>t.contains(e))):e.parentElement}return t.selector?Array.from(document.querySelectorAll(t.selector)).find((t=>t.contains(e))):e.parentElement}(async function(){_.log("Loading extension..."),await j.update(),_.log(`Selected menu language: ${j.lang}`),"https://9animetv.to"===window.location.origin&&window.addEventListener("message",(t=>{if("https://rapid-cloud.co"===t.origin&&"getVideoId"===t.data){const t=/[^/]+$/.exec(window.location.href)?.[0],e=document.querySelector("#iframe-embed")?.contentWindow;e.postMessage(`getVideoId:${t}`,"https://rapid-cloud.co/")}})),ro.onVideoAdded.addListener((t=>{for(const e of function(){if(/(http(s)?:\/\/)(127\.0\.0\.1|localhost)/.exec(window.location.href))return[];const t=window.location.hostname,e=new URL(window.location),o=o=>o instanceof RegExp?o.test(t):"string"==typeof o?t.includes(o):"function"==typeof o&&o(e);return I.filter((t=>(Array.isArray(t.match)?t.match.some(o):o(t.match))&&t.host&&t.url))}()){if(!e)continue;let o=lo(e,t);if(o&&(("rumble"!==e.host||t.style.display)&&(["peertube","directlink"].includes(e.host)&&(e.url=window.location.origin),!so.has(t)))){so.set(t,new io(t,o,e));break}}})),ro.onVideoRemoved.addListener((async t=>{so.has(t)&&(await so.get(t).release(),so.delete(t))})),ro.enable()})().catch((t=>{console.error("[VOT]",t)}))})()})(); \ No newline at end of file + `),this.votMenu.headerContainer.appendChild(this.votSettingsButton),this.votTranslationLanguageSelect=Ie.createVOTLanguageSelect({fromTitle:U.get("langs")[this.video.detectedLanguage],fromDialogTitle:U.get("videoLanguage"),fromItems:eo(mt,this.videoData.detectedLanguage),fromOnSelectCB:async t=>{P.log("[fromOnSelectCB] select from language",t.target.dataset.votValue),this.videoData=await this.getVideoData(),this.setSelectMenuValues(t.target.dataset.votValue,this.videoData.responseLanguage)},toTitle:U.get("langs")[this.video.responseLanguage],toDialogTitle:U.get("translationLanguage"),toItems:eo(bt,this.videoData.responseLanguage),toOnSelectCB:async t=>{const e=t.target.dataset.votValue;P.log("[toOnSelectCB] select to language",e),this.data.responseLanguage=this.translateToLang=e,await q.set("responseLanguage",this.data.responseLanguage),P.log("Response Language value changed. New value: ",this.data.responseLanguage),this.videoData=await this.getVideoData(),this.setSelectMenuValues(this.videoData.detectedLanguage,this.data.responseLanguage)}}),this.votMenu.bodyContainer.appendChild(this.votTranslationLanguageSelect.container),this.votSubtitlesSelect=Ie.createVOTSelect(U.get("VOTSubtitlesDisabled"),U.get("VOTSubtitles"),[{label:U.get("VOTSubtitlesDisabled"),value:"disabled",selected:!0,disabled:!1}],{onSelectCb:async t=>{await this.changeSubtitlesLang(t.target.dataset.votValue)},labelElement:Ie.createVOTSelectLabel(U.get("VOTSubtitles"))}),this.votMenu.bodyContainer.appendChild(this.votSubtitlesSelect.container),this.votVideoVolumeSlider=Ie.createSlider(ae`${U.get("VOTVolume")}: + ${100*this.getVideoVolume()}%`,100*this.getVideoVolume()),this.votVideoVolumeSlider.container.hidden=1!==this.data.showVideoSlider||"success"!==this.votButton.container.dataset.status,this.votMenu.bodyContainer.appendChild(this.votVideoVolumeSlider.container),this.votVideoTranslationVolumeSlider=Ie.createSlider(ae`${U.get("VOTVolumeTranslation")}: + ${this.data?.defaultVolume??100}%`,this.data?.defaultVolume??100,0,this.data.audioBooster?900:100),this.votVideoTranslationVolumeSlider.container.hidden="success"!==this.votButton.container.dataset.status,this.votMenu.bodyContainer.appendChild(this.votVideoTranslationVolumeSlider.container),this.votMenu.container.addEventListener("click",(t=>{t.preventDefault(),t.stopPropagation(),t.stopImmediatePropagation()})),this.votSettingsDialog=Ie.createDialog(U.get("VOTSettings")),document.documentElement.appendChild(this.votSettingsDialog.container),this.votTranslationHeader=Ie.createHeader(U.get("translationSettings")),this.votSettingsDialog.bodyContainer.appendChild(this.votTranslationHeader),this.votAutoTranslateCheckbox=Ie.createCheckbox(U.get("VOTAutoTranslate"),this.data?.autoTranslate??!1),this.votSettingsDialog.bodyContainer.appendChild(this.votAutoTranslateCheckbox.container),this.votDontTranslateYourLangSelect=Ie.createVOTSelect(U.get("langs")[this.data.dontTranslateLanguage],U.get("VOTDontTranslateYourLang"),eo(mt,this.data.dontTranslateLanguage),{onSelectCb:async t=>{this.data.dontTranslateLanguage=t.target.dataset.votValue,await q.set("dontTranslateLanguage",this.data.dontTranslateLanguage)},labelElement:Ie.createCheckbox(U.get("VOTDontTranslateYourLang"),this.data?.dontTranslateYourLang??!0).container}),this.votSettingsDialog.bodyContainer.appendChild(this.votDontTranslateYourLangSelect.container),this.changehotkeyButton=Ie.createOutlinedButton(oo(this.data.hotkeyButton)),this.votSettingsDialog.bodyContainer.appendChild(this.changehotkeyButton),this.votAutoSetVolumeCheckbox=Ie.createCheckbox(`${U.get("VOTAutoSetVolume")}`,this.data?.autoSetVolumeYandexStyle??!0),this.votSettingsDialog.bodyContainer.appendChild(this.votAutoSetVolumeCheckbox.container),this.votAutoSetVolumeSlider=Ie.createSlider(ae`${Math.round(100*(this.data?.autoVolume??N))}%`,Math.round(100*(this.data?.autoVolume??N)),0,100),this.votSettingsDialog.bodyContainer.appendChild(this.votAutoSetVolumeSlider.container),this.votShowVideoSliderCheckbox=Ie.createCheckbox(U.get("VOTShowVideoSlider"),this.data?.showVideoSlider??!1),this.votSettingsDialog.bodyContainer.appendChild(this.votShowVideoSliderCheckbox.container),this.votAudioBoosterCheckbox=Ie.createCheckbox(U.get("VOTAudioBooster"),this.data?.audioBooster??!1),this.audioContext||(this.votBypassMediaCSPCheckbox.input.disabled=!0,this.votBypassMediaCSPCheckbox.container.title=U.get("VOTNeedWebAudioAPI")),this.votSettingsDialog.bodyContainer.appendChild(this.votAudioBoosterCheckbox.container),this.votSyncVolumeCheckbox=Ie.createCheckbox(U.get("VOTSyncVolume"),this.data?.syncVolume??!1),this.votSettingsDialog.bodyContainer.appendChild(this.votSyncVolumeCheckbox.container),this.votDownloadWithNameCheckbox=Ie.createCheckbox(U.get("VOTDownloadWithName"),this.data?.downloadWithName??!1),this.votSettingsDialog.bodyContainer.appendChild(this.votDownloadWithNameCheckbox.container),this.votTranslationServiceSelect=Ie.createVOTSelect(this.data.translationService.toUpperCase(),U.get("VOTTranslationService"),eo($e,this.data.translationService),{onSelectCb:async t=>{this.data.translationService=t.target.dataset.votValue,await q.set("translationService",this.data.translationService)},labelElement:Ie.createCheckbox(U.get("VOTTranslateAPIErrors"),this.data.translateAPIErrors??!0).container}),this.votTranslationServiceSelect.container.hidden="ru"===U.lang,this.votSettingsDialog.bodyContainer.appendChild(this.votTranslationServiceSelect.container),this.votDetectServiceSelect=Ie.createVOTSelect(this.data.detectService.toUpperCase(),U.get("VOTDetectService"),eo(Ne,this.data.detectService),{onSelectCb:async t=>{this.data.detectService=t.target.dataset.votValue,await q.set("detectService",this.data.detectService)},labelElement:Ie.createVOTSelectLabel(U.get("VOTDetectService"))}),this.votSettingsDialog.bodyContainer.appendChild(this.votDetectServiceSelect.container),this.votSubtitlesHeader=Ie.createHeader(U.get("subtitlesSettings")),this.votSettingsDialog.bodyContainer.appendChild(this.votSubtitlesHeader),this.votSubtitlesDetails=Ie.createDetails(U.get("VOTSubtitlesDesign")),this.votSettingsDialog.bodyContainer.appendChild(this.votSubtitlesDetails.container),this.votProxyHeader=Ie.createHeader(U.get("proxySettings")),this.votSettingsDialog.bodyContainer.appendChild(this.votProxyHeader),this.votM3u8ProxyHostTextfield=Ie.createTextfield(U.get("VOTM3u8ProxyHost"),this.data?.m3u8ProxyHost,E),this.votSettingsDialog.bodyContainer.appendChild(this.votM3u8ProxyHostTextfield.container),this.votProxyWorkerHostTextfield=Ie.createTextfield(U.get("VOTProxyWorkerHost"),this.data?.proxyWorkerHost,_),this.votSettingsDialog.bodyContainer.appendChild(this.votProxyWorkerHostTextfield.container),this.votAudioProxyCheckbox=Ie.createCheckbox(U.get("VOTAudioProxy"),this.data?.audioProxy??!1),this.votSettingsDialog.bodyContainer.appendChild(this.votAudioProxyCheckbox.container),this.votBypassMediaCSPCheckbox=Ie.createCheckbox(U.get("VOTBypassMediaCSP")+(this.site.needBypassCSP?` (${U.get("VOTMediaCSPEnabledOnSite")})`:""),this.data?.bypassMediaCSP??!1),this.audioContext||(this.votBypassMediaCSPCheckbox.input.disabled=!0,this.votBypassMediaCSPCheckbox.container.title=U.get("VOTNeedWebAudioAPI")),this.votSettingsDialog.bodyContainer.appendChild(this.votBypassMediaCSPCheckbox.container),this.votAboutHeader=Ie.createHeader(U.get("about")),this.votSettingsDialog.bodyContainer.appendChild(this.votAboutHeader),this.votLanguageSelect=Ie.createVOTSelect(U.get("langs")[q.syncGet("locale-lang-override","auto")],U.get("VOTMenuLanguage"),eo(z,q.syncGet("locale-lang-override","auto")),{onSelectCb:async t=>{await q.set("locale-lang-override",t.target.dataset.votValue)},labelElement:Ie.createVOTSelectLabel(U.get("VOTMenuLanguage"))}),this.votSettingsDialog.bodyContainer.appendChild(this.votLanguageSelect.container),this.votShowPiPButtonCheckbox=Ie.createCheckbox(U.get("VOTShowPiPButton"),this.data?.showPiPButton??!1),this.votShowPiPButtonCheckbox.container.hidden=!J(),this.votSettingsDialog.bodyContainer.appendChild(this.votShowPiPButtonCheckbox.container),this.votVersionInfo=Ie.createInformation(`${U.get("VOTVersion")}:`,GM_info.script.version),this.votSettingsDialog.bodyContainer.appendChild(this.votVersionInfo.container),this.votAuthorsInfo=Ie.createInformation(`${U.get("VOTAuthors")}:`,GM_info.script.author),this.votSettingsDialog.bodyContainer.appendChild(this.votAuthorsInfo.container),this.votLoaderInfo=Ie.createInformation(`${U.get("VOTLoader")}:`,`${GM_info.scriptHandler} v${GM_info.version}`),this.votSettingsDialog.bodyContainer.appendChild(this.votLoaderInfo.container),this.votBrowserInfo=Ie.createInformation(`${U.get("VOTBrowser")}:`,`${Qe.browser.name} ${Qe.browser.version} (${Qe.os.name} ${Qe.os.version})`),this.votSettingsDialog.bodyContainer.appendChild(this.votBrowserInfo.container),this.votLocaleInfo=Ie.createInformation(`${U.get("VOTLocaleHash")}:`,ae`${this.data.localeHash}
(${U.get("VOTUpdatedAt")} + ${new Date(1e3*this.data.localeUpdatedAt).toLocaleString()})`),this.votSettingsDialog.bodyContainer.appendChild(this.votLocaleInfo.container),this.votUpdateLocaleFilesButton=Ie.createOutlinedButton(U.get("VOTUpdateLocaleFiles")),this.votSettingsDialog.bodyContainer.appendChild(this.votUpdateLocaleFilesButton),this.votResetSettingsButton=Ie.createButton(U.get("resetSettings")),this.votSettingsDialog.bodyContainer.appendChild(this.votResetSettingsButton)}async handleTranslationBtnClick(){if(this.audio.src||this.playSound)return P.log("[click translationBtn] audio.src is not empty"),void this.stopTranslate();if(this.hls.url)return P.log("[click translationBtn] hls is not empty"),void this.stopTranslate();try{if(P.log("[click translationBtn] trying execute translation"),!this.videoData.videoId)throw new Lt("VOTNoVideoIDFound");"vk"===this.site.host&&"clips"===this.site.additionalData&&(this.videoData=await this.getVideoData()),await this.translateExecutor(this.videoData.videoId)}catch(t){console.error("[VOT]",t),"VOTLocalizedError"===t?.name?this.transformBtn("error",t.localizedMessage):this.transformBtn("error",t?.message)}}initUIEvents(){this.votButton.translateButton.addEventListener("click",(async()=>{await this.handleTranslationBtnClick()})),this.votButton.pipButton.addEventListener("click",(()=>{(async()=>{this.video!==document.pictureInPictureElement?await this.video.requestPictureInPicture():await document.exitPictureInPicture()})()})),this.votButton.menuButton.addEventListener("click",(()=>{this.votMenu.container.hidden=!this.votMenu.container.hidden})),this.votButton.container.addEventListener("mousedown",(()=>{this.dragging=!0})),this.container.addEventListener("mouseup",(()=>{this.dragging=!1})),this.container.addEventListener("mousemove",(async t=>{if(this.dragging){t.preventDefault();const e=t.clientX/this.container.clientWidth*100,o=this.container.clientWidth>550,n=e<=44?"left":e>=66?"right":"default";this.data.buttonPos=o?n:"default",this.votButton.container.dataset.direction="default"===this.data.buttonPos?"row":"column",this.votButton.container.dataset.position=this.data.buttonPos,this.votMenu.container.dataset.position=this.data.buttonPos,o&&await q.set("buttonPos",this.data.buttonPos)}})),this.votDownloadButton.addEventListener("click",(async()=>{if(!this.downloadTranslationUrl)return;if(!this.data.downloadWithName)return window.open(this.downloadTranslationUrl,"_blank").focus();const t=document.querySelector("#vot-loader-download"),e=getComputedStyle(this.votMenu.container).getPropertyValue("--vot-primary-rgb"),o=Ie.animateLoader(t,e),n=await X(this.downloadTranslationUrl),a=n.body.getReader(),i=+n.headers.get("Content-Length");let r=0;const s=[];for(;;){const{done:t,value:e}=await a.read();if(t)break;s.push(e),r+=e.length,o(Math.round(r/i*100))}Ie.afterAnimateLoader(t,e);Z(new Blob(s),`${Q(this.videoData.title??this.videoData.videoId)}.mp3`)})),this.votDownloadSubtitlesButton.addEventListener("click",(async()=>{const t=this.data.subtitlesDownloadFormat,e=Nt(this.yandexSubtitles,t);Z(new Blob(["json"===t?JSON.stringify(e):e],{type:"text/plain"}),`${this.data.downloadWithName?Q(this.videoData.title??this.videoData.videoId):`subtitles_${this.videoData.videoId}`}.${t}`)})),this.votSettingsButton.addEventListener("click",(()=>{this.votSettingsDialog.container.hidden=!this.votSettingsDialog.container.hidden,(document.fullscreenElement||document.webkitFullscreenElement)&&(document.webkitExitFullscreen&&document.webkitExitFullscreen(),document.exitFullscreen&&document.exitFullscreen())})),this.votVideoVolumeSlider.input.addEventListener("input",(t=>{const e=Number(t.target.value);this.votVideoVolumeSlider.label.querySelector("strong").textContent=`${e}%`,this.setVideoVolume(e/100),this.data.syncVolume&&this.syncVolumeWrapper("video",e)})),this.votVideoTranslationVolumeSlider.input.addEventListener("input",(t=>{(async()=>{this.data.defaultVolume=Number(t.target.value),await q.set("defaultVolume",this.data.defaultVolume),this.votVideoTranslationVolumeSlider.label.querySelector("strong").textContent=`${this.data.defaultVolume}%`,this.setAudioVolume(this.data.defaultVolume/100),this.data.syncVolume&&(this.syncVolumeWrapper("translation",this.data.defaultVolume),["youtube","googledrive"].includes(this.site.host)&&"mobile"!==this.site.additionalData&&this.setVideoVolume(this.tempOriginalVolume/100))})()}));{this.votAutoTranslateCheckbox.input.addEventListener("change",(t=>{(async()=>{this.data.autoTranslate=Number(t.target.checked),await Promise.all([q.set("autoTranslate",this.data.autoTranslate),this.autoTranslate()]),P.log("autoTranslate value changed. New value: ",this.data.autoTranslate)})()})),this.votDontTranslateYourLangSelect.labelElement.addEventListener("change",(t=>{(async()=>{this.data.dontTranslateYourLang=Number(t.target.checked),await q.set("dontTranslateYourLang",this.data.dontTranslateYourLang),P.log("dontTranslateYourLang value changed. New value: ",this.data.dontTranslateYourLang)})()}));const t=async t=>{await q.set("hotkeyButton",t),this.data.hotkeyButton=t,this.changehotkeyButton.textContent=oo(t)},e=o=>{const n="Escape"===o.code?null:o.code;t(n),document.removeEventListener("keydown",e)};this.changehotkeyButton.addEventListener("click",(()=>{this.changehotkeyButton.textContent=U.get("VOTPressNewHotkey"),document.addEventListener("keydown",e)})),this.votAutoSetVolumeCheckbox.input.addEventListener("change",(t=>{(async()=>{this.data.autoSetVolumeYandexStyle=Number(t.target.checked),await q.set("autoSetVolumeYandexStyle",this.data.autoSetVolumeYandexStyle),P.log("autoSetVolumeYandexStyle value changed. New value: ",this.data.autoSetVolumeYandexStyle)})()})),this.votAutoSetVolumeSlider.input.addEventListener("input",(t=>{(async()=>{const e=Number(t.target.value);this.data.autoVolume=(e/100).toFixed(2),await q.set("autoVolume",this.data.autoVolume),this.votAutoSetVolumeSlider.label.querySelector("strong").textContent=`${e}%`})()})),this.votShowVideoSliderCheckbox.input.addEventListener("change",(t=>{(async()=>{this.data.showVideoSlider=Number(t.target.checked),await q.set("showVideoSlider",this.data.showVideoSlider),P.log("showVideoSlider value changed. New value: ",this.data.showVideoSlider),this.votVideoVolumeSlider.container.hidden=1!==this.data.showVideoSlider||"success"!==this.votButton.container.dataset.status})()})),this.votAudioBoosterCheckbox.input.addEventListener("change",(t=>{(async()=>{this.data.audioBooster=Number(t.target.checked),await q.set("audioBooster",this.data.audioBooster),P.log("audioBooster value changed. New value: ",this.data.audioBooster);const e=this.votVideoTranslationVolumeSlider.input.value;this.votVideoTranslationVolumeSlider.input.max=this.data.audioBooster?900:100,this.data.audioBooster||(this.votVideoTranslationVolumeSlider.input.value=e>100?100:e,this.votVideoTranslationVolumeSlider.input.dispatchEvent(new Event("input")))})()})),this.votSyncVolumeCheckbox.input.addEventListener("change",(t=>{(async()=>{this.data.syncVolume=Number(t.target.checked),await q.set("syncVolume",this.data.syncVolume),P.log("syncVolume value changed. New value: ",this.data.syncVolume)})()})),this.votDownloadWithNameCheckbox.input.addEventListener("change",(t=>{(async()=>{this.data.downloadWithName=Number(t.target.checked),await q.set("downloadWithName",this.data.downloadWithName),P.log("downloadWithName value changed. New value: ",this.data.downloadWithName)})()})),this.votTranslationServiceSelect.labelElement.addEventListener("change",(t=>{(async()=>{this.data.translateAPIErrors=Number(t.target.checked),await q.set("translateAPIErrors",this.data.translateAPIErrors),P.log("translateAPIErrors value changed. New value: ",this.data.translateAPIErrors)})()})),this.votSubtitlesDetails.container.addEventListener("click",(()=>{this.votSubtitlesDialog=Ie.createDialog(U.get("VOTSubtitlesDesign")),this.votSubtitlesDialog.container.classList.add("vot-dialog-temp"),this.votSubtitlesDialog.container.hidden=!1,this.votSubtitlesDialog.backdrop.onclick=this.votSubtitlesDialog.closeButton.onclick=()=>{this.votSubtitlesDialog.container.remove()},this.votSubtitlesHighlightWordsCheckbox=Ie.createCheckbox(U.get("VOTHighlightWords"),this.data?.highlightWords??!1),this.votSubtitlesDialog.bodyContainer.appendChild(this.votSubtitlesHighlightWordsCheckbox.container),this.votSubtitlesDownloadFormatSelect=Ie.createVOTSelect(this.data.subtitlesDownloadFormat.toUpperCase(),U.get("VOTSubtitlesDownloadFormat"),eo(ft,this.data.subtitlesDownloadFormat),{onSelectCb:async t=>{this.data.subtitlesDownloadFormat=t.target.dataset.votValue,await q.set("subtitlesDownloadFormat",this.data.subtitlesDownloadFormat)},labelElement:Ie.createVOTSelectLabel(U.get("VOTSubtitlesDownloadFormat"))}),this.votSubtitlesDialog.bodyContainer.appendChild(this.votSubtitlesDownloadFormatSelect.container),this.votSubtitlesMaxLengthSlider=Ie.createSlider(ae`${U.get("VOTSubtitlesMaxLength")}: + ${this.data?.subtitlesMaxLength??300}`,this.data?.subtitlesMaxLength??300,50,300),this.votSubtitlesDialog.bodyContainer.appendChild(this.votSubtitlesMaxLengthSlider.container),this.votSubtitlesFontSizeSlider=Ie.createSlider(ae`${U.get("VOTSubtitlesFontSize")}: + ${this.data?.subtitlesFontSize??20}`,this.data?.subtitlesFontSize??20,8,50),this.votSubtitlesDialog.bodyContainer.appendChild(this.votSubtitlesFontSizeSlider.container),this.votSubtitlesOpacitySlider=Ie.createSlider(ae`${U.get("VOTSubtitlesOpacity")}: + ${this.data?.subtitlesOpacity??20}`,this.data?.subtitlesOpacity??20,0,100),this.votSubtitlesDialog.bodyContainer.appendChild(this.votSubtitlesOpacitySlider.container),this.votSubtitlesHighlightWordsCheckbox.input.addEventListener("change",(t=>{(async()=>{this.data.highlightWords=Number(t.target.checked),await q.set("highlightWords",this.data.highlightWords),P.log("highlightWords value changed. New value: ",this.data.highlightWords),this.subtitlesWidget.setHighlightWords(this.data.highlightWords)})()})),this.votSubtitlesMaxLengthSlider.input.addEventListener("input",(t=>{(async()=>{this.data.subtitlesMaxLength=Number(t.target.value),await q.set("subtitlesMaxLength",this.data.subtitlesMaxLength),this.votSubtitlesMaxLengthSlider.label.querySelector("strong").textContent=`${this.data.subtitlesMaxLength}`,this.subtitlesWidget.setMaxLength(this.data.subtitlesMaxLength)})()})),this.votSubtitlesFontSizeSlider.input.addEventListener("input",(t=>{(async()=>{this.data.subtitlesFontSize=Number(t.target.value),await q.set("subtitlesFontSize",this.data.subtitlesFontSize),this.votSubtitlesFontSizeSlider.label.querySelector("strong").textContent=`${this.data.subtitlesFontSize}`,this.subtitlesWidget.setFontSize(this.data.subtitlesFontSize)})()})),this.votSubtitlesOpacitySlider.input.addEventListener("input",(t=>{(async()=>{this.data.subtitlesOpacity=Number(t.target.value),await q.set("subtitlesOpacity",this.data.subtitlesOpacity),this.votSubtitlesOpacitySlider.label.querySelector("strong").textContent=`${this.data.subtitlesOpacity}`,this.subtitlesWidget.setOpacity(this.data.subtitlesOpacity)})()})),document.documentElement.appendChild(this.votSubtitlesDialog.container)})),this.votShowPiPButtonCheckbox.input.addEventListener("change",(t=>{(async()=>{this.data.showPiPButton=Number(t.target.checked),await q.set("showPiPButton",this.data.showPiPButton),P.log("showPiPButton value changed. New value: ",this.data.showPiPButton),this.votButton.pipButton.hidden=!J()||!this.data.showPiPButton,this.votButton.separator2.hidden=!J()||!this.data.showPiPButton})()})),this.votM3u8ProxyHostTextfield.input.addEventListener("change",(t=>{(async()=>{this.data.m3u8ProxyHost=t.target.value||E,await q.set("m3u8ProxyHost",this.data.m3u8ProxyHost),P.log("m3u8ProxyHost value changed. New value: ",this.data.m3u8ProxyHost)})()})),this.votProxyWorkerHostTextfield.input.addEventListener("change",(t=>{(async()=>{this.data.proxyWorkerHost=t.target.value||_,await q.set("proxyWorkerHost",this.data.proxyWorkerHost),P.log("proxyWorkerHost value changed. New value: ",this.data.proxyWorkerHost),this.data.translateProxyEnabled&&(this.votClient.host=this.data.proxyWorkerHost)})()})),this.votAudioProxyCheckbox.input.addEventListener("change",(t=>{(async()=>{this.data.audioProxy=Number(t.target.checked),await q.set("audioProxy",this.data.audioProxy),P.log("audioProxy value changed. New value: ",this.data.audioProxy)})()})),this.votBypassMediaCSPCheckbox.input.addEventListener("change",(t=>{(async()=>{this.data.bypassMediaCSP=Number(t.target.checked),await q.set("bypassMediaCSP",this.data.bypassMediaCSP),P.log("bypassMediaCSP value changed. New value: ",this.data.bypassMediaCSP),this.stopTranslate()})()})),this.votUpdateLocaleFilesButton.addEventListener("click",(()=>{(async()=>{await q.set("locale-hash",""),await U.update(!0),window.location.reload()})()})),this.votResetSettingsButton.addEventListener("click",(()=>{(async()=>{U.reset();const t=await q.list();for(let e=0;e{this.extraEvents.push({element:t,event:e,handler:o}),t.addEventListener(e,o)},e=(e,o,n)=>{for(const a of o)t(e,a,n)};if(this.resizeObserver=new ResizeObserver((t=>{for(let e=0;e550;this.votButton.container.dataset.position=this.votMenu.container.dataset.position=e?this.data?.buttonPos:"default",this.votButton.container.dataset.direction=this.data?.buttonPos&&"default"!==this.data?.buttonPos&&e?"column":"row"})),this.resizeObserver.observe(this.video),this.votMenu.container.setAttribute("style",`--vot-container-height: ${this.video.getBoundingClientRect().height}px`),["youtube","googledrive"].includes(this.site.host)&&"mobile"!==this.site.additionalData){this.syncVolumeObserver=new MutationObserver((t=>{if(this.audio.src&&this.data.syncVolume)for(let e=0;e{const e=t.target,o=this.votButton.container,n=this.votMenu.container,a=this.container,i=this.votSettingsDialog.container,r=document.querySelector(".vot-dialog-temp"),s=o.contains(e),l=n.contains(e),d=a.contains(e),u=i.contains(e),c=r?.contains(e)??!1;P.log(`[document click] ${s} ${l} ${d} ${u} ${c}`),s||l||u||c||(d||this.logout(0),this.votMenu.container.hidden=!0)})),document.addEventListener("keydown",(async t=>{const e=t.code,o=document.activeElement;["input","textarea"].includes(o.tagName.toLowerCase())||o.isContentEditable||e!==this.data.hotkeyButton||await this.handleTranslationBtnClick()}));let o=this.site.eventSelector?document.querySelector(this.site.eventSelector):this.container;o&&e(o,["mousemove","mouseout"],this.resetTimer),t(this.votButton.container,"mousemove",this.changeOpacityOnEvent),t(this.votMenu.container,"mousemove",this.changeOpacityOnEvent),e(document,["touchstart","touchmove","touchend"],this.changeOpacityOnEvent),t(this.votButton.container,"mousedown",(t=>{t.stopImmediatePropagation()})),t(this.votMenu.container,"mousedown",(t=>{t.stopImmediatePropagation()})),"youtube"===this.site.host&&(this.container.draggable=!1),"googledrive"===this.site.host&&(this.container.style.height="100%"),t(this.video,"canplay",(async()=>{"rutube"===this.site.host&&this.video.src||await this.setCanPlay()})),t(this.video,"emptied",(async()=>{this.video.src&&await Ct(this.site,this.video)===this.videoData.videoId||(P.log("lipsync mode is emptied"),this.videoData="",this.stopTranslation())})),["rutube","ok"].includes(this.site.host)||t(this.video,"volumechange",(()=>{this.syncVideoVolumeSlider()})),"youtube"!==this.site.host||this.site.additionalData||t(document,"yt-page-data-updated",(async()=>{P.log("yt-page-data-updated"),window.location.pathname.includes("/shorts/")&&await this.setCanPlay()}))}async setCanPlay(){await Ct(this.site,this.video)!==this.videoData.videoId&&(await this.handleSrcChanged(),await this.autoTranslate(),P.log("lipsync mode is canplay"))}logout(t){this.votMenu.container.hidden&&(this.votButton.container.style.opacity=t)}resetTimer=()=>{clearTimeout(this.timer),this.logout(1),this.timer=setTimeout((()=>{this.logout(0)}),1e3)};changeOpacityOnEvent=t=>{clearTimeout(this.timer),this.logout(1),t.stopPropagation()};async changeSubtitlesLang(t){if(P.log("[onchange] subtitles",t),this.votSubtitlesSelect.setSelected(t),"disabled"===t)this.votSubtitlesSelect.setTitle(U.get("VOTSubtitlesDisabled")),this.subtitlesWidget.setContent(null),this.votDownloadSubtitlesButton.hidden=!0,this.yandexSubtitles=null;else{const e=this.subtitlesList.at(parseInt(t));if(1===this.data.audioProxy&&e.url.startsWith("https://brosubs.s3-private.mds.yandex.net/vtrans/")){const t=e.url.replace("https://brosubs.s3-private.mds.yandex.net/vtrans/","");e.url=`https://${this.data.proxyWorkerHost}/video-subtitles/subtitles-proxy/${t}`,console.log(`[VOT] Subs proxied via ${e.url}`)}this.yandexSubtitles=await We(e),this.subtitlesWidget.setContent(this.yandexSubtitles),this.votDownloadSubtitlesButton.hidden=!1}}async updateSubtitlesLangSelect(){const t=[{label:U.get("VOTSubtitlesDisabled"),value:"disabled",selected:!0,disabled:!1},...this.subtitlesList.map(((t,e)=>({label:(U.get("langs")[t.language]??t.language.toUpperCase())+(t.translatedFromLanguage?` ${U.get("VOTTranslatedFrom")} ${U.get("langs")[t.translatedFromLanguage]??t.translatedFromLanguage.toUpperCase()}`:"")+("yandex"!==t.source?`, ${window.location.hostname}`:"")+(t.isAutoGenerated?` (${U.get("VOTAutogenerated")})`:""),value:e,selected:!1,disabled:!1})))];this.votSubtitlesSelect.updateItems(t),await this.changeSubtitlesLang(t[0].value)}async updateSubtitles(){if(await this.changeSubtitlesLang("disabled"),!this.videoData.videoId)return console.error(`[VOT] ${U.getDefault("VOTNoVideoIDFound")}`),this.subtitlesList=[],this.subtitlesListVideoId=null,this.votButton.container.hidden=!0,void await this.updateSubtitlesLangSelect();if(this.votButton.container.hidden=!1,this.subtitlesListVideoId!==this.videoData.videoId){try{this.subtitlesList=await je(this.votClient,this.videoData)}catch(t){P.log("Error with yandex server, try auto-fix...",t),this.votOpts={fetchFn:X,hostVOT:$,host:this.data.proxyWorkerHost},this.votClient=new It(this.votOpts),this.subtitlesList=await je(this.votClient,this.videoData),await q.set("translateProxyEnabled",1)}this.subtitlesList?this.subtitlesListVideoId=this.videoData.videoId:await this.changeSubtitlesLang("disabled"),await this.updateSubtitlesLangSelect()}}getVideoVolume(){let t=this.video?.volume;return["youtube","googledrive"].includes(this.site.host)&&(t=He.getVideoVolume()??t),t}setVideoVolume(t){if(["youtube","googledrive"].includes(this.site.host)){if(He.setVideoVolume(t))return}this.video.volume=t}getAudioVolume(){return this.gainNode?this.gainNode.gain.value:this.audio.volume}setAudioVolume(t){return this.gainNode?this.gainNode.gain.value=t:this.audio.volume=t}isMuted(){return["youtube","googledrive"].includes(this.site.host)?He.isMuted():this.video?.muted}syncVideoVolumeSlider(){const t=this.isMuted()?0:100*this.getVideoVolume(),e=Math.round(t);this.votVideoVolumeSlider.input.value=e,this.votVideoVolumeSlider.label.querySelector("strong").textContent=`${e}%`,Ie.updateSlider(this.votVideoVolumeSlider.input),1===this.data.syncVolume&&(this.tempOriginalVolume=Number(e))}setSelectMenuValues(t,e){this.votTranslationLanguageSelect.fromSelect.setTitle(U.get("langs")[t]),this.votTranslationLanguageSelect.toSelect.setTitle(U.get("langs")[e]),this.votTranslationLanguageSelect.fromSelect.setSelected(t),this.votTranslationLanguageSelect.toSelect.setSelected(e),console.log(`[VOT] Set translation from ${t} to ${e}`),this.videoData.detectedLanguage=t,this.videoData.responseLanguage=e}syncVolumeWrapper(t,e){const o="translation"===t?this.votVideoVolumeSlider:this.votVideoTranslationVolumeSlider,n=Number(o.input.value),a=function(t,e,o,n){let a=e;return e>n?(a=o+(e-n),a=a>100?100:Math.max(a,0),t.volume=a/100):e100?100:Math.max(a,0),t.volume=a/100),a}("translation"===t?this.video:this.audio,e,n,"translation"===t?this.tempVolume:this.tempOriginalVolume);o.input.value=a,o.label.querySelector("strong").textContent=`${a}%`,Ie.updateSlider(o.input),this.tempOriginalVolume="translation"===t?a:e,this.tempVolume="translation"===t?e:a}async getVideoData(){const{duration:t,url:e,videoId:o,host:n,title:a,translationHelp:i,detectedLanguage:r,subtitles:s}=await Vt(this.site,this.video),l={translationHelp:i??null,isStream:!1,duration:this.video?.duration||t||y.defaultDuration,videoId:o,url:e,host:n,detectedLanguage:r??this.translateFromLang,responseLanguage:this.translateToLang,subtitles:s,title:a};if("youtube"===this.site.host){const t=await He.getVideoData();l.isStream=t.isLive,t.title&&(l.detectedLanguage=t.detectedLanguage,l.title=t.localizedTitle)}else if(["rutube","ok.ru","mail_ru"].includes(this.site.host))l.detectedLanguage="ru";else if("youku"===this.site.host)l.detectedLanguage="zh";else if("vk"===this.site.host){const t=document.getElementsByTagName("track")?.[0]?.srclang;l.detectedLanguage=t||"auto"}else"weverse"===this.site.host?l.detectedLanguage="ko":["bilibili","bitchute","rumble","peertube","dailymotion","trovo","yandexdisk","coursehunter","archive","nineanimetv","directlink"].includes(this.site.host)&&(l.detectedLanguage="auto");return l}videoValidator(){if(["youtube","ok.ru","vk"].includes(this.site.host)&&(P.log("VideoValidator videoData: ",this.videoData),1===this.data.dontTranslateYourLang&&this.videoData.detectedLanguage===this.data.dontTranslateLanguage))throw new Lt("VOTDisableFromYourLang");if(!this.videoData.isStream&&this.videoData.duration>14400)throw new Lt("VOTVideoIsTooLong");return!0}lipsyncAudioContext(t=!1){if(this.playSound&&(this.playSound.playbackRate.value=this.video.playbackRate),t)if("play"!=t){if(["pause","stop","waiting"].includes(t)){P.log(`lipsync mode is ${t}`);try{this.playSound.stop()}catch{}return this.playSound=this.audioContext.createBufferSource(),this.playSound.buffer=this.audioBuffer,void this.playSound.connect(this.gainNode)}if("playing"==t){P.log("lipsync mode is playing");try{this.playSound.start(0,this.audio.currentTime)}catch{}}}else{P.log("lipsync mode is play");try{this.playSound.start(0,this.audio.currentTime)}catch{}}else P.log("lipsync mode is not set")}lipsyncAudio(t=!1){if(t)if("play"!=t){if(["pause","stop","waiting"].includes(t))return P.log(`lipsync mode is ${t}`),void this.audio.pause();"playing"==t&&(P.log("lipsync mode is playing"),this.audio.play())}else{P.log("lipsync mode is play");const t=this.audio.play();void 0!==t&&t.catch((async t=>{if(console.error("[VOT]",t),"NotAllowedError"===t.name)throw this.transformBtn("error",U.get("grantPermissionToAutoPlay")),new Lt("grantPermissionToAutoPlay")}))}else P.log("lipsync mode is not set")}lipSync(t=!1){if(P.log("lipsync video",this.video),this.video)return this.audio.currentTime=this.video.currentTime,this.audio.playbackRate=this.video.playbackRate,this.needBypassCSP()?this.lipsyncAudioContext(t):this.lipsyncAudio(t)}handleVideoEvent=t=>{P.log(`video ${t.type}`),this.lipSync(t.type)};needBypassCSP=()=>this.data.bypassMediaCSP&&this.site.needBypassCSP;stopTranslate(){for(const t of to)this.video.removeEventListener(t,this.handleVideoEvent);if(this.playSound)try{this.playSound.stop(),this.playSound=null}catch{}this.audio.pause(),this.audio.src="",this.audio.removeAttribute("src"),this.votVideoVolumeSlider.container.hidden=!0,this.votVideoTranslationVolumeSlider.container.hidden=!0,this.votDownloadButton.hidden=!0,this.downloadTranslationUrl=null,this.transformBtn("none",U.get("translateVideo")),P.log(`Volume on start: ${this.volumeOnStart}`),this.volumeOnStart&&this.setVideoVolume(this.volumeOnStart),this.volumeOnStart="",clearInterval(this.streamPing),clearTimeout(this.autoRetry),this.hls?.destroy(),this.hls=K(),this.firstSyncVolume=!0}async translateExecutor(t){P.log("Run translateFunc",t),await this.translateFunc(t,this.videoData.isStream,this.videoData.detectedLanguage,this.videoData.responseLanguage,this.videoData.translationHelp)}async updateTranslationErrorMsg(t){const e=U.get("translationTake"),o=U.lang;if("VOTLocalizedError"===t?.name)this.transformBtn("error",t.localizedMessage);else if(t instanceof Error)this.transformBtn("error",t?.message);else if(1!==this.data.translateAPIErrors||t.includes(e)||"ru"===o)this.transformBtn("error",t);else{this.setLoadingBtn(!0);const e=await async function(t,e="",o="ru"){switch(await q.get("translationService",R)){case"yandex":{const n=e&&o?`${e}-${o}`:o;return await Pe.translate(t,n)}case"deepl":return await _e.translate(t,e,o);default:return t}}(t,"ru",o);this.transformBtn("error",e)}["Подготавливаем перевод","Видео передано в обработку","Ожидаем перевод видео","Загружаем переведенное аудио"].includes(t)&&this.setLoadingBtn(!0)}afterUpdateTranslation(t){this.votVideoVolumeSlider.container.hidden=1!==this.data.showVideoSlider||"success"!==this.votButton.container.dataset.status,this.votVideoTranslationVolumeSlider.container.hidden="success"!==this.votButton.container.dataset.status,1===this.data.autoSetVolumeYandexStyle&&(this.votVideoVolumeSlider.input.value=100*this.data.autoVolume,this.votVideoVolumeSlider.label.querySelector("strong").textContent=100*this.data.autoVolume+"%",Ie.updateSlider(this.votVideoVolumeSlider.input)),this.votDownloadButton.hidden=!1,this.downloadTranslationUrl=t}async validateAudioUrl(t){try{const e=await X(t,{method:"HEAD",timeout:5e3});if(P.log("Test audio response",e),404===e.status){P.log("Yandex returned not valid audio, trying to fix...");let e=await this.translateVideoImpl(this.videoData,this.videoData.detectedLanguage="auto",this.videoData.responseLanguage,this.videoData.translationHelp);this.setSelectMenuValues(this.videoData.detectedLanguage,this.videoData.responseLanguage),t=e.url,P.log("Fixed audio audioUrl",t)}else P.log("Valid audioUrl",t)}catch(t){"Timeout"===t.message?(P.log("Request timed out. Handling timeout error..."),this.data.audioProxy=1,await q.set("audioProxy",1)):P.log("Test audio error:",t)}return t}async setAudioSourceAndPlay(t){P.log("setAudioSourceAndPlay"),this.audio.src=t;try{await this.audio.play()}catch(t){console.error("[VOT]",t),"NotSupportedError"===t.name&&(this.data.audioProxy=1,await q.set("audioProxy",1))}}async configurePlaySound(t){try{P.log("[VOT] Trying bypass audio CSP...");const e=await X(t),o=await e.arrayBuffer();this.audioBuffer=await this.audioContext.decodeAudioData(o),this.playSound=this.audioContext.createBufferSource(),this.playSound.buffer=this.audioBuffer,this.playSound.connect(this.gainNode)}catch(t){console.error("[VOT] Failed to bypass CSP",t),"Timeout"===t.message&&(P.log("Request timed out. Handling timeout error..."),this.data.audioProxy=1,await q.set("audioProxy",1))}}async updateTranslation(t){if(this.cachedTranslation?.url===this.audio.currentSrc?(P.log("[translateFunc] Audio src is the same"),this.audio.src=t):t=await this.validateAudioUrl(t),1===this.data.audioProxy&&t.startsWith("https://vtrans.s3-private.mds.yandex.net/tts/prod/")){const e=t.replace("https://vtrans.s3-private.mds.yandex.net/tts/prod/","");t=`https://${this.data.proxyWorkerHost}/video-translation/audio-proxy/${e}`,console.log(`[VOT] Audio proxied via ${t}`)}if(this.needBypassCSP()?await this.configurePlaySound(t):await this.setAudioSourceAndPlay(t),this.volumeOnStart||(this.volumeOnStart=this.getVideoVolume()),this.setupAudioSettings(),"twitter"===this.site.host)document.querySelector('button[data-testid="app-bar-back"][role="button"]').addEventListener("click",this.stopTranslation);this.video&&!this.video.paused&&this.lipSync("play");for(const t of to)this.video.addEventListener(t,this.handleVideoEvent);this.transformBtn("success",U.get("disableTranslate")),this.afterUpdateTranslation(t)}async translateFunc(t,e,o,n,a){if(console.log("[VOT] Video Data: ",this.videoData),P.log("Run videoValidator"),this.videoValidator(),this.setLoadingBtn(!0),e){let t=await this.translateStreamImpl(this.videoData,o,n);if(!t)return void P.log("Skip translation");this.transformBtn("success",U.get("disableTranslate"));const e=this.setHLSSource(t.result.url);if("youtube"===this.site.host&&He.videoSeek(this.video,10),this.setupAudioSettings(),!this.video.src&&!this.video.currentSrc&&!this.video.srcObject)return this.stopTranslation();this.video&&!this.video.paused&&this.lipSync("play");for(const t of to)this.video.addEventListener(t,this.handleVideoEvent);return this.afterUpdateTranslation(e)}if(this.cachedTranslation=this.videoTranslations.find((e=>e.videoId===t&&e.expires>tt()&&e.from===o&&e.to===n)),this.cachedTranslation)return await this.updateTranslation(this.cachedTranslation.url),void P.log("[translateFunc] Cached translation was received");let i=await this.translateVideoImpl(this.videoData,o,n,a);P.log("[translateRes]",i),i?(await this.updateTranslation(i.url),this.subtitlesList.some((t=>"yandex"===t.source&&t.translatedFromLanguage===this.videoData.detectedLanguage&&t.language===this.videoData.responseLanguage))||(this.subtitlesList=await je(this.votClient,this.videoData),await this.updateSubtitlesLangSelect()),this.videoTranslations.push({videoId:t,from:o,to:n,url:this.downloadTranslationUrl,expires:tt()+this.videoTranslationTTL})):P.log("Skip translation")}setupHLS(t){this.hls.on(Hls.Events.MEDIA_ATTACHED,(function(){P.log("audio and hls.js are now bound together !")})),this.hls.on(Hls.Events.MANIFEST_PARSED,(function(t){P.log("manifest loaded, found "+t?.levels?.length+" quality level")})),this.hls.loadSource(t),this.hls.attachMedia(this.audio),this.hls.on(Hls.Events.ERROR,(function(t){if(t.fatal)switch(t.type){case Hls.ErrorTypes.MEDIA_ERROR:console.log("fatal media error encountered, try to recover"),this.hls.recoverMediaError();break;case Hls.ErrorTypes.NETWORK_ERROR:console.error("fatal network error encountered",t);break;default:this.hls.destroy()}})),P.log(this.hls)}setHLSSource(t){const e=`https://${this.data.m3u8ProxyHost}/?all=yes&origin=${encodeURIComponent("https://strm.yandex.ru")}&referer=${encodeURIComponent("https://strm.yandex.ru")}&url=${encodeURIComponent(t)}`;if(this.hls)this.setupHLS(e);else{if(!this.audio.canPlayType("application/vnd.apple.mpegurl"))throw new Lt("audioFormatNotSupported");this.audio.src=e}return e}setupAudioSettings(){"number"==typeof this.data.defaultVolume&&this.setAudioVolume(this.data.defaultVolume/100),"number"==typeof this.data.autoSetVolumeYandexStyle&&this.data.autoSetVolumeYandexStyle&&this.setVideoVolume(this.data.autoVolume)}stopTranslation=()=>{this.stopTranslate(),this.syncVideoVolumeSlider()};async handleSrcChanged(){P.log("[VideoHandler] src changed",this),this.firstPlay=!0,this.stopTranslation();const t=!this.video.src&&!this.video.currentSrc&&!this.video.srcObject;this.votButton.container.hidden=t,t&&(this.votMenu.container.hidden=t),this.site.selector||(this.container=this.video.parentElement),this.container.contains(this.votButton.container)||this.container.append(this.votButton.container,this.votMenu.container),await Promise.all([this.videoData=await this.getVideoData(),this.updateSubtitles(),this.translateToLang=this.data.responseLanguage??"ru"]),this.setSelectMenuValues(this.videoData.detectedLanguage,this.videoData.responseLanguage)}async release(){P.log("[VideoHandler] release"),this.initialized=!1,this.releaseExtraEvents(),this.subtitlesWidget.release(),this.votButton.container.remove(),this.votMenu.container.remove()}}const ao=new class{constructor(){this.videoCache=new Set,this.onVideoAdded=new Je,this.onVideoRemoved=new Je,this.observer=new MutationObserver(this.handleMutations),this.intersectionObserver=new IntersectionObserver(this.handleIntersections,{threshold:.1})}handleMutations=t=>{window.requestIdleCallback((()=>{for(let e=0;e{for(let e=0;e{if(!t)return;const n=t.querySelectorAll("video");for(let t=0;t{this.videoCache.has(t)||(this.videoCache.add(t),this.intersectionObserver.observe(t))};handleIntersectingVideo=t=>{this.intersectionObserver.unobserve(t),(t=>{if(Ye.test(t.className)||Ye.test(t.title))return!0;let e=t.parentElement;for(;e;){if(Ye.test(e.className)||Ye.test(e.id))return!0;e=e.parentElement}return!1})(t)||(t=>t.hasAttribute("muted")&&!t.classList.contains("vjs-tech")&&!t.preload)(t)?P.log("The promotional/muted video was ignored",t):((t,e)=>{const o=()=>{(t=>t.readyState>=3)(t)?e(t):requestAnimationFrame(o)};o()})(t,this.handleVideoAdded)};handleVideoAdded=t=>{this.onVideoAdded.dispatch(t)};handleVideoRemoved=t=>{document.contains(t)||(this.videoCache.delete(t),this.onVideoRemoved.dispatch(t))}},io=new WeakMap;function ro(t,e){if(t.shadowRoot){let o=t.selector?Array.from(document.querySelectorAll(t.selector)).find((t=>t.shadowRoot.contains(e))):e.parentElement;return o&&o.shadowRoot?o.parentElement:o}const o=Qe.browser.version?.split(".")?.[0];if(t.selector?.includes(":not")&&t.selector?.includes("*")&&o&&("Chrome"===Qe.browser.name&&Number(o)<88||"Firefox"===Qe.browser.name&&Number(o)<84)){const o=t.selector.split(" *")[0];return o?Array.from(document.querySelectorAll(o)).find((t=>t.contains(e))):e.parentElement}return t.selector?Array.from(document.querySelectorAll(t.selector)).find((t=>t.contains(e))):e.parentElement}(async function(){P.log("Loading extension..."),await U.update(),P.log(`Selected menu language: ${U.lang}`),"https://9animetv.to"===window.location.origin&&window.addEventListener("message",(t=>{if("https://rapid-cloud.co"===t.origin&&"getVideoId"===t.data){const t=/[^/]+$/.exec(window.location.href)?.[0],e=document.querySelector("#iframe-embed")?.contentWindow;e.postMessage(`getVideoId:${t}`,"https://rapid-cloud.co/")}})),ao.onVideoAdded.addListener((t=>{for(const e of function(){if(/(http(s)?:\/\/)(127\.0\.0\.1|localhost)/.exec(window.location.href))return[];const t=window.location.hostname,e=new URL(window.location),o=o=>o instanceof RegExp?o.test(t):"string"==typeof o?t.includes(o):"function"==typeof o&&o(e);return A.filter((t=>(Array.isArray(t.match)?t.match.some(o):o(t.match))&&t.host&&t.url))}()){if(!e)continue;let o=ro(e,t);if(o&&(("rumble"!==e.host||t.style.display)&&(["peertube","directlink"].includes(e.host)&&(e.url=window.location.origin),!io.has(t)))){io.set(t,new no(t,o,e));break}}})),ao.onVideoRemoved.addListener((async t=>{io.has(t)&&(await io.get(t).release(),io.delete(t))})),ao.enable()})().catch((t=>{console.error("[VOT]",t)}))})()})(); \ No newline at end of file diff --git a/dist/vot.user.js b/dist/vot.user.js index c3cc8751..cfcd902d 100644 --- a/dist/vot.user.js +++ b/dist/vot.user.js @@ -175,7 +175,7 @@ /***/ "./src/styles/main.scss": /***/ (() => { -GM_addStyle(".vot-button{--vot-helper-theme:var(--vot-theme-rgb,var(--vot-primary-rgb,33,150,243));--vot-helper-ontheme:var(--vot-ontheme-rgb,var(--vot-onprimary-rgb,255,255,255));box-sizing:border-box;vertical-align:middle;text-align:center;text-overflow:ellipsis;color:rgb(var(--vot-helper-ontheme));background-color:rgb(var(--vot-helper-theme));font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system);cursor:pointer;border:none;border-radius:4px;outline:none;min-width:64px;height:36px;padding:0 16px;font-size:14px;font-weight:500;line-height:36px;transition:box-shadow .2s;display:inline-block;position:relative;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.vot-button[hidden]{display:none!important}.vot-button::-moz-focus-inner{border:none}.vot-button:before,.vot-button:after{content:\"\";border-radius:inherit;opacity:0;position:absolute;top:0;bottom:0;left:0;right:0}.vot-button:before{background-color:rgb(var(--vot-helper-ontheme));transition:opacity .2s}.vot-button:after{background:radial-gradient(circle,currentColor 1%,#0000 1%) 50%/10000% 10000% no-repeat;transition:opacity 1s,background-size .5s}.vot-button:hover{box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.vot-button:hover:before{opacity:.08}.vot-button:active{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.vot-button:active:after{opacity:.32;background-size:100% 100%;transition:background-size}.vot-button[disabled=true]{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.12);color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);box-shadow:none;cursor:initial}.vot-button[disabled=true]:before,.vot-button[disabled=true]:after{opacity:0}.vot-outlined-button{--vot-helper-theme:var(--vot-theme-rgb,var(--vot-primary-rgb,33,150,243));box-sizing:border-box;border:1px solid;border-color:rgba(var(--vot-onsurface-rgb,0,0,0),.24);vertical-align:middle;text-align:center;text-overflow:ellipsis;color:rgb(var(--vot-helper-theme));font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system);cursor:pointer;background-color:#0000;border-radius:4px;outline:none;min-width:64px;height:36px;margin:0;padding:0 16px;font-size:14px;font-weight:500;line-height:34px;display:inline-block;position:relative}.vot-outlined-button[hidden]{display:none!important}.vot-outlined-button::-moz-focus-inner{border:none}.vot-outlined-button:before,.vot-outlined-button:after{content:\"\";opacity:0;border-radius:3px;position:absolute;top:0;bottom:0;left:0;right:0}.vot-outlined-button:before{background-color:rgb(var(--vot-helper-theme));transition:opacity .2s}.vot-outlined-button:after{background:radial-gradient(circle,currentColor 1%,#0000 1%) 50%/10000% 10000% no-repeat;transition:opacity 1s,background-size .5s}.vot-outlined-button:hover:before{opacity:.04}.vot-outlined-button:active:after{opacity:.16;background-size:100% 100%;transition:background-size}.vot-outlined-button[disabled=true]{color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);cursor:initial;background-color:#0000}.vot-outlined-button[disabled=true]:before,.vot-outlined-button[disabled=true]:after{opacity:0}.vot-text-button{--vot-helper-theme:var(--vot-theme-rgb,var(--vot-primary-rgb,33,150,243));box-sizing:border-box;vertical-align:middle;text-align:center;text-overflow:ellipsis;color:rgb(var(--vot-helper-theme));font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system);cursor:pointer;background-color:#0000;border:none;border-radius:4px;outline:none;min-width:64px;height:36px;margin:0;padding:0 8px;font-size:14px;font-weight:500;line-height:36px;display:inline-block;position:relative}.vot-text-button[hidden]{display:none!important}.vot-text-button::-moz-focus-inner{border:none}.vot-text-button:before,.vot-text-button:after{content:\"\";border-radius:inherit;opacity:0;position:absolute;top:0;bottom:0;left:0;right:0}.vot-text-button:before{background-color:rgb(var(--vot-helper-theme));transition:opacity .2s}.vot-text-button:after{background:radial-gradient(circle,currentColor 1%,#0000 1%) 50%/10000% 10000% no-repeat;transition:opacity 1s,background-size .5s}.vot-text-button:hover:before{opacity:.04}.vot-text-button:active:after{opacity:.16;background-size:100% 100%;transition:background-size}.vot-text-button[disabled=true]{color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);cursor:initial;background-color:#0000}.vot-text-button[disabled=true]:before,.vot-text-button[disabled=true]:after{opacity:0}.vot-icon-button{--vot-helper-onsurface:rgba(var(--vot-onsurface-rgb,0,0,0),.87);box-sizing:border-box;vertical-align:middle;text-align:center;text-overflow:ellipsis;fill:var(--vot-helper-onsurface);color:var(--vot-helper-onsurface);font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system);cursor:pointer;background-color:#0000;border:none;border-radius:50%;outline:none;width:36px;height:36px;margin:0;padding:0;font-size:14px;font-weight:500;line-height:36px;display:inline-block;position:relative}.vot-icon-button[hidden]{display:none!important}.vot-icon-button::-moz-focus-inner{border:none}.vot-icon-button:before,.vot-icon-button:after{content:\"\";border-radius:inherit;opacity:0;position:absolute;top:0;bottom:0;left:0;right:0}.vot-icon-button:before{background-color:var(--vot-helper-onsurface);transition:opacity .2s}.vot-icon-button:after{background:radial-gradient(circle,currentColor 1%,#0000 1%) 50%/10000% 10000% no-repeat;transition:opacity .3s,background-size .4s}.vot-icon-button:hover:before{opacity:.04}.vot-icon-button:active:after{opacity:.32;background-size:100% 100%;transition:background-size,opacity}.vot-icon-button[disabled=true]{color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);fill:rgba(var(--vot-onsurface-rgb,0,0,0),.38);cursor:initial;background-color:#0000}.vot-icon-button[disabled=true]:before,.vot-icon-button[disabled=true]:after{opacity:0}.vot-textfield{display:inline-block;--vot-helper-theme:rgb(var(--vot-theme-rgb,var(--vot-primary-rgb,33,150,243)))!important;--vot-helper-safari1:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important;--vot-helper-safari2:rgba(var(--vot-onsurface-rgb,0,0,0),.6)!important;--vot-helper-safari3:rgba(var(--vot-onsurface-rgb,0,0,0),.87)!important;font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system)!important;text-align:start!important;padding-top:6px!important;font-size:16px!important;line-height:1.5!important;position:relative!important}.vot-textfield[hidden]{display:none!important}.vot-textfield>input,.vot-textfield>textarea{box-sizing:border-box!important;border-style:solid!important;border-width:1px!important;border-color:transparent var(--vot-helper-safari2)var(--vot-helper-safari2)!important;height:inherit!important;color:rgba(var(--vot-onsurface-rgb,0,0,0),.87)!important;-webkit-text-fill-color:currentColor!important;font-family:inherit!important;font-size:inherit!important;line-height:inherit!important;caret-color:var(--vot-helper-theme)!important;background-color:#0000!important;border-radius:4px!important;width:100%!important;margin:0!important;padding:15px 13px!important;transition:border .2s,box-shadow .2s!important;box-shadow:inset 1px 0 #0000,inset -1px 0 #0000,inset 0 -1px #0000!important}.vot-textfield>input:not(:focus):not(.vot-show-placeholer)::-moz-placeholder{color:#0000!important}.vot-textfield>textarea:not(:focus):not(.vot-show-placeholer)::-moz-placeholder{color:#0000!important}.vot-textfield>input:not(:focus):not(.vot-show-placeholer)::-moz-placeholder{color:#0000!important}.vot-textfield>textarea:not(:focus):not(.vot-show-placeholer)::-moz-placeholder{color:#0000!important}.vot-textfield>input:not(:focus):not(.vot-show-placeholer)::-webkit-input-placeholder{color:#0000!important}.vot-textfield>textarea:not(:focus):not(.vot-show-placeholer)::-webkit-input-placeholder{color:#0000!important}.vot-textfield>input:not(:focus):placeholder-shown,.vot-textfield>textarea:not(:focus):placeholder-shown{border-top-color:var(--vot-helper-safari2)!important}.vot-textfield>input+span,.vot-textfield>textarea+span{color:rgba(var(--vot-onsurface-rgb,0,0,0),.6)!important;cursor:text!important;pointer-events:none!important;width:100%!important;max-height:100%!important;font-size:75%!important;line-height:15px!important;transition:color .2s,font-size .2s,line-height .2s!important;display:flex!important;position:absolute!important;top:0!important;left:0!important}.vot-textfield>input:not(:focus):placeholder-shown+span,.vot-textfield>textarea:not(:focus):placeholder-shown+span{font-size:inherit!important;line-height:68px!important}.vot-textfield>input+span:before,.vot-textfield>input+span:after,.vot-textfield>textarea+span:before,.vot-textfield>textarea+span:after{content:\"\"!important;box-sizing:border-box!important;border-top:solid 1px var(--vot-helper-safari2)!important;pointer-events:none!important;min-width:10px!important;height:8px!important;margin-top:6px!important;transition:border .2s,box-shadow .2s!important;display:block!important;box-shadow:inset 0 1px #0000!important}.vot-textfield>input+span:before,.vot-textfield>textarea+span:before{border-left:1px solid #0000!important;border-radius:4px 0!important;margin-right:4px!important}.vot-textfield>input+span:after,.vot-textfield>textarea+span:after{border-right:1px solid #0000!important;border-radius:0 4px!important;flex-grow:1!important;margin-left:4px!important}.vot-textfield>input.vot-show-placeholer+span:before,.vot-textfield>textarea.vot-show-placeholer+span:before{margin-right:0!important}.vot-textfield>input.vot-show-placeholer+span:after,.vot-textfield>textarea.vot-show-placeholer+span:after{margin-left:0!important}.vot-textfield>input:not(:focus):placeholder-shown+span:before,.vot-textfield>input:not(:focus):placeholder-shown+span:after,.vot-textfield>textarea:not(:focus):placeholder-shown+span:before,.vot-textfield>textarea:not(:focus):placeholder-shown+span:after{border-top-color:#0000!important}.vot-textfield:hover>input:not(:disabled),.vot-textfield:hover>textarea:not(:disabled){border-color:transparent var(--vot-helper-safari3)var(--vot-helper-safari3)!important}.vot-textfield:hover>input:not(:disabled)+span:before,.vot-textfield:hover>input:not(:disabled)+span:after,.vot-textfield:hover>textarea:not(:disabled)+span:before,.vot-textfield:hover>textarea:not(:disabled)+span:after{border-top-color:var(--vot-helper-safari3)!important}.vot-textfield:hover>input:not(:disabled):not(:focus):placeholder-shown,.vot-textfield:hover>textarea:not(:disabled):not(:focus):placeholder-shown{border-color:var(--vot-helper-safari3)!important}.vot-textfield>input:focus,.vot-textfield>textarea:focus{border-color:transparent var(--vot-helper-theme)var(--vot-helper-theme)!important;box-shadow:inset 1px 0 var(--vot-helper-theme),inset -1px 0 var(--vot-helper-theme),inset 0 -1px var(--vot-helper-theme)!important;outline:none!important}.vot-textfield>input:focus+span,.vot-textfield>textarea:focus+span{color:var(--vot-helper-theme)!important}.vot-textfield>input:focus+span:before,.vot-textfield>input:focus+span:after,.vot-textfield>textarea:focus+span:before,.vot-textfield>textarea:focus+span:after{border-top-color:var(--vot-helper-theme)!important;box-shadow:inset 0 1px var(--vot-helper-theme)!important}.vot-textfield>input:disabled,.vot-textfield>input:disabled+span,.vot-textfield>textarea:disabled,.vot-textfield>textarea:disabled+span{border-color:transparent var(--vot-helper-safari1)var(--vot-helper-safari1)!important;color:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important;pointer-events:none!important}.vot-textfield>input:disabled+span:before,.vot-textfield>input:disabled+span:after,.vot-textfield>textarea:disabled+span:before,.vot-textfield>textarea:disabled+span:after,.vot-textfield>input:disabled:placeholder-shown,.vot-textfield>input:disabled:placeholder-shown+span,.vot-textfield>textarea:disabled:placeholder-shown,.vot-textfield>textarea:disabled:placeholder-shown+span{border-top-color:var(--vot-helper-safari1)!important}.vot-textfield>input:disabled:placeholder-shown+span:before,.vot-textfield>input:disabled:placeholder-shown+span:after,.vot-textfield>textarea:disabled:placeholder-shown+span:before,.vot-textfield>textarea:disabled:placeholder-shown+span:after{border-top-color:#0000!important}@media not all and (-webkit-min-device-pixel-ratio:.0000264583),not all and (min-resolution:.001dpcm){@supports ((-webkit-appearance:none)){.vot-textfield>input,.vot-textfield>input+span,.vot-textfield>textarea,.vot-textfield>textarea+span,.vot-textfield>input+span:before,.vot-textfield>input+span:after,.vot-textfield>textarea+span:before,.vot-textfield>textarea+span:after{transition-duration:.1s!important}}}.vot-checkbox{--vot-helper-theme:var(--vot-theme-rgb,var(--vot-primary-rgb,33,150,243));--vot-helper-ontheme:var(--vot-ontheme-rgb,var(--vot-onprimary-rgb,255,255,255));z-index:0;color:rgba(var(--vot-onsurface-rgb,0,0,0),.87);font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system);text-align:start;font-size:16px;line-height:1.5;display:inline-block;position:relative}.vot-checkbox[hidden]{display:none!important}.vot-checkbox>input{-webkit-appearance:none;appearance:none;z-index:10000;box-sizing:border-box;border:2px solid;border-color:rgba(var(--vot-onsurface-rgb,0,0,0),.6);cursor:pointer;background:0 0;border-radius:2px;outline:none;width:18px;height:18px;margin:3px 1px;transition:border-color .2s,background-color .2s;display:block;position:absolute}.vot-checkbox>input+span{box-sizing:border-box;width:inherit;cursor:pointer;padding-left:30px;font-weight:400;display:inline-block}.vot-checkbox>input+span:before{content:\"\";background-color:rgb(var(--vot-onsurface-rgb,0,0,0));opacity:0;pointer-events:none;border-radius:50%;width:40px;height:40px;transition:opacity .3s,transform .2s;display:block;position:absolute;top:-8px;left:-10px;transform:scale(1)}.vot-checkbox>input+span:after{content:\"\";z-index:10000;pointer-events:none;border:0 solid #0000;border-width:0 0 2px 2px;width:10px;height:5px;transition:border-color .2s;display:block;position:absolute;top:3px;left:1px;transform:translate(3px,4px)rotate(-45deg);box-sizing:content-box!important}.vot-checkbox>input:checked,.vot-checkbox>input:indeterminate{border-color:rgb(var(--vot-helper-theme));background-color:rgb(var(--vot-helper-theme))}.vot-checkbox>input:checked+span:before,.vot-checkbox>input:indeterminate+span:before{background-color:rgb(var(--vot-helper-theme))}.vot-checkbox>input:checked+span:after,.vot-checkbox>input:indeterminate+span:after{border-color:rgb(var(--vot-helper-ontheme,255,255,255))}.vot-checkbox>input:indeterminate+span:after{border-left-width:0;transform:translate(4px,3px)}.vot-checkbox:hover>input+span:before{opacity:.04}.vot-checkbox:active>input,.vot-checkbox:active:hover>input{border-color:rgb(var(--vot-helper-theme))}.vot-checkbox:active>input:checked{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.6);border-color:#0000}.vot-checkbox:active>input+span:before{opacity:1;transition:transform,opacity;transform:scale(0)}.vot-checkbox>input:disabled{border-color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);cursor:initial}.vot-checkbox>input:disabled:checked,.vot-checkbox>input:disabled:indeterminate{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);border-color:#0000}.vot-checkbox>input:disabled+span{color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);cursor:initial}.vot-checkbox>input:disabled+span:before{opacity:0;transform:scale(0)}.vot-slider{display:inline-block;--vot-safari-helper1:rgba(var(--vot-primary-rgb,33,150,243),.04)!important;--vot-safari-helper2:rgba(var(--vot-primary-rgb,33,150,243),.12)!important;--vot-safari-helper3:rgba(var(--vot-primary-rgb,33,150,243),.16)!important;--vot-safari-helper4:rgba(var(--vot-primary-rgb,33,150,243),.24)!important;color:rgba(var(--vot-onsurface-rgb,0,0,0),.87)!important;font-family:var(--vot-font,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system)!important;text-align:start!important;width:100%!important;font-size:16px!important;line-height:1.5!important}.vot-slider[hidden]{display:none!important}.vot-slider>input{-webkit-appearance:none!important;appearance:none!important;cursor:pointer!important;background-color:#0000!important;width:100%!important;height:36px!important;margin:0 0 -36px!important;display:block!important;position:relative!important;top:24px!important}.vot-slider>input:last-child{margin:0!important;position:static!important}.vot-slider>input:before{content:\"\"!important;width:calc(100%*var(--vot-progress,0))!important;background:rgb(var(--vot-primary-rgb,33,150,243))!important;height:2px!important;display:block!important;position:absolute!important;top:calc(50% - 1px)!important}.vot-slider>input:disabled{cursor:default!important;opacity:.38!important}.vot-slider>input:disabled+span{color:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important}.vot-slider>input:disabled::-webkit-slider-runnable-track{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important}.vot-slider>input:disabled::-moz-range-track{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important}.vot-slider>input:disabled::-ms-fill-lower{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important}.vot-slider>input:disabled::-ms-fill-upper{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important}.vot-slider>input:disabled::-moz-range-thumb{background-color:rgb(var(--vot-onsurface-rgb,0,0,0))!important;box-shadow:0 0 0 1px rgb(var(--vot-surface-rgb,255,255,255))!important;transform:scale(4)!important}.vot-slider>input:disabled::-ms-thumb{background-color:rgb(var(--vot-onsurface-rgb,0,0,0))!important;box-shadow:0 0 0 1px rgb(var(--vot-surface-rgb,255,255,255))!important;transform:scale(4)!important}.vot-slider>input:disabled::-webkit-slider-thumb{background-color:rgb(var(--vot-onsurface-rgb,0,0,0))!important;box-shadow:0 0 0 1px rgb(var(--vot-surface-rgb,255,255,255))!important;transform:scale(4)!important}.vot-slider>input:disabled::-ms-fill-upper{opacity:.38!important}.vot-slider>input:disabled::-moz-range-progress{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.87)!important}.vot-slider>input:disabled:-webkit-slider-thumb{color:rgb(var(--vot-surface-rgb,255,255,255))!important}.vot-slider>input:active::-webkit-slider-thumb{box-shadow:0 0 0 2px var(--vot-safari-helper4)!important}.vot-slider>input:active::-moz-range-thumb{box-shadow:0 0 0 2px rgba(var(--vot-primary-rgb,33,150,243),.24)!important}.vot-slider>input:active::-ms-thumb{box-shadow:0 0 0 2px rgba(var(--vot-primary-rgb,33,150,243),.24)!important}.vot-slider>input:focus{outline:none!important}.vot-slider>input::-webkit-slider-runnable-track{background-color:rgba(var(--vot-primary-rgb,33,150,243),.24)!important;border-radius:1px!important;width:100%!important;height:2px!important;margin:17px 0!important}.vot-slider>input::-moz-range-track{background-color:rgba(var(--vot-primary-rgb,33,150,243),.24)!important;border-radius:1px!important;width:100%!important;height:2px!important;margin:17px 0!important}.vot-slider>input::-ms-track{box-sizing:border-box!important;background-color:#0000!important;border:none!important;border-radius:1px!important;width:100%!important;height:2px!important;margin:17px 0!important;padding:0 17px!important}.vot-slider>input::-webkit-slider-thumb{-webkit-appearance:none!important;appearance:none!important;background-color:rgb(var(--vot-primary-rgb,33,150,243))!important;border:none!important;border-radius:50%!important;width:2px!important;height:2px!important;transition:box-shadow .2s!important;transform:scale(6)!important}.vot-slider>input::-moz-range-thumb{-webkit-appearance:none!important;appearance:none!important;background-color:rgb(var(--vot-primary-rgb,33,150,243))!important;border:none!important;border-radius:50%!important;width:2px!important;height:2px!important;transition:box-shadow .2s!important;transform:scale(6)!important}.vot-slider>input::-ms-thumb{-webkit-appearance:none!important;appearance:none!important;background-color:rgb(var(--vot-primary-rgb,33,150,243))!important;border:none!important;border-radius:50%!important;width:2px!important;height:2px!important;transition:box-shadow .2s!important;transform:scale(6)!important}.vot-slider>input::-webkit-slider-thumb{-webkit-appearance:none!important;margin:0!important}.vot-slider>input::-moz-range-thumb{-moz-appearance:none!important}.vot-slider>input::-ms-thumb{margin:0 17px!important}.vot-slider>input::-moz-range-progress{background-color:rgb(var(--vot-primary-rgb,33,150,243))!important;border-radius:1px!important;height:2px!important}.vot-slider>input::-ms-fill-lower{background-color:rgb(var(--vot-primary-rgb,33,150,243))!important;border-radius:1px!important;height:2px!important}.vot-slider>input::-ms-fill-upper{background-color:rgb(var(--vot-primary-rgb,33,150,243))!important;border-radius:1px!important;height:2px!important}.vot-slider>input::-moz-focus-outer{border:none!important}.vot-slider>span{margin-bottom:36px!important;display:inline-block!important}.vot-slider:hover>input::-webkit-slider-thumb{box-shadow:0 0 0 2px var(--vot-safari-helper1)!important}.vot-slider:hover>input::-ms-thumb{box-shadow:0 0 0 2px rgba(var(--vot-primary-rgb,33,150,243),.04)!important}.vot-slider:hover>input:hover::-moz-range-thumb{box-shadow:0 0 0 2px rgba(var(--vot-primary-rgb,33,150,243),.04)!important}.vot-select{font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system);text-align:start;color:var(--vot-helper-theme);fill:var(--vot-helper-theme);justify-content:space-between;align-items:center;font-size:14px;font-weight:400;line-height:1.5;display:flex;--vot-helper-theme-rgb:var(--vot-onsurface-rgb,0,0,0)!important;--vot-helper-theme:rgba(var(--vot-helper-theme-rgb),.87)!important;--vot-helper-safari1:rgba(var(--vot-onsurface-rgb,0,0,0),.6)!important;--vot-helper-safari2:rgba(var(--vot-onsurface-rgb,0,0,0),.87)!important}.vot-select[hidden]{display:none!important}.vot-select-label{font-size:16px}.vot-select-outer{cursor:pointer;justify-content:space-between;align-items:center;width:120px;max-width:120px;padding:0 5px;display:flex;border-style:solid!important;border-width:1px!important;border-color:var(--vot-helper-safari1)!important;border-radius:4px!important;transition:border .2s!important}.vot-select-outer:hover{border-color:var(--vot-helper-safari2)!important}.vot-select-title{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.vot-select-arrow-icon{justify-content:center;align-items:center;width:20px;height:32px;display:flex}.vot-select-content-list{flex-direction:column;display:flex}.vot-select-content-list .vot-select-content-item{cursor:pointer;border-radius:8px;padding:5px 10px}.vot-select-content-list .vot-select-content-item:not([inert]):hover{background-color:#2a2c31}.vot-select-content-list .vot-select-content-item[data-vot-selected=true]{color:rgb(var(--vot-primary-rgb,33,150,243));background-color:rgba(var(--vot-primary-rgb,33,150,243),.2)}.vot-select-content-list .vot-select-content-item[data-vot-selected=true]:hover{background-color:rgba(var(--vot-primary-rgb,33,150,243),.1)!important}.vot-select-content-list .vot-select-content-item[data-vot-disabled=true]{cursor:default}.vot-select-content-list .vot-select-content-item[hidden]{display:none!important}.vot-header{color:rgba(var(--vot-helper-onsurface-rgb),.87);font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system);text-align:start;font-weight:700;line-height:1.5}.vot-header[hidden]{display:none!important}.vot-header:not(:first-child){padding-top:8px}.vot-header-level-1{font-size:2em}.vot-header-level-2{font-size:1.5em}.vot-header-level-3{font-size:1.17em}.vot-header-level-4{font-size:1em}.vot-header-level-5{font-size:.83em}.vot-header-level-6{font-size:.67em}.vot-info{color:rgba(var(--vot-helper-onsurface-rgb),.87);font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system);text-align:start;-webkit-user-select:text;user-select:text;font-size:16px;line-height:1.5;display:flex}.vot-info[hidden]{display:none!important}.vot-info>:not(:first-child){color:rgba(var(--vot-helper-onsurface-rgb),.5);flex:1;margin-left:8px}.vot-details{color:rgba(var(--vot-helper-onsurface-rgb),.87);font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system);text-align:start;cursor:pointer;border-radius:.5em;justify-content:space-between;align-items:center;margin:0 -.5em;padding:.5em;font-size:16px;line-height:1.5;transition:background .5s;display:flex}.vot-details[hidden]{display:none!important}.vot-details-arrow-icon{fill:rgba(var(--vot-helper-onsurface-rgb),.87);justify-content:center;align-items:center;width:20px;height:32px;display:flex;transform:scale(1.25)rotate(-90deg)}.vot-details:hover{background:rgba(var(--vot-onsurface-rgb,0,0,0),.04)}.vot-lang-select{--vot-helper-theme-rgb:var(--vot-onsurface-rgb,0,0,0);--vot-helper-theme:rgba(var(--vot-helper-theme-rgb),.87);color:var(--vot-helper-theme);fill:var(--vot-helper-theme);justify-content:space-between;align-items:center;display:flex}.vot-lang-select[hidden]{display:none!important}.vot-lang-select-icon{justify-content:center;align-items:center;width:32px;height:32px;display:flex}.vot-segmented-button{--vot-helper-theme-rgb:var(--vot-onsurface-rgb,0,0,0);--vot-helper-theme:rgba(var(--vot-helper-theme-rgb),.87);-webkit-user-select:none;user-select:none;background:rgb(var(--vot-surface-rgb,255,255,255));color:var(--vot-helper-theme);fill:var(--vot-helper-theme);font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system);cursor:default;z-index:2147483647;border-radius:4px;align-items:center;max-width:100vw;height:32px;font-size:16px;line-height:1.5;transition:opacity .5s;display:flex;position:absolute;top:5rem;left:50%;overflow:hidden;transform:translate(-50%)}.vot-segmented-button[hidden]{display:none!important}.vot-segmented-button *{box-sizing:border-box!important}.vot-segmented-button .vot-separator{background:rgba(var(--vot-helper-theme-rgb),.1);width:1px;height:50%}.vot-segmented-button .vot-separator[hidden]{display:none!important}.vot-segmented-button .vot-segment,.vot-segmented-button .vot-segment-only-icon{color:inherit;background-color:#0000;border:none;justify-content:center;align-items:center;height:100%;padding:0 8px;transition:background-color .1s ease-in-out;display:flex;position:relative;overflow:hidden}.vot-segmented-button .vot-segment[hidden],.vot-segmented-button [hidden].vot-segment-only-icon{display:none!important}.vot-segmented-button .vot-segment:before,.vot-segmented-button .vot-segment-only-icon:before,.vot-segmented-button .vot-segment:after,.vot-segmented-button .vot-segment-only-icon:after{content:\"\";border-radius:inherit;opacity:0;position:absolute;top:0;bottom:0;left:0;right:0}.vot-segmented-button .vot-segment:before,.vot-segmented-button .vot-segment-only-icon:before{background-color:rgb(var(--vot-helper-theme-rgb));transition:opacity .2s}.vot-segmented-button .vot-segment:after,.vot-segmented-button .vot-segment-only-icon:after{background:radial-gradient(circle,currentColor 1%,#0000 1%) 50%/10000% 10000% no-repeat;transition:opacity 1s,background-size .5s}.vot-segmented-button .vot-segment:hover:before,.vot-segmented-button .vot-segment-only-icon:hover:before{opacity:.04}.vot-segmented-button .vot-segment:active:after,.vot-segmented-button .vot-segment-only-icon:active:after{opacity:.16;background-size:100% 100%;transition:background-size}.vot-segmented-button .vot-segment-only-icon{min-width:32px;padding:0}.vot-segmented-button .vot-segment-label{white-space:nowrap;color:inherit;margin-left:8px;font-weight:400}.vot-segmented-button[data-status=success] .vot-translate-button{color:rgb(var(--vot-primary-rgb,33,150,243));fill:rgb(var(--vot-primary-rgb,33,150,243))}.vot-segmented-button[data-status=error] .vot-translate-button{color:#f28b82;fill:#f28b82}.vot-segmented-button[data-loading=true] #vot-loading-icon{display:block!important}.vot-segmented-button[data-loading=true] #vot-translate-icon{display:none!important}.vot-segmented-button[data-direction=column]{flex-direction:column;height:fit-content}.vot-segmented-button[data-direction=column] .vot-segment-label{display:none}.vot-segmented-button[data-direction=column]>.vot-segment-only-icon,.vot-segmented-button[data-direction=column]>.vot-segment{padding:8px}.vot-segmented-button[data-direction=column] .vot-separator{width:50%;height:1px}.vot-segmented-button[data-position=left]{top:12.5vh;left:50px}.vot-segmented-button[data-position=right]{top:12.5vh;left:auto;right:0}.vot-segmented-button svg{width:24px}.vot-menu{--vot-helper-surface-rgb:var(--vot-surface-rgb,255,255,255);--vot-helper-surface:rgb(var(--vot-helper-surface-rgb));--vot-helper-onsurface-rgb:var(--vot-onsurface-rgb,0,0,0);--vot-helper-onsurface:rgba(var(--vot-helper-onsurface-rgb),.87);-webkit-user-select:none;user-select:none;background-color:var(--vot-helper-surface);color:var(--vot-helper-onsurface);font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system);cursor:default;z-index:2147483647;visibility:visible;opacity:1;transform-origin:top;border-radius:8px;min-width:300px;font-size:16px;line-height:1.5;transition:opacity .3s,transform .1s;position:absolute;top:calc(5rem + 48px);left:50%;overflow:hidden;transform:translate(-50%)scale(1)}.vot-menu *{box-sizing:border-box!important}.vot-menu[hidden]{pointer-events:none;visibility:hidden;opacity:0;transform:translate(-50%)scale(0);display:block!important}.vot-menu-content-wrapper{max-height:calc(var(--vot-container-height,75vh) - (5rem + 32px + 16px)*2);flex-direction:column;min-height:100px;display:flex;overflow:auto}.vot-menu-header-container{flex-shrink:0;align-items:flex-start;min-height:31px;display:flex}.vot-menu-header-container:empty{padding:0 0 16px}.vot-menu-header-container>.vot-icon-button{margin-inline-end:4px;margin-top:4px}.vot-menu-title-container{font-size:inherit;font-weight:inherit;text-align:start;outline:0;flex:1;margin:0;display:flex}.vot-menu-title{padding-bottom:16px;padding-inline-start:16px;padding-inline-end:16px;flex:1;padding-top:16px;font-size:16px;font-weight:400;line-height:1}.vot-menu-body-container{box-sizing:border-box;overscroll-behavior:contain;flex-direction:column;gap:8px;min-height:1.375rem;padding:0 16px;display:flex;overflow:auto;scrollbar-color:rgba(var(--vot-helper-onsurface-rgb),.1)var(--vot-helper-surface)!important}.vot-menu-body-container::-webkit-scrollbar{background:var(--vot-helper-surface)!important;width:12px!important;height:12px!important}.vot-menu-body-container::-webkit-scrollbar-track{background:var(--vot-helper-surface)!important;width:12px!important;height:12px!important}.vot-menu-body-container::-webkit-scrollbar-thumb{background:rgba(var(--vot-helper-onsurface-rgb),.1)!important;border:5px solid var(--vot-helper-surface)!important;-webkit-border-radius:1ex!important}.vot-menu-body-container::-webkit-scrollbar-thumb:hover{border:3px solid var(--vot-helper-surface)!important}.vot-menu-body-container::-webkit-scrollbar-corner{background:var(--vot-helper-surface)!important}.vot-menu-footer-container{padding-bottom:16px;padding-inline-start:16px;padding-inline-end:16px;flex-shrink:0;justify-content:flex-end;padding-top:16px;display:flex}.vot-menu-footer-container:empty{padding:16px 0 0}.vot-menu[data-position=left]{top:12.5vh;left:240px}.vot-menu[data-position=right]{top:12.5vh;left:auto;right:-80px}.vot-dialog{--vot-helper-surface-rgb:var(--vot-surface-rgb,255,255,255);--vot-helper-surface:rgb(var(--vot-helper-surface-rgb));--vot-helper-onsurface-rgb:var(--vot-onsurface-rgb,0,0,0);--vot-helper-onsurface:rgba(var(--vot-helper-onsurface-rgb),.87);max-width:initial;max-height:initial;width:min(var(--vot-dialog-width,512px),100%);top:50%;bottom:50%;background-color:var(--vot-helper-surface);color:var(--vot-helper-onsurface);font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system);-webkit-user-select:none;user-select:none;visibility:visible;opacity:1;transform-origin:50%;border-radius:8px;height:fit-content;margin:auto;padding:0;font-size:16px;line-height:1.5;transition:opacity .3s,transform .1s;display:block;position:fixed;top:0;bottom:0;left:0;right:0;overflow-x:auto;overflow-y:hidden;transform:scale(1);box-shadow:0 0 16px #0000001f,0 16px 16px #0000003d}[hidden]>.vot-dialog{pointer-events:none;opacity:0;transition:opacity .1s,transform .2s;transform:scale(.5)}.vot-dialog-container{visibility:visible;z-index:2147483647;position:absolute}.vot-dialog-container[hidden]{pointer-events:none;visibility:hidden;display:block!important}.vot-dialog-container *{box-sizing:border-box!important}.vot-dialog-backdrop{opacity:1;background-color:#0009;transition:opacity .3s;position:fixed;top:0;bottom:0;left:0;right:0}[hidden]>.vot-dialog-backdrop{pointer-events:none;opacity:0}.vot-dialog-content-wrapper{flex-direction:column;max-height:75vh;display:flex;overflow:auto}.vot-dialog-header-container{flex-shrink:0;align-items:flex-start;min-height:31px;display:flex}.vot-dialog-header-container:empty{padding:0 0 20px}.vot-dialog-header-container>.vot-icon-button{margin-inline-end:4px;margin-top:4px}.vot-dialog-title-container{font-size:inherit;font-weight:inherit;outline:0;flex:1;margin:0;display:flex}.vot-dialog-title{padding-bottom:16px;padding-inline-start:20px;padding-inline-end:20px;flex:1;padding-top:20px;font-size:115.385%;font-weight:700;line-height:1}.vot-dialog-body-container{box-sizing:border-box;overscroll-behavior:contain;flex-direction:column;gap:16px;min-height:1.375rem;padding:0 20px;display:flex;overflow:auto;scrollbar-color:rgba(var(--vot-helper-onsurface-rgb),.1)var(--vot-helper-surface)!important}.vot-dialog-body-container::-webkit-scrollbar{background:var(--vot-helper-surface)!important;width:12px!important;height:12px!important}.vot-dialog-body-container::-webkit-scrollbar-track{background:var(--vot-helper-surface)!important;width:12px!important;height:12px!important}.vot-dialog-body-container::-webkit-scrollbar-thumb{background:rgba(var(--vot-helper-onsurface-rgb),.1)!important;border:5px solid var(--vot-helper-surface)!important;-webkit-border-radius:1ex!important}.vot-dialog-body-container::-webkit-scrollbar-thumb:hover{border:3px solid var(--vot-helper-surface)!important}.vot-dialog-body-container::-webkit-scrollbar-corner{background:var(--vot-helper-surface)!important}.vot-dialog-footer-container{padding-bottom:16px;padding-inline-start:16px;padding-inline-end:16px;flex-shrink:0;justify-content:flex-end;padding-top:16px;display:flex}.vot-dialog-footer-container:empty{padding:20px 0 0}.vot-subtitles-widget{z-index:2147483647;pointer-events:none;justify-content:center;align-items:center;width:50%;min-height:20%;max-height:100%;display:flex;position:absolute;top:75%;left:25%}.vot-subtitles{--vot-subtitles-background:rgba(var(--vot-surface-rgb,46,47,52),var(--vot-subtitles-opacity,.8));background:var(--vot-subtitles-background,#2e2f34cc);color:var(--vot-subtitles-color,#e3e3e3);pointer-events:all;box-sizing:border-box;-webkit-user-select:none;user-select:none;border-radius:.5em;width:max-content;max-width:100%;max-height:100%;padding:.5em;font-size:20px;line-height:normal;position:relative}.vot-subtitles span{-webkit-user-select:text;user-select:text;font-size:inherit!important;line-height:normal!important}.vot-subtitles .passed{color:var(--vot-subtitles-passed-color,#2196f3)}:root{--vot-font-family:\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system;--vot-primary-rgb:139,180,245;--vot-onprimary-rgb:32,33,36;--vot-surface-rgb:32,33,36;--vot-onsurface-rgb:227,227,227;--vot-subtitles-color:rgb(var(--vot-onsurface-rgb,227,227,227));--vot-subtitles-passed-color:rgb(var(--vot-primary-rgb,33,150,243))}vot-block{display:block;visibility:visible!important}") +GM_addStyle(".vot-button{--vot-helper-theme:var(--vot-theme-rgb,var(--vot-primary-rgb,33,150,243));--vot-helper-ontheme:var(--vot-ontheme-rgb,var(--vot-onprimary-rgb,255,255,255));box-sizing:border-box;vertical-align:middle;text-align:center;text-overflow:ellipsis;color:rgb(var(--vot-helper-ontheme));background-color:rgb(var(--vot-helper-theme));font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system);cursor:pointer;border:none;border-radius:4px;outline:none;min-width:64px;height:36px;padding:0 16px;font-size:14px;font-weight:500;line-height:36px;transition:box-shadow .2s;display:inline-block;position:relative;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.vot-button[hidden]{display:none!important}.vot-button::-moz-focus-inner{border:none}.vot-button:before,.vot-button:after{content:\"\";border-radius:inherit;opacity:0;position:absolute;top:0;bottom:0;left:0;right:0}.vot-button:before{background-color:rgb(var(--vot-helper-ontheme));transition:opacity .2s}.vot-button:after{background:radial-gradient(circle,currentColor 1%,#0000 1%) 50%/10000% 10000% no-repeat;transition:opacity 1s,background-size .5s}.vot-button:hover{box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.vot-button:hover:before{opacity:.08}.vot-button:active{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.vot-button:active:after{opacity:.32;background-size:100% 100%;transition:background-size}.vot-button[disabled=true]{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.12);color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);box-shadow:none;cursor:initial}.vot-button[disabled=true]:before,.vot-button[disabled=true]:after{opacity:0}.vot-outlined-button{--vot-helper-theme:var(--vot-theme-rgb,var(--vot-primary-rgb,33,150,243));box-sizing:border-box;border:1px solid;border-color:rgba(var(--vot-onsurface-rgb,0,0,0),.24);vertical-align:middle;text-align:center;text-overflow:ellipsis;color:rgb(var(--vot-helper-theme));font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system);cursor:pointer;background-color:#0000;border-radius:4px;outline:none;min-width:64px;height:36px;margin:0;padding:0 16px;font-size:14px;font-weight:500;line-height:34px;display:inline-block;position:relative}.vot-outlined-button[hidden]{display:none!important}.vot-outlined-button::-moz-focus-inner{border:none}.vot-outlined-button:before,.vot-outlined-button:after{content:\"\";opacity:0;border-radius:3px;position:absolute;top:0;bottom:0;left:0;right:0}.vot-outlined-button:before{background-color:rgb(var(--vot-helper-theme));transition:opacity .2s}.vot-outlined-button:after{background:radial-gradient(circle,currentColor 1%,#0000 1%) 50%/10000% 10000% no-repeat;transition:opacity 1s,background-size .5s}.vot-outlined-button:hover:before{opacity:.04}.vot-outlined-button:active:after{opacity:.16;background-size:100% 100%;transition:background-size}.vot-outlined-button[disabled=true]{color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);cursor:initial;background-color:#0000}.vot-outlined-button[disabled=true]:before,.vot-outlined-button[disabled=true]:after{opacity:0}.vot-text-button{--vot-helper-theme:var(--vot-theme-rgb,var(--vot-primary-rgb,33,150,243));box-sizing:border-box;vertical-align:middle;text-align:center;text-overflow:ellipsis;color:rgb(var(--vot-helper-theme));font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system);cursor:pointer;background-color:#0000;border:none;border-radius:4px;outline:none;min-width:64px;height:36px;margin:0;padding:0 8px;font-size:14px;font-weight:500;line-height:36px;display:inline-block;position:relative}.vot-text-button[hidden]{display:none!important}.vot-text-button::-moz-focus-inner{border:none}.vot-text-button:before,.vot-text-button:after{content:\"\";border-radius:inherit;opacity:0;position:absolute;top:0;bottom:0;left:0;right:0}.vot-text-button:before{background-color:rgb(var(--vot-helper-theme));transition:opacity .2s}.vot-text-button:after{background:radial-gradient(circle,currentColor 1%,#0000 1%) 50%/10000% 10000% no-repeat;transition:opacity 1s,background-size .5s}.vot-text-button:hover:before{opacity:.04}.vot-text-button:active:after{opacity:.16;background-size:100% 100%;transition:background-size}.vot-text-button[disabled=true]{color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);cursor:initial;background-color:#0000}.vot-text-button[disabled=true]:before,.vot-text-button[disabled=true]:after{opacity:0}.vot-icon-button{--vot-helper-onsurface:rgba(var(--vot-onsurface-rgb,0,0,0),.87);box-sizing:border-box;vertical-align:middle;text-align:center;text-overflow:ellipsis;fill:var(--vot-helper-onsurface);color:var(--vot-helper-onsurface);font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system);cursor:pointer;background-color:#0000;border:none;border-radius:50%;outline:none;width:36px;height:36px;margin:0;padding:0;font-size:14px;font-weight:500;line-height:36px;display:inline-block;position:relative}.vot-icon-button[hidden]{display:none!important}.vot-icon-button::-moz-focus-inner{border:none}.vot-icon-button:before,.vot-icon-button:after{content:\"\";border-radius:inherit;opacity:0;position:absolute;top:0;bottom:0;left:0;right:0}.vot-icon-button:before{background-color:var(--vot-helper-onsurface);transition:opacity .2s}.vot-icon-button:after{background:radial-gradient(circle,currentColor 1%,#0000 1%) 50%/10000% 10000% no-repeat;transition:opacity .3s,background-size .4s}.vot-icon-button:hover:before{opacity:.04}.vot-icon-button:active:after{opacity:.32;background-size:100% 100%;transition:background-size,opacity}.vot-icon-button[disabled=true]{color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);fill:rgba(var(--vot-onsurface-rgb,0,0,0),.38);cursor:initial;background-color:#0000}.vot-icon-button[disabled=true]:before,.vot-icon-button[disabled=true]:after{opacity:0}.vot-textfield{display:inline-block;--vot-helper-theme:rgb(var(--vot-theme-rgb,var(--vot-primary-rgb,33,150,243)))!important;--vot-helper-safari1:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important;--vot-helper-safari2:rgba(var(--vot-onsurface-rgb,0,0,0),.6)!important;--vot-helper-safari3:rgba(var(--vot-onsurface-rgb,0,0,0),.87)!important;font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system)!important;text-align:start!important;padding-top:6px!important;font-size:16px!important;line-height:1.5!important;position:relative!important}.vot-textfield[hidden]{display:none!important}.vot-textfield>input,.vot-textfield>textarea{box-sizing:border-box!important;border-style:solid!important;border-width:1px!important;border-color:transparent var(--vot-helper-safari2)var(--vot-helper-safari2)!important;height:inherit!important;color:rgba(var(--vot-onsurface-rgb,0,0,0),.87)!important;-webkit-text-fill-color:currentColor!important;font-family:inherit!important;font-size:inherit!important;line-height:inherit!important;caret-color:var(--vot-helper-theme)!important;background-color:#0000!important;border-radius:4px!important;width:100%!important;margin:0!important;padding:15px 13px!important;transition:border .2s,box-shadow .2s!important;box-shadow:inset 1px 0 #0000,inset -1px 0 #0000,inset 0 -1px #0000!important}.vot-textfield>input:not(:focus):not(.vot-show-placeholer)::-moz-placeholder{color:#0000!important}.vot-textfield>textarea:not(:focus):not(.vot-show-placeholer)::-moz-placeholder{color:#0000!important}.vot-textfield>input:not(:focus):not(.vot-show-placeholer)::-moz-placeholder{color:#0000!important}.vot-textfield>textarea:not(:focus):not(.vot-show-placeholer)::-moz-placeholder{color:#0000!important}.vot-textfield>input:not(:focus):not(.vot-show-placeholer)::-webkit-input-placeholder{color:#0000!important}.vot-textfield>textarea:not(:focus):not(.vot-show-placeholer)::-webkit-input-placeholder{color:#0000!important}.vot-textfield>input:not(:focus):placeholder-shown,.vot-textfield>textarea:not(:focus):placeholder-shown{border-top-color:var(--vot-helper-safari2)!important}.vot-textfield>input+span,.vot-textfield>textarea+span{color:rgba(var(--vot-onsurface-rgb,0,0,0),.6)!important;cursor:text!important;pointer-events:none!important;width:100%!important;max-height:100%!important;font-size:75%!important;line-height:15px!important;transition:color .2s,font-size .2s,line-height .2s!important;display:flex!important;position:absolute!important;top:0!important;left:0!important}.vot-textfield>input:not(:focus):placeholder-shown+span,.vot-textfield>textarea:not(:focus):placeholder-shown+span{font-size:inherit!important;line-height:68px!important}.vot-textfield>input+span:before,.vot-textfield>input+span:after,.vot-textfield>textarea+span:before,.vot-textfield>textarea+span:after{content:\"\"!important;box-sizing:border-box!important;border-top:solid 1px var(--vot-helper-safari2)!important;pointer-events:none!important;min-width:10px!important;height:8px!important;margin-top:6px!important;transition:border .2s,box-shadow .2s!important;display:block!important;box-shadow:inset 0 1px #0000!important}.vot-textfield>input+span:before,.vot-textfield>textarea+span:before{border-left:1px solid #0000!important;border-radius:4px 0!important;margin-right:4px!important}.vot-textfield>input+span:after,.vot-textfield>textarea+span:after{border-right:1px solid #0000!important;border-radius:0 4px!important;flex-grow:1!important;margin-left:4px!important}.vot-textfield>input.vot-show-placeholer+span:before,.vot-textfield>textarea.vot-show-placeholer+span:before{margin-right:0!important}.vot-textfield>input.vot-show-placeholer+span:after,.vot-textfield>textarea.vot-show-placeholer+span:after{margin-left:0!important}.vot-textfield>input:not(:focus):placeholder-shown+span:before,.vot-textfield>input:not(:focus):placeholder-shown+span:after,.vot-textfield>textarea:not(:focus):placeholder-shown+span:before,.vot-textfield>textarea:not(:focus):placeholder-shown+span:after{border-top-color:#0000!important}.vot-textfield:hover>input:not(:disabled),.vot-textfield:hover>textarea:not(:disabled){border-color:transparent var(--vot-helper-safari3)var(--vot-helper-safari3)!important}.vot-textfield:hover>input:not(:disabled)+span:before,.vot-textfield:hover>input:not(:disabled)+span:after,.vot-textfield:hover>textarea:not(:disabled)+span:before,.vot-textfield:hover>textarea:not(:disabled)+span:after{border-top-color:var(--vot-helper-safari3)!important}.vot-textfield:hover>input:not(:disabled):not(:focus):placeholder-shown,.vot-textfield:hover>textarea:not(:disabled):not(:focus):placeholder-shown{border-color:var(--vot-helper-safari3)!important}.vot-textfield>input:focus,.vot-textfield>textarea:focus{border-color:transparent var(--vot-helper-theme)var(--vot-helper-theme)!important;box-shadow:inset 1px 0 var(--vot-helper-theme),inset -1px 0 var(--vot-helper-theme),inset 0 -1px var(--vot-helper-theme)!important;outline:none!important}.vot-textfield>input:focus+span,.vot-textfield>textarea:focus+span{color:var(--vot-helper-theme)!important}.vot-textfield>input:focus+span:before,.vot-textfield>input:focus+span:after,.vot-textfield>textarea:focus+span:before,.vot-textfield>textarea:focus+span:after{border-top-color:var(--vot-helper-theme)!important;box-shadow:inset 0 1px var(--vot-helper-theme)!important}.vot-textfield>input:disabled,.vot-textfield>input:disabled+span,.vot-textfield>textarea:disabled,.vot-textfield>textarea:disabled+span{border-color:transparent var(--vot-helper-safari1)var(--vot-helper-safari1)!important;color:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important;pointer-events:none!important}.vot-textfield>input:disabled+span:before,.vot-textfield>input:disabled+span:after,.vot-textfield>textarea:disabled+span:before,.vot-textfield>textarea:disabled+span:after,.vot-textfield>input:disabled:placeholder-shown,.vot-textfield>input:disabled:placeholder-shown+span,.vot-textfield>textarea:disabled:placeholder-shown,.vot-textfield>textarea:disabled:placeholder-shown+span{border-top-color:var(--vot-helper-safari1)!important}.vot-textfield>input:disabled:placeholder-shown+span:before,.vot-textfield>input:disabled:placeholder-shown+span:after,.vot-textfield>textarea:disabled:placeholder-shown+span:before,.vot-textfield>textarea:disabled:placeholder-shown+span:after{border-top-color:#0000!important}@media not all and (-webkit-min-device-pixel-ratio:.0000264583),not all and (min-resolution:.001dpcm){@supports ((-webkit-appearance:none)){.vot-textfield>input,.vot-textfield>input+span,.vot-textfield>textarea,.vot-textfield>textarea+span,.vot-textfield>input+span:before,.vot-textfield>input+span:after,.vot-textfield>textarea+span:before,.vot-textfield>textarea+span:after{transition-duration:.1s!important}}}.vot-checkbox{--vot-helper-theme:var(--vot-theme-rgb,var(--vot-primary-rgb,33,150,243));--vot-helper-ontheme:var(--vot-ontheme-rgb,var(--vot-onprimary-rgb,255,255,255));z-index:0;color:rgba(var(--vot-onsurface-rgb,0,0,0),.87);font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system);text-align:start;font-size:16px;line-height:1.5;display:inline-block;position:relative}.vot-checkbox[hidden]{display:none!important}.vot-checkbox>input{-webkit-appearance:none;appearance:none;z-index:10000;box-sizing:border-box;border:2px solid;border-color:rgba(var(--vot-onsurface-rgb,0,0,0),.6);cursor:pointer;background:0 0;border-radius:2px;outline:none;width:18px;height:18px;margin:3px 1px;transition:border-color .2s,background-color .2s;display:block;position:absolute}.vot-checkbox>input+span{box-sizing:border-box;width:inherit;cursor:pointer;padding-left:30px;font-weight:400;display:inline-block}.vot-checkbox>input+span:before{content:\"\";background-color:rgb(var(--vot-onsurface-rgb,0,0,0));opacity:0;pointer-events:none;border-radius:50%;width:40px;height:40px;transition:opacity .3s,transform .2s;display:block;position:absolute;top:-8px;left:-10px;transform:scale(1)}.vot-checkbox>input+span:after{content:\"\";z-index:10000;pointer-events:none;border:0 solid #0000;border-width:0 0 2px 2px;width:10px;height:5px;transition:border-color .2s;display:block;position:absolute;top:3px;left:1px;transform:translate(3px,4px)rotate(-45deg);box-sizing:content-box!important}.vot-checkbox>input:checked,.vot-checkbox>input:indeterminate{border-color:rgb(var(--vot-helper-theme));background-color:rgb(var(--vot-helper-theme))}.vot-checkbox>input:checked+span:before,.vot-checkbox>input:indeterminate+span:before{background-color:rgb(var(--vot-helper-theme))}.vot-checkbox>input:checked+span:after,.vot-checkbox>input:indeterminate+span:after{border-color:rgb(var(--vot-helper-ontheme,255,255,255))}.vot-checkbox>input:indeterminate+span:after{border-left-width:0;transform:translate(4px,3px)}.vot-checkbox:hover>input+span:before{opacity:.04}.vot-checkbox:active>input,.vot-checkbox:active:hover>input:not(:disabled){border-color:rgb(var(--vot-helper-theme))}.vot-checkbox:active>input:checked{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.6);border-color:#0000}.vot-checkbox:active>input+span:before{opacity:1;transition:transform,opacity;transform:scale(0)}.vot-checkbox>input:disabled{border-color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);cursor:initial}.vot-checkbox>input:disabled:checked,.vot-checkbox>input:disabled:indeterminate{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);border-color:#0000}.vot-checkbox>input:disabled+span{color:rgba(var(--vot-onsurface-rgb,0,0,0),.38);cursor:initial}.vot-checkbox>input:disabled+span:before{opacity:0;transform:scale(0)}.vot-slider{display:inline-block;--vot-safari-helper1:rgba(var(--vot-primary-rgb,33,150,243),.04)!important;--vot-safari-helper2:rgba(var(--vot-primary-rgb,33,150,243),.12)!important;--vot-safari-helper3:rgba(var(--vot-primary-rgb,33,150,243),.16)!important;--vot-safari-helper4:rgba(var(--vot-primary-rgb,33,150,243),.24)!important;color:rgba(var(--vot-onsurface-rgb,0,0,0),.87)!important;font-family:var(--vot-font,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system)!important;text-align:start!important;width:100%!important;font-size:16px!important;line-height:1.5!important}.vot-slider[hidden]{display:none!important}.vot-slider>input{-webkit-appearance:none!important;appearance:none!important;cursor:pointer!important;background-color:#0000!important;width:100%!important;height:36px!important;margin:0 0 -36px!important;display:block!important;position:relative!important;top:24px!important}.vot-slider>input:last-child{margin:0!important;position:static!important}.vot-slider>input:before{content:\"\"!important;width:calc(100%*var(--vot-progress,0))!important;background:rgb(var(--vot-primary-rgb,33,150,243))!important;height:2px!important;display:block!important;position:absolute!important;top:calc(50% - 1px)!important}.vot-slider>input:disabled{cursor:default!important;opacity:.38!important}.vot-slider>input:disabled+span{color:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important}.vot-slider>input:disabled::-webkit-slider-runnable-track{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important}.vot-slider>input:disabled::-moz-range-track{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important}.vot-slider>input:disabled::-ms-fill-lower{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important}.vot-slider>input:disabled::-ms-fill-upper{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.38)!important}.vot-slider>input:disabled::-moz-range-thumb{background-color:rgb(var(--vot-onsurface-rgb,0,0,0))!important;box-shadow:0 0 0 1px rgb(var(--vot-surface-rgb,255,255,255))!important;transform:scale(4)!important}.vot-slider>input:disabled::-ms-thumb{background-color:rgb(var(--vot-onsurface-rgb,0,0,0))!important;box-shadow:0 0 0 1px rgb(var(--vot-surface-rgb,255,255,255))!important;transform:scale(4)!important}.vot-slider>input:disabled::-webkit-slider-thumb{background-color:rgb(var(--vot-onsurface-rgb,0,0,0))!important;box-shadow:0 0 0 1px rgb(var(--vot-surface-rgb,255,255,255))!important;transform:scale(4)!important}.vot-slider>input:disabled::-ms-fill-upper{opacity:.38!important}.vot-slider>input:disabled::-moz-range-progress{background-color:rgba(var(--vot-onsurface-rgb,0,0,0),.87)!important}.vot-slider>input:disabled:-webkit-slider-thumb{color:rgb(var(--vot-surface-rgb,255,255,255))!important}.vot-slider>input:active::-webkit-slider-thumb{box-shadow:0 0 0 2px var(--vot-safari-helper4)!important}.vot-slider>input:active::-moz-range-thumb{box-shadow:0 0 0 2px rgba(var(--vot-primary-rgb,33,150,243),.24)!important}.vot-slider>input:active::-ms-thumb{box-shadow:0 0 0 2px rgba(var(--vot-primary-rgb,33,150,243),.24)!important}.vot-slider>input:focus{outline:none!important}.vot-slider>input::-webkit-slider-runnable-track{background-color:rgba(var(--vot-primary-rgb,33,150,243),.24)!important;border-radius:1px!important;width:100%!important;height:2px!important;margin:17px 0!important}.vot-slider>input::-moz-range-track{background-color:rgba(var(--vot-primary-rgb,33,150,243),.24)!important;border-radius:1px!important;width:100%!important;height:2px!important;margin:17px 0!important}.vot-slider>input::-ms-track{box-sizing:border-box!important;background-color:#0000!important;border:none!important;border-radius:1px!important;width:100%!important;height:2px!important;margin:17px 0!important;padding:0 17px!important}.vot-slider>input::-webkit-slider-thumb{-webkit-appearance:none!important;appearance:none!important;background-color:rgb(var(--vot-primary-rgb,33,150,243))!important;border:none!important;border-radius:50%!important;width:2px!important;height:2px!important;transition:box-shadow .2s!important;transform:scale(6)!important}.vot-slider>input::-moz-range-thumb{-webkit-appearance:none!important;appearance:none!important;background-color:rgb(var(--vot-primary-rgb,33,150,243))!important;border:none!important;border-radius:50%!important;width:2px!important;height:2px!important;transition:box-shadow .2s!important;transform:scale(6)!important}.vot-slider>input::-ms-thumb{-webkit-appearance:none!important;appearance:none!important;background-color:rgb(var(--vot-primary-rgb,33,150,243))!important;border:none!important;border-radius:50%!important;width:2px!important;height:2px!important;transition:box-shadow .2s!important;transform:scale(6)!important}.vot-slider>input::-webkit-slider-thumb{-webkit-appearance:none!important;margin:0!important}.vot-slider>input::-moz-range-thumb{-moz-appearance:none!important}.vot-slider>input::-ms-thumb{margin:0 17px!important}.vot-slider>input::-moz-range-progress{background-color:rgb(var(--vot-primary-rgb,33,150,243))!important;border-radius:1px!important;height:2px!important}.vot-slider>input::-ms-fill-lower{background-color:rgb(var(--vot-primary-rgb,33,150,243))!important;border-radius:1px!important;height:2px!important}.vot-slider>input::-ms-fill-upper{background-color:rgb(var(--vot-primary-rgb,33,150,243))!important;border-radius:1px!important;height:2px!important}.vot-slider>input::-moz-focus-outer{border:none!important}.vot-slider>span{margin-bottom:36px!important;display:inline-block!important}.vot-slider:hover>input::-webkit-slider-thumb{box-shadow:0 0 0 2px var(--vot-safari-helper1)!important}.vot-slider:hover>input::-ms-thumb{box-shadow:0 0 0 2px rgba(var(--vot-primary-rgb,33,150,243),.04)!important}.vot-slider:hover>input:hover::-moz-range-thumb{box-shadow:0 0 0 2px rgba(var(--vot-primary-rgb,33,150,243),.04)!important}.vot-select{font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system);text-align:start;color:var(--vot-helper-theme);fill:var(--vot-helper-theme);justify-content:space-between;align-items:center;font-size:14px;font-weight:400;line-height:1.5;display:flex;--vot-helper-theme-rgb:var(--vot-onsurface-rgb,0,0,0)!important;--vot-helper-theme:rgba(var(--vot-helper-theme-rgb),.87)!important;--vot-helper-safari1:rgba(var(--vot-onsurface-rgb,0,0,0),.6)!important;--vot-helper-safari2:rgba(var(--vot-onsurface-rgb,0,0,0),.87)!important}.vot-select[hidden]{display:none!important}.vot-select-label{font-size:16px}.vot-select-outer{cursor:pointer;justify-content:space-between;align-items:center;width:120px;max-width:120px;padding:0 5px;display:flex;border-style:solid!important;border-width:1px!important;border-color:var(--vot-helper-safari1)!important;border-radius:4px!important;transition:border .2s!important}.vot-select-outer:hover{border-color:var(--vot-helper-safari2)!important}.vot-select-title{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.vot-select-arrow-icon{justify-content:center;align-items:center;width:20px;height:32px;display:flex}.vot-select-content-list{flex-direction:column;display:flex}.vot-select-content-list .vot-select-content-item{cursor:pointer;border-radius:8px;padding:5px 10px}.vot-select-content-list .vot-select-content-item:not([inert]):hover{background-color:#2a2c31}.vot-select-content-list .vot-select-content-item[data-vot-selected=true]{color:rgb(var(--vot-primary-rgb,33,150,243));background-color:rgba(var(--vot-primary-rgb,33,150,243),.2)}.vot-select-content-list .vot-select-content-item[data-vot-selected=true]:hover{background-color:rgba(var(--vot-primary-rgb,33,150,243),.1)!important}.vot-select-content-list .vot-select-content-item[data-vot-disabled=true]{cursor:default}.vot-select-content-list .vot-select-content-item[hidden]{display:none!important}.vot-header{color:rgba(var(--vot-helper-onsurface-rgb),.87);font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system);text-align:start;font-weight:700;line-height:1.5}.vot-header[hidden]{display:none!important}.vot-header:not(:first-child){padding-top:8px}.vot-header-level-1{font-size:2em}.vot-header-level-2{font-size:1.5em}.vot-header-level-3{font-size:1.17em}.vot-header-level-4{font-size:1em}.vot-header-level-5{font-size:.83em}.vot-header-level-6{font-size:.67em}.vot-info{color:rgba(var(--vot-helper-onsurface-rgb),.87);font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system);text-align:start;-webkit-user-select:text;user-select:text;font-size:16px;line-height:1.5;display:flex}.vot-info[hidden]{display:none!important}.vot-info>:not(:first-child){color:rgba(var(--vot-helper-onsurface-rgb),.5);flex:1;margin-left:8px}.vot-details{color:rgba(var(--vot-helper-onsurface-rgb),.87);font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system);text-align:start;cursor:pointer;border-radius:.5em;justify-content:space-between;align-items:center;margin:0 -.5em;padding:.5em;font-size:16px;line-height:1.5;transition:background .5s;display:flex}.vot-details[hidden]{display:none!important}.vot-details-arrow-icon{fill:rgba(var(--vot-helper-onsurface-rgb),.87);justify-content:center;align-items:center;width:20px;height:32px;display:flex;transform:scale(1.25)rotate(-90deg)}.vot-details:hover{background:rgba(var(--vot-onsurface-rgb,0,0,0),.04)}.vot-lang-select{--vot-helper-theme-rgb:var(--vot-onsurface-rgb,0,0,0);--vot-helper-theme:rgba(var(--vot-helper-theme-rgb),.87);color:var(--vot-helper-theme);fill:var(--vot-helper-theme);justify-content:space-between;align-items:center;display:flex}.vot-lang-select[hidden]{display:none!important}.vot-lang-select-icon{justify-content:center;align-items:center;width:32px;height:32px;display:flex}.vot-segmented-button{--vot-helper-theme-rgb:var(--vot-onsurface-rgb,0,0,0);--vot-helper-theme:rgba(var(--vot-helper-theme-rgb),.87);-webkit-user-select:none;user-select:none;background:rgb(var(--vot-surface-rgb,255,255,255));color:var(--vot-helper-theme);fill:var(--vot-helper-theme);font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system);cursor:default;z-index:2147483647;border-radius:4px;align-items:center;max-width:100vw;height:32px;font-size:16px;line-height:1.5;transition:opacity .5s;display:flex;position:absolute;top:5rem;left:50%;overflow:hidden;transform:translate(-50%)}.vot-segmented-button[hidden]{display:none!important}.vot-segmented-button *{box-sizing:border-box!important}.vot-segmented-button .vot-separator{background:rgba(var(--vot-helper-theme-rgb),.1);width:1px;height:50%}.vot-segmented-button .vot-separator[hidden]{display:none!important}.vot-segmented-button .vot-segment,.vot-segmented-button .vot-segment-only-icon{color:inherit;background-color:#0000;border:none;justify-content:center;align-items:center;height:100%;padding:0 8px;transition:background-color .1s ease-in-out;display:flex;position:relative;overflow:hidden}.vot-segmented-button .vot-segment[hidden],.vot-segmented-button [hidden].vot-segment-only-icon{display:none!important}.vot-segmented-button .vot-segment:before,.vot-segmented-button .vot-segment-only-icon:before,.vot-segmented-button .vot-segment:after,.vot-segmented-button .vot-segment-only-icon:after{content:\"\";border-radius:inherit;opacity:0;position:absolute;top:0;bottom:0;left:0;right:0}.vot-segmented-button .vot-segment:before,.vot-segmented-button .vot-segment-only-icon:before{background-color:rgb(var(--vot-helper-theme-rgb));transition:opacity .2s}.vot-segmented-button .vot-segment:after,.vot-segmented-button .vot-segment-only-icon:after{background:radial-gradient(circle,currentColor 1%,#0000 1%) 50%/10000% 10000% no-repeat;transition:opacity 1s,background-size .5s}.vot-segmented-button .vot-segment:hover:before,.vot-segmented-button .vot-segment-only-icon:hover:before{opacity:.04}.vot-segmented-button .vot-segment:active:after,.vot-segmented-button .vot-segment-only-icon:active:after{opacity:.16;background-size:100% 100%;transition:background-size}.vot-segmented-button .vot-segment-only-icon{min-width:32px;padding:0}.vot-segmented-button .vot-segment-label{white-space:nowrap;color:inherit;margin-left:8px;font-weight:400}.vot-segmented-button[data-status=success] .vot-translate-button{color:rgb(var(--vot-primary-rgb,33,150,243));fill:rgb(var(--vot-primary-rgb,33,150,243))}.vot-segmented-button[data-status=error] .vot-translate-button{color:#f28b82;fill:#f28b82}.vot-segmented-button[data-loading=true] #vot-loading-icon{display:block!important}.vot-segmented-button[data-loading=true] #vot-translate-icon{display:none!important}.vot-segmented-button[data-direction=column]{flex-direction:column;height:fit-content}.vot-segmented-button[data-direction=column] .vot-segment-label{display:none}.vot-segmented-button[data-direction=column]>.vot-segment-only-icon,.vot-segmented-button[data-direction=column]>.vot-segment{padding:8px}.vot-segmented-button[data-direction=column] .vot-separator{width:50%;height:1px}.vot-segmented-button[data-position=left]{top:12.5vh;left:50px}.vot-segmented-button[data-position=right]{top:12.5vh;left:auto;right:0}.vot-segmented-button svg{width:24px}.vot-menu{--vot-helper-surface-rgb:var(--vot-surface-rgb,255,255,255);--vot-helper-surface:rgb(var(--vot-helper-surface-rgb));--vot-helper-onsurface-rgb:var(--vot-onsurface-rgb,0,0,0);--vot-helper-onsurface:rgba(var(--vot-helper-onsurface-rgb),.87);-webkit-user-select:none;user-select:none;background-color:var(--vot-helper-surface);color:var(--vot-helper-onsurface);font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system);cursor:default;z-index:2147483647;visibility:visible;opacity:1;transform-origin:top;border-radius:8px;min-width:300px;font-size:16px;line-height:1.5;transition:opacity .3s,transform .1s;position:absolute;top:calc(5rem + 48px);left:50%;overflow:hidden;transform:translate(-50%)scale(1)}.vot-menu *{box-sizing:border-box!important}.vot-menu[hidden]{pointer-events:none;visibility:hidden;opacity:0;transform:translate(-50%)scale(0);display:block!important}.vot-menu-content-wrapper{max-height:calc(var(--vot-container-height,75vh) - (5rem + 32px + 16px)*2);flex-direction:column;min-height:100px;display:flex;overflow:auto}.vot-menu-header-container{flex-shrink:0;align-items:flex-start;min-height:31px;display:flex}.vot-menu-header-container:empty{padding:0 0 16px}.vot-menu-header-container>.vot-icon-button{margin-inline-end:4px;margin-top:4px}.vot-menu-title-container{font-size:inherit;font-weight:inherit;text-align:start;outline:0;flex:1;margin:0;display:flex}.vot-menu-title{padding-bottom:16px;padding-inline-start:16px;padding-inline-end:16px;flex:1;padding-top:16px;font-size:16px;font-weight:400;line-height:1}.vot-menu-body-container{box-sizing:border-box;overscroll-behavior:contain;flex-direction:column;gap:8px;min-height:1.375rem;padding:0 16px;display:flex;overflow:auto;scrollbar-color:rgba(var(--vot-helper-onsurface-rgb),.1)var(--vot-helper-surface)!important}.vot-menu-body-container::-webkit-scrollbar{background:var(--vot-helper-surface)!important;width:12px!important;height:12px!important}.vot-menu-body-container::-webkit-scrollbar-track{background:var(--vot-helper-surface)!important;width:12px!important;height:12px!important}.vot-menu-body-container::-webkit-scrollbar-thumb{background:rgba(var(--vot-helper-onsurface-rgb),.1)!important;border:5px solid var(--vot-helper-surface)!important;-webkit-border-radius:1ex!important}.vot-menu-body-container::-webkit-scrollbar-thumb:hover{border:3px solid var(--vot-helper-surface)!important}.vot-menu-body-container::-webkit-scrollbar-corner{background:var(--vot-helper-surface)!important}.vot-menu-footer-container{padding-bottom:16px;padding-inline-start:16px;padding-inline-end:16px;flex-shrink:0;justify-content:flex-end;padding-top:16px;display:flex}.vot-menu-footer-container:empty{padding:16px 0 0}.vot-menu[data-position=left]{top:12.5vh;left:240px}.vot-menu[data-position=right]{top:12.5vh;left:auto;right:-80px}.vot-dialog{--vot-helper-surface-rgb:var(--vot-surface-rgb,255,255,255);--vot-helper-surface:rgb(var(--vot-helper-surface-rgb));--vot-helper-onsurface-rgb:var(--vot-onsurface-rgb,0,0,0);--vot-helper-onsurface:rgba(var(--vot-helper-onsurface-rgb),.87);max-width:initial;max-height:initial;width:min(var(--vot-dialog-width,512px),100%);top:50%;bottom:50%;background-color:var(--vot-helper-surface);color:var(--vot-helper-onsurface);font-family:var(--vot-font-family,\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system);-webkit-user-select:none;user-select:none;visibility:visible;opacity:1;transform-origin:50%;border-radius:8px;height:fit-content;margin:auto;padding:0;font-size:16px;line-height:1.5;transition:opacity .3s,transform .1s;display:block;position:fixed;top:0;bottom:0;left:0;right:0;overflow-x:auto;overflow-y:hidden;transform:scale(1);box-shadow:0 0 16px #0000001f,0 16px 16px #0000003d}[hidden]>.vot-dialog{pointer-events:none;opacity:0;transition:opacity .1s,transform .2s;transform:scale(.5)}.vot-dialog-container{visibility:visible;z-index:2147483647;position:absolute}.vot-dialog-container[hidden]{pointer-events:none;visibility:hidden;display:block!important}.vot-dialog-container *{box-sizing:border-box!important}.vot-dialog-backdrop{opacity:1;background-color:#0009;transition:opacity .3s;position:fixed;top:0;bottom:0;left:0;right:0}[hidden]>.vot-dialog-backdrop{pointer-events:none;opacity:0}.vot-dialog-content-wrapper{flex-direction:column;max-height:75vh;display:flex;overflow:auto}.vot-dialog-header-container{flex-shrink:0;align-items:flex-start;min-height:31px;display:flex}.vot-dialog-header-container:empty{padding:0 0 20px}.vot-dialog-header-container>.vot-icon-button{margin-inline-end:4px;margin-top:4px}.vot-dialog-title-container{font-size:inherit;font-weight:inherit;outline:0;flex:1;margin:0;display:flex}.vot-dialog-title{padding-bottom:16px;padding-inline-start:20px;padding-inline-end:20px;flex:1;padding-top:20px;font-size:115.385%;font-weight:700;line-height:1}.vot-dialog-body-container{box-sizing:border-box;overscroll-behavior:contain;flex-direction:column;gap:16px;min-height:1.375rem;padding:0 20px;display:flex;overflow:auto;scrollbar-color:rgba(var(--vot-helper-onsurface-rgb),.1)var(--vot-helper-surface)!important}.vot-dialog-body-container::-webkit-scrollbar{background:var(--vot-helper-surface)!important;width:12px!important;height:12px!important}.vot-dialog-body-container::-webkit-scrollbar-track{background:var(--vot-helper-surface)!important;width:12px!important;height:12px!important}.vot-dialog-body-container::-webkit-scrollbar-thumb{background:rgba(var(--vot-helper-onsurface-rgb),.1)!important;border:5px solid var(--vot-helper-surface)!important;-webkit-border-radius:1ex!important}.vot-dialog-body-container::-webkit-scrollbar-thumb:hover{border:3px solid var(--vot-helper-surface)!important}.vot-dialog-body-container::-webkit-scrollbar-corner{background:var(--vot-helper-surface)!important}.vot-dialog-footer-container{padding-bottom:16px;padding-inline-start:16px;padding-inline-end:16px;flex-shrink:0;justify-content:flex-end;padding-top:16px;display:flex}.vot-dialog-footer-container:empty{padding:20px 0 0}.vot-subtitles-widget{z-index:2147483647;pointer-events:none;justify-content:center;align-items:center;width:50%;min-height:20%;max-height:100%;display:flex;position:absolute;top:75%;left:25%}.vot-subtitles{--vot-subtitles-background:rgba(var(--vot-surface-rgb,46,47,52),var(--vot-subtitles-opacity,.8));background:var(--vot-subtitles-background,#2e2f34cc);color:var(--vot-subtitles-color,#e3e3e3);pointer-events:all;box-sizing:border-box;-webkit-user-select:none;user-select:none;border-radius:.5em;width:max-content;max-width:100%;max-height:100%;padding:.5em;font-size:20px;line-height:normal;position:relative}.vot-subtitles span{-webkit-user-select:text;user-select:text;font-size:inherit!important;line-height:normal!important}.vot-subtitles .passed{color:var(--vot-subtitles-passed-color,#2196f3)}:root{--vot-font-family:\"Roboto\",\"Segoe UI\",BlinkMacSystemFont,system-ui,-apple-system;--vot-primary-rgb:139,180,245;--vot-onprimary-rgb:32,33,36;--vot-surface-rgb:32,33,36;--vot-onsurface-rgb:227,227,227;--vot-subtitles-color:rgb(var(--vot-onsurface-rgb,227,227,227));--vot-subtitles-passed-color:rgb(var(--vot-primary-rgb,33,150,243))}vot-block{display:block;visibility:visible!important}") /***/ }), @@ -1863,12 +1863,14 @@ const sitesPoketube = [ url: "https://youtu.be/", match: sitesInvidious, selector: "#player", + needBypassCSP: true, }, { host: VideoService.piped, url: "https://youtu.be/", match: sitesPiped, selector: ".shaka-video-container", + needBypassCSP: true, }, { host: VideoService.poketube, @@ -1943,6 +1945,7 @@ const sitesPoketube = [ url: "https://www.xvideos.com/", match: /^(www.)?(xvideos|xv-ru).com$/, selector: ".video-bg-pic", + needBypassCSP: true, }, { host: VideoService.pornhub, @@ -1964,7 +1967,8 @@ const sitesPoketube = [ url: "https://twitter.com/i/status/", match: /^(twitter|x).com$/, selector: 'div[data-testid="videoComponent"] > div:nth-child(1) > div', - eventSelector: 'div[data-testid="videoPlayer"]' + eventSelector: 'div[data-testid="videoPlayer"]', + needBypassCSP: true, }, { host: VideoService.rumble, @@ -1978,6 +1982,7 @@ const sitesPoketube = [ match: (url) => url.host.includes("facebook.com") && url.pathname.includes("/videos/"), selector: 'div[role="main"] div[data-pagelet$="video" i]', + needBypassCSP: true, }, { additionalData: "reels", @@ -1986,6 +1991,7 @@ const sitesPoketube = [ match: (url) => url.host.includes("facebook.com") && url.pathname.includes("/reel/"), selector: 'div[role="main"]', + needBypassCSP: true, }, { host: VideoService.rutube, @@ -2055,7 +2061,8 @@ const sitesPoketube = [ url: "https://yadi.sk/i/", match: /^disk.yandex.ru$/, selector: ".video-player__player > div:nth-child(1)", - eventSelector: ".video-player__player" + eventSelector: ".video-player__player", + needBypassCSP: true, }, { host: VideoService.okru, @@ -2128,6 +2135,7 @@ const sitesPoketube = [ match: /^(www.|new.|old.)?reddit.com$/, selector: ".reddit-video-player-root", needExtraData: true, + needBypassCSP: true, }, { host: VideoService.kick, @@ -2142,6 +2150,7 @@ const sitesPoketube = [ match: /^developer.apple.com$/, selector: ".developer-video-player", needExtraData: true, + needBypassCSP: true, }, { host: VideoService.epicgames, @@ -2194,6 +2203,7 @@ const sitesPoketube = [ selector: ".playkit-container", eventSelector: ".playkit-player", needExtraData: true, + needBypassCSP: true, }, { host: VideoService.watchpornto, @@ -2207,6 +2217,7 @@ const sitesPoketube = [ match: /^(www)?.linkedin.com$/, selector: ".vjs-v7", needExtraData: true, + needBypassCSP: true, }, { host: VideoService.custom, @@ -2217,7 +2228,7 @@ const sitesPoketube = [ ]); ;// CONCATENATED MODULE: ./src/localization/locales/en.json -const en_namespaceObject = /*#__PURE__*/JSON.parse('{"__version__":5,"recommended":"recommended","translateVideo":"Translate video","disableTranslate":"Turn off","translationSettings":"Translation settings","subtitlesSettings":"Subtitles settings","about":"About extension","resetSettings":"Reset settings","videoBeingTranslated":"The video is being translated","videoLanguage":"Video language","translationLanguage":"Translation language","translationTake":"The translation will take","translationTakeMoreThanHour":"The translation will take more than an hour","translationTakeAboutMinute":"The translation will take about a minute","translationTakeFewMinutes":"The translation will take a few minutes","translationTakeApproximatelyMinutes":"The translation will take approximately {0} minutes","translationTakeApproximatelyMinute":"The translation will take approximately {0} minutes","unSupportedExtensionError":"Error! {0} is not supported by this version of the extension!\\n\\nPlease use the cloudflare version of the VOT extension.","requestTranslationFailed":"Failed to request video translation","audioNotReceived":"Audio link not received","grantPermissionToAutoPlay":"Grant permission to autoplay","audioFormatNotSupported":"The audio format is not supported","VOTAutoTranslate":"Translate on open","VOTDontTranslateYourLang":"Do not translate from my language","VOTVolume":"Video volume","VOTVolumeTranslation":"Translation Volume","VOTAutoSetVolume":"Reduce video volume to ","VOTShowVideoSlider":"Video volume slider","VOTSyncVolume":"Link translation and video volume","VOTAudioProxy":"Proxy received audio","VOTDisableFromYourLang":"You have disabled the translation of the video in your language","VOTLiveNotSupported":"Translation of live streams is not supported","VOTPremiere":"Wait for the premiere to end before translating","VOTVideoIsTooLong":"Video is too long","VOTNoVideoIDFound":"No video ID found","VOTSubtitles":"Subtitles","VOTSubtitlesDisabled":"Disabled","VOTSubtitlesMaxLength":"Subtitles max length","VOTHighlightWords":"Highlight words","VOTTranslatedFrom":"translated from","VOTAutogenerated":"autogenerated","VOTSettings":"VOT Settings","VOTMenuLanguage":"Menu language","VOTAuthors":"Authors","VOTVersion":"Version","VOTLoader":"Loader","VOTBrowser":"Browser","VOTShowPiPButton":"Show PiP button","langs":{"auto":"Auto","af":"Afrikaans","ak":"Akan","sq":"Albanian","am":"Amharic","ar":"Arabic","hy":"Armenian","as":"Assamese","ay":"Aymara","az":"Azerbaijani","bn":"Bangla","eu":"Basque","be":"Belarusian","bho":"Bhojpuri","bs":"Bosnian","bg":"Bulgarian","my":"Burmese","ca":"Catalan","ceb":"Cebuano","zh":"Chinese","zh-Hans":"Chinese (Simplified)","zh-Hant":"Chinese (Traditional)","co":"Corsican","hr":"Croatian","cs":"Czech","da":"Danish","dv":"Divehi","nl":"Dutch","en":"English","eo":"Esperanto","et":"Estonian","ee":"Ewe","fil":"Filipino","fi":"Finnish","fr":"French","gl":"Galician","lg":"Ganda","ka":"Georgian","de":"German","el":"Greek","gn":"Guarani","gu":"Gujarati","ht":"Haitian Creole","ha":"Hausa","haw":"Hawaiian","iw":"Hebrew","hi":"Hindi","hmn":"Hmong","hu":"Hungarian","is":"Icelandic","ig":"Igbo","id":"Indonesian","ga":"Irish","it":"Italian","ja":"Japanese","jv":"Javanese","kn":"Kannada","kk":"Kazakh","km":"Khmer","rw":"Kinyarwanda","ko":"Korean","kri":"Krio","ku":"Kurdish","ky":"Kyrgyz","lo":"Lao","la":"Latin","lv":"Latvian","ln":"Lingala","lt":"Lithuanian","lb":"Luxembourgish","mk":"Macedonian","mg":"Malagasy","ms":"Malay","ml":"Malayalam","mt":"Maltese","mi":"Māori","mr":"Marathi","mn":"Mongolian","ne":"Nepali","nso":"Northern Sotho","no":"Norwegian","ny":"Nyanja","or":"Odia","om":"Oromo","ps":"Pashto","fa":"Persian","pl":"Polish","pt":"Portuguese","pa":"Punjabi","qu":"Quechua","ro":"Romanian","ru":"Russian","sm":"Samoan","sa":"Sanskrit","gd":"Scottish Gaelic","sr":"Serbian","sn":"Shona","sd":"Sindhi","si":"Sinhala","sk":"Slovak","sl":"Slovenian","so":"Somali","st":"Southern Sotho","es":"Spanish","su":"Sundanese","sw":"Swahili","sv":"Swedish","tg":"Tajik","ta":"Tamil","tt":"Tatar","te":"Telugu","th":"Thai","ti":"Tigrinya","ts":"Tsonga","tr":"Turkish","tk":"Turkmen","uk":"Ukrainian","ur":"Urdu","ug":"Uyghur","uz":"Uzbek","vi":"Vietnamese","cy":"Welsh","fy":"Western Frisian","xh":"Xhosa","yi":"Yiddish","yo":"Yoruba","zu":"Zulu"},"udemyModuleArgsNotFound":"Could not get udemy module data due to the fact that ModuleArgs was not found","VOTTranslationHelpNull":"Could not get the data required for the translate","streamNoConnectionToServer":"There is no connection to the server","searchField":"Search...","VOTTranslateAPIErrors":"Translate errors from the API","VOTTranslationService":"Translation Service","VOTDetectService":"Detect Service","VOTTranslatingError":"Translating the error","VOTProxyWorkerHost":"Enter the proxy worker address","VOTM3u8ProxyHost":"Enter the address of the m3u8 proxy worker","proxySettings":"Proxy Settings","translationTakeApproximatelyMinute2":"The translation will take approximately {0} minutes","VOTAudioBooster":"Extended translation volume increase","VOTMediaCSPError":"Failed to load audio (media csp error)","VOTSubtitlesDesign":"Subtitles design","VOTSubtitlesFontSize":"Font size of subtitles","VOTSubtitlesOpacity":"Transparency of the subtitle background","VOTPressNewHotkey":"Press the new hotkey...","VOTCreateTranslationHotkey":"Create Hotkey for Translation","VOTChangeHotkeyWithCurrent":"Change Hotkey (Current: {0})","VOTSubtitlesDownloadFormat":"The format for downloading subtitles","VOTDownloadWithName":"Download files with the video name","VOTUpdateLocaleFiles":"Update localization files","VOTLocaleHash":"Locale hash","VOTUpdatedAt":"Updated at"}'); +const en_namespaceObject = /*#__PURE__*/JSON.parse('{"__version__":5,"recommended":"recommended","translateVideo":"Translate video","disableTranslate":"Turn off","translationSettings":"Translation settings","subtitlesSettings":"Subtitles settings","about":"About extension","resetSettings":"Reset settings","videoBeingTranslated":"The video is being translated","videoLanguage":"Video language","translationLanguage":"Translation language","translationTake":"The translation will take","translationTakeMoreThanHour":"The translation will take more than an hour","translationTakeAboutMinute":"The translation will take about a minute","translationTakeFewMinutes":"The translation will take a few minutes","translationTakeApproximatelyMinutes":"The translation will take approximately {0} minutes","translationTakeApproximatelyMinute":"The translation will take approximately {0} minutes","unSupportedExtensionError":"Error! {0} is not supported by this version of the extension!\\n\\nPlease use the cloudflare version of the VOT extension.","requestTranslationFailed":"Failed to request video translation","audioNotReceived":"Audio link not received","grantPermissionToAutoPlay":"Grant permission to autoplay","audioFormatNotSupported":"The audio format is not supported","VOTAutoTranslate":"Translate on open","VOTDontTranslateYourLang":"Do not translate from my language","VOTVolume":"Video volume","VOTVolumeTranslation":"Translation Volume","VOTAutoSetVolume":"Reduce video volume to ","VOTShowVideoSlider":"Video volume slider","VOTSyncVolume":"Link translation and video volume","VOTAudioProxy":"Proxy received audio","VOTDisableFromYourLang":"You have disabled the translation of the video in your language","VOTLiveNotSupported":"Translation of live streams is not supported","VOTPremiere":"Wait for the premiere to end before translating","VOTVideoIsTooLong":"Video is too long","VOTNoVideoIDFound":"No video ID found","VOTSubtitles":"Subtitles","VOTSubtitlesDisabled":"Disabled","VOTSubtitlesMaxLength":"Subtitles max length","VOTHighlightWords":"Highlight words","VOTTranslatedFrom":"translated from","VOTAutogenerated":"autogenerated","VOTSettings":"VOT Settings","VOTMenuLanguage":"Menu language","VOTAuthors":"Authors","VOTVersion":"Version","VOTLoader":"Loader","VOTBrowser":"Browser","VOTShowPiPButton":"Show PiP button","langs":{"auto":"Auto","af":"Afrikaans","ak":"Akan","sq":"Albanian","am":"Amharic","ar":"Arabic","hy":"Armenian","as":"Assamese","ay":"Aymara","az":"Azerbaijani","bn":"Bangla","eu":"Basque","be":"Belarusian","bho":"Bhojpuri","bs":"Bosnian","bg":"Bulgarian","my":"Burmese","ca":"Catalan","ceb":"Cebuano","zh":"Chinese","zh-Hans":"Chinese (Simplified)","zh-Hant":"Chinese (Traditional)","co":"Corsican","hr":"Croatian","cs":"Czech","da":"Danish","dv":"Divehi","nl":"Dutch","en":"English","eo":"Esperanto","et":"Estonian","ee":"Ewe","fil":"Filipino","fi":"Finnish","fr":"French","gl":"Galician","lg":"Ganda","ka":"Georgian","de":"German","el":"Greek","gn":"Guarani","gu":"Gujarati","ht":"Haitian Creole","ha":"Hausa","haw":"Hawaiian","iw":"Hebrew","hi":"Hindi","hmn":"Hmong","hu":"Hungarian","is":"Icelandic","ig":"Igbo","id":"Indonesian","ga":"Irish","it":"Italian","ja":"Japanese","jv":"Javanese","kn":"Kannada","kk":"Kazakh","km":"Khmer","rw":"Kinyarwanda","ko":"Korean","kri":"Krio","ku":"Kurdish","ky":"Kyrgyz","lo":"Lao","la":"Latin","lv":"Latvian","ln":"Lingala","lt":"Lithuanian","lb":"Luxembourgish","mk":"Macedonian","mg":"Malagasy","ms":"Malay","ml":"Malayalam","mt":"Maltese","mi":"Māori","mr":"Marathi","mn":"Mongolian","ne":"Nepali","nso":"Northern Sotho","no":"Norwegian","ny":"Nyanja","or":"Odia","om":"Oromo","ps":"Pashto","fa":"Persian","pl":"Polish","pt":"Portuguese","pa":"Punjabi","qu":"Quechua","ro":"Romanian","ru":"Russian","sm":"Samoan","sa":"Sanskrit","gd":"Scottish Gaelic","sr":"Serbian","sn":"Shona","sd":"Sindhi","si":"Sinhala","sk":"Slovak","sl":"Slovenian","so":"Somali","st":"Southern Sotho","es":"Spanish","su":"Sundanese","sw":"Swahili","sv":"Swedish","tg":"Tajik","ta":"Tamil","tt":"Tatar","te":"Telugu","th":"Thai","ti":"Tigrinya","ts":"Tsonga","tr":"Turkish","tk":"Turkmen","uk":"Ukrainian","ur":"Urdu","ug":"Uyghur","uz":"Uzbek","vi":"Vietnamese","cy":"Welsh","fy":"Western Frisian","xh":"Xhosa","yi":"Yiddish","yo":"Yoruba","zu":"Zulu"},"udemyModuleArgsNotFound":"Could not get udemy module data due to the fact that ModuleArgs was not found","VOTTranslationHelpNull":"Could not get the data required for the translate","streamNoConnectionToServer":"There is no connection to the server","searchField":"Search...","VOTTranslateAPIErrors":"Translate errors from the API","VOTTranslationService":"Translation Service","VOTDetectService":"Detect Service","VOTTranslatingError":"Translating the error","VOTProxyWorkerHost":"Enter the proxy worker address","VOTM3u8ProxyHost":"Enter the address of the m3u8 proxy worker","proxySettings":"Proxy Settings","translationTakeApproximatelyMinute2":"The translation will take approximately {0} minutes","VOTAudioBooster":"Extended translation volume increase","VOTSubtitlesDesign":"Subtitles design","VOTSubtitlesFontSize":"Font size of subtitles","VOTSubtitlesOpacity":"Transparency of the subtitle background","VOTPressNewHotkey":"Press the new hotkey...","VOTCreateTranslationHotkey":"Create Hotkey for Translation","VOTChangeHotkeyWithCurrent":"Change Hotkey (Current: {0})","VOTSubtitlesDownloadFormat":"The format for downloading subtitles","VOTDownloadWithName":"Download files with the video name","VOTUpdateLocaleFiles":"Update localization files","VOTLocaleHash":"Locale hash","VOTUpdatedAt":"Updated at","VOTNeedWebAudioAPI":"To enable this, you must have a Web Audio API","VOTBypassMediaCSP":"Bypassing Media CSP","VOTMediaCSPEnabledOnSite":"Media CSP is enabled on this site"}'); ;// CONCATENATED MODULE: ./src/utils/debug.js const debug = {}; debug.log = (...text) => { @@ -6763,7 +6774,6 @@ class VideoObserver { - const browserInfo = es5.getParser(window.navigator.userAgent).getResult(); @@ -7039,6 +7049,10 @@ class VideoHandler { responseLanguage: votStorage.get("responseLanguage", lang), defaultVolume: votStorage.get("defaultVolume", 100), audioProxy: votStorage.get("audioProxy", 0), + bypassMediaCSP: votStorage.get( + "bypassMediaCSP", + Number(!!this.audioContext), + ), showPiPButton: votStorage.get("showPiPButton", 0), translateAPIErrors: votStorage.get("translateAPIErrors", 1), translationService: votStorage.get( @@ -7458,7 +7472,11 @@ class VideoHandler { localizationProvider.get("VOTAudioBooster"), this.data?.audioBooster ?? false, ); - this.votAudioBoosterCheckbox.container.hidden = !this.audioContext; + if (!this.audioContext) { + this.votBypassMediaCSPCheckbox.input.disabled = true; + this.votBypassMediaCSPCheckbox.container.title = + localizationProvider.get("VOTNeedWebAudioAPI"); + } this.votSettingsDialog.bodyContainer.appendChild( this.votAudioBoosterCheckbox.container, ); @@ -7568,6 +7586,22 @@ class VideoHandler { this.votAudioProxyCheckbox.container, ); + this.votBypassMediaCSPCheckbox = ui.createCheckbox( + localizationProvider.get("VOTBypassMediaCSP") + + (this.site.needBypassCSP + ? ` (${localizationProvider.get("VOTMediaCSPEnabledOnSite")})` + : ""), + this.data?.bypassMediaCSP ?? false, + ); + if (!this.audioContext) { + this.votBypassMediaCSPCheckbox.input.disabled = true; + this.votBypassMediaCSPCheckbox.container.title = + localizationProvider.get("VOTNeedWebAudioAPI"); + } + this.votSettingsDialog.bodyContainer.appendChild( + this.votBypassMediaCSPCheckbox.container, + ); + // ABOUT this.votAboutHeader = ui.createHeader(localizationProvider.get("about")); @@ -7668,7 +7702,7 @@ class VideoHandler { } async handleTranslationBtnClick() { - if (this.audio.src) { + if (this.audio.src || this.playSound) { utils_debug.log("[click translationBtn] audio.src is not empty"); this.stopTranslate(); return; @@ -8212,6 +8246,18 @@ class VideoHandler { })(); }); + this.votBypassMediaCSPCheckbox.input.addEventListener("change", (e) => { + (async () => { + this.data.bypassMediaCSP = Number(e.target.checked); + await votStorage.set("bypassMediaCSP", this.data.bypassMediaCSP); + utils_debug.log( + "bypassMediaCSP value changed. New value: ", + this.data.bypassMediaCSP, + ); + this.stopTranslate(); + })(); + }); + this.votUpdateLocaleFilesButton.addEventListener("click", () => { (async () => { await votStorage.set("locale-hash", ""); @@ -8781,19 +8827,63 @@ class VideoHandler { } /** - * Synchronizes the lip sync of the video and audio elements. + * Synchronizes the lip sync of the video and audio context. * - * @param {boolean} [mode=false] - The lip sync mode. + * @param {boolean|string} [mode=false] - The lip sync mode. * @return {void} */ - lipSync(mode = false) { - utils_debug.log("lipsync video", this.video); - if (!this.video) { + lipsyncAudioContext(mode = false) { + if (this.playSound) { + this.playSound.playbackRate.value = this.video.playbackRate; + } + + if (!mode) { + utils_debug.log("lipsync mode is not set"); return; } - this.audio.currentTime = this.video.currentTime; - this.audio.playbackRate = this.video.playbackRate; + if (mode == "play") { + utils_debug.log("lipsync mode is play"); + try { + this.playSound.start(0, this.audio.currentTime); + } catch { + /* empty */ + } + return; + } + + // video is inactive + if (["pause", "stop", "waiting"].includes(mode)) { + utils_debug.log(`lipsync mode is ${mode}`); + try { + this.playSound.stop(); + } catch { + /* empty */ + } + + this.playSound = this.audioContext.createBufferSource(); + this.playSound.buffer = this.audioBuffer; + this.playSound.connect(this.gainNode); + return; + } + + if (mode == "playing") { + utils_debug.log("lipsync mode is playing"); + try { + this.playSound.start(0, this.audio.currentTime); + } catch { + /* empty */ + } + } + } + + /** + * Synchronizes the lip sync of the video and audio element. + * + * @param {boolean|string} [mode=false] - The lip sync mode. + * @return {void} + */ + lipsyncAudio(mode = false) { if (!mode) { utils_debug.log("lipsync mode is not set"); return; @@ -8816,10 +8906,12 @@ class VideoHandler { } return; } + // video is inactive if (["pause", "stop", "waiting"].includes(mode)) { utils_debug.log(`lipsync mode is ${mode}`); this.audio.pause(); + return; } if (mode == "playing") { @@ -8828,17 +8920,46 @@ class VideoHandler { } } + /** + * Synchronizes the lip sync of the video and audio elements. + * + * @param {boolean|string} [mode=false] - The lip sync mode. + * @return {void} + */ + lipSync(mode = false) { + utils_debug.log("lipsync video", this.video); + if (!this.video) { + return; + } + this.audio.currentTime = this.video.currentTime; + this.audio.playbackRate = this.video.playbackRate; + + return this.needBypassCSP() + ? this.lipsyncAudioContext(mode) + : this.lipsyncAudio(mode); + } + // Define a function to handle common events handleVideoEvent = (event) => { utils_debug.log(`video ${event.type}`); this.lipSync(event.type); }; + needBypassCSP = () => this.data.bypassMediaCSP && this.site.needBypassCSP; + // Default actions on stop translate stopTranslate() { for (const e of videoLipSyncEvents) { this.video.removeEventListener(e, this.handleVideoEvent); } + if (this.playSound) { + try { + this.playSound.stop(); + this.playSound = null; + } catch { + /* empty */ + } + } this.audio.pause(); this.audio.src = ""; this.audio.removeAttribute("src"); @@ -8958,27 +9079,54 @@ class VideoHandler { } } + return audioUrl; + } + + async setAudioSourceAndPlay(audioUrl) { + utils_debug.log("setAudioSourceAndPlay"); this.audio.src = audioUrl; try { await this.audio.play(); } catch (e) { console.error("[VOT]", e); if (e.name === "NotSupportedError") { - if ( - [...sitesInvidious, ...sitesPiped].includes(window.location.hostname) - ) { - throw new VOTLocalizedError("VOTMediaCSPError"); - } this.data.audioProxy = 1; await votStorage.set("audioProxy", 1); } } + } - return audioUrl; + /** + * Download audio file and connect it to audio context + * + * @param {string} audioUrl + * @return {Promise} + * @memberof VideoHandler + */ + async configurePlaySound(audioUrl) { + try { + utils_debug.log("[VOT] Trying bypass audio CSP..."); + const res = await GM_fetch(audioUrl); + const data = await res.arrayBuffer(); + + this.audioBuffer = await this.audioContext.decodeAudioData(data); + this.playSound = this.audioContext.createBufferSource(); + this.playSound.buffer = this.audioBuffer; + this.playSound.connect(this.gainNode); + // this.playSound.start(); + } catch (err) { + console.error("[VOT] Failed to bypass CSP", err); + if (err.message === "Timeout") { + utils_debug.log("Request timed out. Handling timeout error..."); + this.data.audioProxy = 1; + await votStorage.set("audioProxy", 1); + } + } } // update translation audio src async updateTranslation(audioUrl) { + // ! Don't use this function for streams //debug.log("cachedTranslation", this.cachedTranslation?.url, this.audio.currentSrc); if (this.cachedTranslation?.url === this.audio.currentSrc) { utils_debug.log("[translateFunc] Audio src is the same"); @@ -8999,8 +9147,10 @@ class VideoHandler { console.log(`[VOT] Audio proxied via ${audioUrl}`); } - // ! Don't use this function for streams - this.audio.src = audioUrl; + // eslint-disable-next-line sonarjs/no-unused-expressions + this.needBypassCSP() + ? await this.configurePlaySound(audioUrl) + : await this.setAudioSourceAndPlay(audioUrl); if (!this.volumeOnStart) { this.volumeOnStart = this.getVideoVolume(); diff --git a/package-lock.json b/package-lock.json index c77489b2..378c1f08 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,7 @@ "": { "name": "voice-over-translation", "version": "1.0.0", + "hasInstallScript": true, "license": "MIT", "dependencies": { "bowser": "^2.11.0", diff --git a/patches/vot.js+1.2.9+003+added-sites-selectors.patch b/patches/vot.js+1.2.9+003+added-sites-selectors.patch index ef7505bb..c719bfe9 100644 --- a/patches/vot.js+1.2.9+003+added-sites-selectors.patch +++ b/patches/vot.js+1.2.9+003+added-sites-selectors.patch @@ -1,8 +1,8 @@ diff --git a/node_modules/vot.js/dist/config/sites.js b/node_modules/vot.js/dist/config/sites.js -index 64e1530..ffc71a8 100644 +index 64e1530..0f0c9ac 100644 --- a/node_modules/vot.js/dist/config/sites.js +++ b/node_modules/vot.js/dist/config/sites.js -@@ -2,34 +2,69 @@ import { VideoService } from "../types/yandex.js"; +@@ -2,34 +2,71 @@ import { VideoService } from "../types/yandex.js"; import { sitesInvidious, sitesPiped, sitesProxiTok, sitesPeertube, sitesPoketube, } from "./alternativeUrls.js"; export default [ { @@ -31,12 +31,14 @@ index 64e1530..ffc71a8 100644 url: "https://youtu.be/", match: sitesInvidious, + selector: "#player", ++ needBypassCSP: true, }, { host: VideoService.piped, url: "https://youtu.be/", match: sitesPiped, + selector: ".shaka-video-container", ++ needBypassCSP: true, }, { host: VideoService.poketube, @@ -73,7 +75,7 @@ index 64e1530..ffc71a8 100644 }, { host: VideoService.twitch, -@@ -40,209 +75,284 @@ export default [ +@@ -40,210 +77,294 @@ export default [ /^clips.twitch.tv$/, /^player.twitch.tv$/, ], @@ -108,6 +110,7 @@ index 64e1530..ffc71a8 100644 url: "https://www.xvideos.com/", match: /^(www.)?(xvideos|xv-ru).com$/, + selector: ".video-bg-pic", ++ needBypassCSP: true, }, { host: VideoService.pornhub, @@ -129,7 +132,8 @@ index 64e1530..ffc71a8 100644 url: "https://twitter.com/i/status/", match: /^(twitter|x).com$/, + selector: 'div[data-testid="videoComponent"] > div:nth-child(1) > div', -+ eventSelector: 'div[data-testid="videoPlayer"]' ++ eventSelector: 'div[data-testid="videoPlayer"]', ++ needBypassCSP: true, }, { host: VideoService.rumble, @@ -145,6 +149,7 @@ index 64e1530..ffc71a8 100644 + match: (url) => + url.host.includes("facebook.com") && url.pathname.includes("/videos/"), + selector: 'div[role="main"] div[data-pagelet$="video" i]', ++ needBypassCSP: true, + }, + { + additionalData: "reels", @@ -153,6 +158,7 @@ index 64e1530..ffc71a8 100644 + match: (url) => + url.host.includes("facebook.com") && url.pathname.includes("/reel/"), + selector: 'div[role="main"]', ++ needBypassCSP: true, }, { host: VideoService.rutube, @@ -224,7 +230,8 @@ index 64e1530..ffc71a8 100644 - match: /^disk.yandex.ru|yadi.sk$/, + match: /^disk.yandex.ru$/, + selector: ".video-player__player > div:nth-child(1)", -+ eventSelector: ".video-player__player" ++ eventSelector: ".video-player__player", ++ needBypassCSP: true, }, { host: VideoService.okru, @@ -298,6 +305,7 @@ index 64e1530..ffc71a8 100644 match: /^(www.|new.|old.)?reddit.com$/, + selector: ".reddit-video-player-root", needExtraData: true, ++ needBypassCSP: true, }, { host: VideoService.kick, @@ -312,6 +320,7 @@ index 64e1530..ffc71a8 100644 match: /^developer.apple.com$/, + selector: ".developer-video-player", needExtraData: true, ++ needBypassCSP: true, }, { host: VideoService.epicgames, @@ -349,6 +358,7 @@ index 64e1530..ffc71a8 100644 + selector: ".playkit-container", + eventSelector: ".playkit-player", needExtraData: true, ++ needBypassCSP: true, }, { host: VideoService.watchpornto, @@ -362,5 +372,7 @@ index 64e1530..ffc71a8 100644 match: /^(www)?.linkedin.com$/, + selector: ".vjs-v7", needExtraData: true, ++ needBypassCSP: true, }, { + host: VideoService.custom, diff --git a/patches/vot.js+1.2.8+007+added-coursera.patch b/patches/vot.js+1.2.9+007+added-coursera.patch similarity index 99% rename from patches/vot.js+1.2.8+007+added-coursera.patch rename to patches/vot.js+1.2.9+007+added-coursera.patch index 84ea1ff9..a02036a9 100644 --- a/patches/vot.js+1.2.8+007+added-coursera.patch +++ b/patches/vot.js+1.2.9+007+added-coursera.patch @@ -1,5 +1,5 @@ diff --git a/node_modules/vot.js/dist/config/sites.js b/node_modules/vot.js/dist/config/sites.js -index 66d084c..633eaf9 100644 +index 6ff12e4..0530553 100644 --- a/node_modules/vot.js/dist/config/sites.js +++ b/node_modules/vot.js/dist/config/sites.js @@ -342,6 +342,14 @@ export default [ diff --git a/scripts/wiki-gen/SITES-EN.md b/scripts/wiki-gen/SITES-EN.md index cafd1673..fc21ea60 100644 --- a/scripts/wiki-gen/SITES-EN.md +++ b/scripts/wiki-gen/SITES-EN.md @@ -49,7 +49,9 @@ Available paths: Limitations: - Doesn't work in the video preview -- To work, you must completely remove [CSP](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) with pages +- To ensure that the script works, you need to [enable the "Bypass Media CSP" setting](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) in the extension or delete the CSP in another way +- To ensure that the script works, you need to [enable the "Bypass Media CSP" setting](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) in the extension or delete the CSP in another way +- To ensure that the script works, you need to [enable the "Bypass Media CSP" setting](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) in the extension or delete the CSP in another way ## Piped @@ -97,7 +99,10 @@ Available paths: Limitations: - Doesn't work in the video preview -- To work, you must completely remove [CSP](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) with pages +- To ensure that the script works, you need to [enable the "Bypass Media CSP" setting](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) in the extension or delete the CSP in another way +- To ensure that the script works, you need to [enable the "Bypass Media CSP" setting](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) in the extension or delete the CSP in another way +- To ensure that the script works, you need to [enable the "Bypass Media CSP" setting](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) in the extension or delete the CSP in another way +- To ensure that the script works, you need to [enable the "Bypass Media CSP" setting](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) in the extension or delete the CSP in another way ## Poketube @@ -235,7 +240,7 @@ Available paths: Limitations: -- To work, you may need to add a script to the [CSP](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) +- To ensure that the script works, you need to [enable the "Bypass Media CSP" setting](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) in the extension or delete the CSP in another way ## Pornhub @@ -257,7 +262,7 @@ Limitations: ## Twitter -Status: [⚠️] Works with limitations +Status: [✅] Working Available (sub)domains: @@ -270,8 +275,9 @@ Available paths: Limitations: -- To work, you need to add a script to the [CSP](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) - The translation in the feed doesn't work (It only works in open videos) +- To ensure that the script works, you need to [enable the "Bypass Media CSP" setting](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) in the extension or delete the CSP in another way +- To ensure that the script works, you need to [enable the "Bypass Media CSP" setting](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) in the extension or delete the CSP in another way ## Rumble @@ -291,7 +297,7 @@ Limitations: ## Facebook -Status: [⚠️] Works with limitations +Status: [✅] Working Available (sub)domains: @@ -304,7 +310,7 @@ Available paths: Limitations: -- To work, you need to add a script to the [CSP](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) +- To ensure that the script works, you need to [enable the "Bypass Media CSP" setting](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) in the extension or delete the CSP in another way ## Rutube @@ -431,7 +437,7 @@ Limitations: ## Yandex Disk -Status: [⚠️] Works with limitations +Status: [✅] Working Available (sub)domains: @@ -443,8 +449,9 @@ Available paths: Limitations: -- To work, you need to add a script to the [CSP](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) - It only works with public links +- To ensure that the script works, you need to [enable the "Bypass Media CSP" setting](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) in the extension or delete the CSP in another way +- To ensure that the script works, you need to [enable the "Bypass Media CSP" setting](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) in the extension or delete the CSP in another way ## OK.ru @@ -592,7 +599,8 @@ Available paths: Limitations: - There are no subtitles -- To work, you must completely remove [CSP](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) with pages +- To ensure that the script works, you need to [enable the "Bypass Media CSP" setting](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) in the extension or delete the CSP in another way +- To ensure that the script works, you need to [enable the "Bypass Media CSP" setting](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) in the extension or delete the CSP in another way ## Kick @@ -627,6 +635,8 @@ Available paths: Limitations: - There are no subtitles +- To ensure that the script works, you need to [enable the "Bypass Media CSP" setting](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) in the extension or delete the CSP in another way +- To ensure that the script works, you need to [enable the "Bypass Media CSP" setting](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) in the extension or delete the CSP in another way ## Epicgames @@ -719,7 +729,7 @@ Limitations: ## Sap -Status: [⚠️] Works with limitations +Status: [✅] Working Available (sub)domains: @@ -732,7 +742,7 @@ Available paths: Limitations: -- To work, you must completely remove [CSP](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) with pages +- To ensure that the script works, you need to [enable the "Bypass Media CSP" setting](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) in the extension or delete the CSP in another way ## Watchpornto @@ -749,7 +759,7 @@ Available paths: ## Linkedin -Status: [⚠️] Works with limitations +Status: [✅] Working Available (sub)domains: @@ -762,7 +772,7 @@ Available paths: Limitations: -- To work, you must completely remove [CSP](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) with pages +- To ensure that the script works, you need to [enable the "Bypass Media CSP" setting](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) in the extension or delete the CSP in another way ## Direct link to MP4 diff --git a/scripts/wiki-gen/SITES-RU.md b/scripts/wiki-gen/SITES-RU.md index 1b44bfd9..71effef7 100644 --- a/scripts/wiki-gen/SITES-RU.md +++ b/scripts/wiki-gen/SITES-RU.md @@ -49,7 +49,7 @@ Ограничения: - Не работает в предпросмотре видео -- Для работы необходимо полностью удалить [CSP](https://github.com/ilyhalight/voice-over-translation/wiki/%5BRU%5D-FAQ) со страницы +- Для гарантированной работы скрипта необходимо [включить настройку "Обход Media CSP"](https://github.com/ilyhalight/voice-over-translation/wiki/%5BRU%5D-FAQ) в расширение или удалить CSP другим способом ## Piped @@ -97,7 +97,8 @@ Ограничения: - Не работает в предпросмотре видео -- Для работы необходимо полностью удалить [CSP](https://github.com/ilyhalight/voice-over-translation/wiki/%5BRU%5D-FAQ) со страницы +- Для гарантированной работы скрипта необходимо [включить настройку "Обход Media CSP"](https://github.com/ilyhalight/voice-over-translation/wiki/%5BRU%5D-FAQ) в расширение или удалить CSP другим способом +- Для гарантированной работы скрипта необходимо [включить настройку "Обход Media CSP"](https://github.com/ilyhalight/voice-over-translation/wiki/%5BRU%5D-FAQ) в расширение или удалить CSP другим способом ## Poketube @@ -235,7 +236,7 @@ Ограничения: -- Для работы может потребоваться добавить скрипт в [CSP](https://github.com/ilyhalight/voice-over-translation/wiki/%5BRU%5D-FAQ) +- Для гарантированной работы скрипта необходимо [включить настройку "Обход Media CSP"](https://github.com/ilyhalight/voice-over-translation/wiki/%5BRU%5D-FAQ) в расширение или удалить CSP другим способом ## Pornhub @@ -257,7 +258,7 @@ ## Twitter -Статус: [⚠️] Работает с ограничениями +Статус: [✅] Работает Доступные (под)домены: @@ -270,8 +271,8 @@ Ограничения: -- Для работы необходимо добавить скрипт в [CSP](https://github.com/ilyhalight/voice-over-translation/wiki/%5BRU%5D-FAQ) - Не работает перевод в ленте (Работает только в открытых видео) +- Для гарантированной работы скрипта необходимо [включить настройку "Обход Media CSP"](https://github.com/ilyhalight/voice-over-translation/wiki/%5BRU%5D-FAQ) в расширение или удалить CSP другим способом ## Rumble @@ -291,7 +292,7 @@ ## Facebook -Статус: [⚠️] Работает с ограничениями +Статус: [✅] Работает Доступные (под)домены: @@ -304,7 +305,7 @@ Ограничения: -- Для работы необходимо добавить скрипт в [CSP](https://github.com/ilyhalight/voice-over-translation/wiki/%5BRU%5D-FAQ) +- Для гарантированной работы скрипта необходимо [включить настройку "Обход Media CSP"](https://github.com/ilyhalight/voice-over-translation/wiki/%5BRU%5D-FAQ) в расширение или удалить CSP другим способом ## Rutube @@ -431,7 +432,7 @@ ## Yandex Disk -Статус: [⚠️] Работает с ограничениями +Статус: [✅] Работает Доступные (под)домены: @@ -443,8 +444,8 @@ Ограничения: -- Для работы необходимо добавить скрипт в [CSP](https://github.com/ilyhalight/voice-over-translation/wiki/%5BRU%5D-FAQ) - Работает только с публичными ссылками +- Для гарантированной работы скрипта необходимо [включить настройку "Обход Media CSP"](https://github.com/ilyhalight/voice-over-translation/wiki/%5BRU%5D-FAQ) в расширение или удалить CSP другим способом ## OK.ru @@ -592,7 +593,7 @@ Ограничения: - Нет субтитров -- Для работы необходимо полностью удалить [CSP](https://github.com/ilyhalight/voice-over-translation/wiki/%5BRU%5D-FAQ) со страницы +- Для гарантированной работы скрипта необходимо [включить настройку "Обход Media CSP"](https://github.com/ilyhalight/voice-over-translation/wiki/%5BRU%5D-FAQ) в расширение или удалить CSP другим способом ## Kick @@ -627,6 +628,7 @@ Ограничения: - Нет субтитров +- Для гарантированной работы скрипта необходимо [включить настройку "Обход Media CSP"](https://github.com/ilyhalight/voice-over-translation/wiki/%5BRU%5D-FAQ) в расширение или удалить CSP другим способом ## Epicgames @@ -719,7 +721,7 @@ ## Sap -Статус: [⚠️] Работает с ограничениями +Статус: [✅] Работает Доступные (под)домены: @@ -732,7 +734,7 @@ Ограничения: -- Для работы необходимо полностью удалить [CSP](https://github.com/ilyhalight/voice-over-translation/wiki/%5BRU%5D-FAQ) со страницы +- Для гарантированной работы скрипта необходимо [включить настройку "Обход Media CSP"](https://github.com/ilyhalight/voice-over-translation/wiki/%5BRU%5D-FAQ) в расширение или удалить CSP другим способом ## Watchpornto @@ -749,7 +751,7 @@ ## Linkedin -Статус: [⚠️] Работает с ограничениями +Статус: [✅] Работает Доступные (под)домены: @@ -762,7 +764,7 @@ Ограничения: -- Для работы необходимо полностью удалить [CSP](https://github.com/ilyhalight/voice-over-translation/wiki/%5BRU%5D-FAQ) со страницы +- Для гарантированной работы скрипта необходимо [включить настройку "Обход Media CSP"](https://github.com/ilyhalight/voice-over-translation/wiki/%5BRU%5D-FAQ) в расширение или удалить CSP другим способом ## Direct link to MP4 diff --git a/scripts/wiki-gen/data.js b/scripts/wiki-gen/data.js index eeca63a5..972d22aa 100644 --- a/scripts/wiki-gen/data.js +++ b/scripts/wiki-gen/data.js @@ -7,7 +7,7 @@ const youtubeSiteData = { const youtubeAltSiteData = { paths: youtubeSiteData.paths, - limits: [...youtubeSiteData.limits, locales.needRemoveCSP], + limits: [...youtubeSiteData.limits], }; const siteData = { @@ -46,7 +46,6 @@ const siteData = { }, xvideos: { paths: ["/VIDEO_ID/VIDEO_NAME"], - limits: [locales.maybeNeedCSP], }, pornhub: { paths: ["/view_video.php?viewkey=VIDEO_ID", "/embed/VIDEO_ID"], @@ -54,7 +53,7 @@ const siteData = { }, twitter: { paths: ["/NAME/status/VIDEO_ID"], - limits: [locales.needAddToCSP, locales.noFeedVideos], + limits: [locales.noFeedVideos], }, udemy: { paths: ["/course/NAME/learn/lecture/LECTURE_ID"], @@ -66,7 +65,6 @@ const siteData = { }, facebook: { paths: ["/reel/VIDEO_ID", "/videos/VIDEO_ID"], - limits: [locales.needAddToCSP], }, rutube: { paths: ["/video/VIDEO_ID", "/?bvid=VIDEO_ID"], @@ -104,7 +102,7 @@ const siteData = { }, yandexdisk: { paths: ["/i/FILE_ID"], - limits: [locales.needAddToCSP, locales.workOnlyWithPublicLinks], + limits: [locales.workOnlyWithPublicLinks], }, coursehunter: { paths: ["/course/COURSE_ID"], @@ -141,7 +139,7 @@ const siteData = { }, reddit: { paths: ["/r/SUB_REDDIT/comments/VIDEO_ID/VIDEO_NAME"], - limits: [locales.noSubtitles, locales.needRemoveCSP], + limits: [locales.noSubtitles], }, kick: { paths: ["/video/VIDEO_ID", "/NICKNAME?clip=clip_CLIPID"], @@ -165,14 +163,12 @@ const siteData = { }, sap: { paths: ["/courses/COURSE_NAME", "/courses/COURSE_NAME/LECTURE_NAME"], - limits: [locales.needRemoveCSP], }, watchpornto: { paths: ["/video/VIDEO_ID/VIDEO_NAME", "/embed/VIDEO_ID"], }, linkedin: { paths: ["/learning/COURSE_NAME/LECTURE_NAME"], - limits: [locales.needRemoveCSP], }, directlink: { paths: ["/*.mp4", "/*.webm"], @@ -185,26 +181,26 @@ const extraData = { status: "⚠️", statusPhrase: locales.worksWithLimitations, }, - twitter: { - status: "⚠️", - statusPhrase: locales.worksWithLimitations, - }, - facebook: { - status: "⚠️", - statusPhrase: locales.worksWithLimitations, - }, - yandexdisk: { - status: "⚠️", - statusPhrase: locales.worksWithLimitations, - }, - sap: { - status: "⚠️", - statusPhrase: locales.worksWithLimitations, - }, - linkedin: { - status: "⚠️", - statusPhrase: locales.worksWithLimitations, - }, + // twitter: { + // status: "⚠️", + // statusPhrase: locales.worksWithLimitations, + // }, + // facebook: { + // status: "⚠️", + // statusPhrase: locales.worksWithLimitations, + // }, + // yandexdisk: { + // status: "⚠️", + // statusPhrase: locales.worksWithLimitations, + // }, + // sap: { + // status: "⚠️", + // statusPhrase: locales.worksWithLimitations, + // }, + // linkedin: { + // status: "⚠️", + // statusPhrase: locales.worksWithLimitations, + // }, }; export { siteData, extraData }; diff --git a/scripts/wiki-gen/index.js b/scripts/wiki-gen/index.js index ce177dd6..2c9470a2 100644 --- a/scripts/wiki-gen/index.js +++ b/scripts/wiki-gen/index.js @@ -103,7 +103,11 @@ function genMarkdown(sites, lang = "ru") { return removeDuplicatesKeepLast(sitesData, "host").map((site) => { const hasData = Object.hasOwn(siteData, site.host); - const limitsData = hasData ? siteData[site.host].limits : []; + const limitsData = hasData ? siteData[site.host].limits ?? [] : []; + if (site.needBypassCSP) { + limitsData.push(locales.needBypassCSP); + } + let limits = ""; if (limitsData?.length) { limits = `\n\n${locales.limitations[lang]}:\n\n- ${limitsData.map((limit) => limit[lang]).join("\n- ")}`; @@ -136,27 +140,29 @@ async function main() { status: extra ? extraData[host].status : "✅", statusPhrase: extra ? extraData[host].statusPhrase : locales.working, additionalData: site.additionalData, + needBypassCSP: site.needBypassCSP, }; }); const langs = ["ru", "en"]; for await (const lang of langs) { - const mdText = genMarkdown(supportedSites, lang) - .join("\n\n") - .replace("Nine_gag", "9GAG") - .replace("Mailru", "Mail.ru") - .replace("Yandexdisk", "Yandex Disk") - .replace("Googledrive", "Google Drive") - .replace("Okru", "OK.ru") - .replace("Custom", "Direct link to MP4") - .replace("Bannedvideo", "Banned.Video") - .replace( - "geo.dailymotion.com", - `geo.dailymotion.com (${locales.dailymotionNotice[lang]})`, - ) - .replace("Nineanimetv", `9AnimeTV`) - .replace("rapid-cloud.co", `9animetv.to (vidstreaming / vidcloud)`) - .replaceAll("\\/", "/"); + const mdText = + genMarkdown(supportedSites, lang) + .join("\n\n") + .replace("Nine_gag", "9GAG") + .replace("Mailru", "Mail.ru") + .replace("Yandexdisk", "Yandex Disk") + .replace("Googledrive", "Google Drive") + .replace("Okru", "OK.ru") + .replace("Custom", "Direct link to MP4") + .replace("Bannedvideo", "Banned.Video") + .replace( + "geo.dailymotion.com", + `geo.dailymotion.com (${locales.dailymotionNotice[lang]})`, + ) + .replace("Nineanimetv", `9AnimeTV`) + .replace("rapid-cloud.co", `9animetv.to (vidstreaming / vidcloud)`) + .replaceAll("\\/", "/") + "\n"; await Bun.write( path.join(__dirname, `SITES-${lang.toUpperCase()}.md`), diff --git a/scripts/wiki-gen/locales.js b/scripts/wiki-gen/locales.js index 32543239..0f26913f 100644 --- a/scripts/wiki-gen/locales.js +++ b/scripts/wiki-gen/locales.js @@ -35,17 +35,9 @@ export default { ru: "Не доступен перевод прямых трансляций", en: "Translation of live broadcasts is not available", }, - maybeNeedCSP: { - ru: "Для работы может потребоваться добавить скрипт в [CSP](https://github.com/ilyhalight/voice-over-translation/wiki/%5BRU%5D-FAQ)", - en: "To work, you may need to add a script to the [CSP](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ)", - }, - needAddToCSP: { - ru: "Для работы необходимо добавить скрипт в [CSP](https://github.com/ilyhalight/voice-over-translation/wiki/%5BRU%5D-FAQ)", - en: "To work, you need to add a script to the [CSP](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ)", - }, - needRemoveCSP: { - ru: "Для работы необходимо полностью удалить [CSP](https://github.com/ilyhalight/voice-over-translation/wiki/%5BRU%5D-FAQ) со страницы", - en: "To work, you must completely remove [CSP](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) with pages", + needBypassCSP: { + ru: 'Для гарантированной работы скрипта необходимо [включить настройку "Обход Media CSP"](https://github.com/ilyhalight/voice-over-translation/wiki/%5BRU%5D-FAQ) в расширение или удалить CSP другим способом', + en: 'To ensure that the script works, you need to [enable the "Bypass Media CSP" setting](https://github.com/ilyhalight/voice-over-translation/wiki/%5BEN%5D-FAQ) in the extension or delete the CSP in another way', }, cantTranslatePHPremium: { ru: "Недоступен перевод для PH Premium", diff --git a/src/index.js b/src/index.js index f54837ab..3e6e4f27 100644 --- a/src/index.js +++ b/src/index.js @@ -47,7 +47,6 @@ import { translate, translateServices, } from "./utils/translateApis.js"; -import { sitesInvidious, sitesPiped } from "vot.js/alternativeUrls"; const browserInfo = Bowser.getParser(window.navigator.userAgent).getResult(); const cfOnlyExtensions = [ @@ -322,6 +321,10 @@ class VideoHandler { responseLanguage: votStorage.get("responseLanguage", lang), defaultVolume: votStorage.get("defaultVolume", 100), audioProxy: votStorage.get("audioProxy", 0), + bypassMediaCSP: votStorage.get( + "bypassMediaCSP", + Number(!!this.audioContext), + ), showPiPButton: votStorage.get("showPiPButton", 0), translateAPIErrors: votStorage.get("translateAPIErrors", 1), translationService: votStorage.get( @@ -741,7 +744,11 @@ class VideoHandler { localizationProvider.get("VOTAudioBooster"), this.data?.audioBooster ?? false, ); - this.votAudioBoosterCheckbox.container.hidden = !this.audioContext; + if (!this.audioContext) { + this.votBypassMediaCSPCheckbox.input.disabled = true; + this.votBypassMediaCSPCheckbox.container.title = + localizationProvider.get("VOTNeedWebAudioAPI"); + } this.votSettingsDialog.bodyContainer.appendChild( this.votAudioBoosterCheckbox.container, ); @@ -851,6 +858,22 @@ class VideoHandler { this.votAudioProxyCheckbox.container, ); + this.votBypassMediaCSPCheckbox = ui.createCheckbox( + localizationProvider.get("VOTBypassMediaCSP") + + (this.site.needBypassCSP + ? ` (${localizationProvider.get("VOTMediaCSPEnabledOnSite")})` + : ""), + this.data?.bypassMediaCSP ?? false, + ); + if (!this.audioContext) { + this.votBypassMediaCSPCheckbox.input.disabled = true; + this.votBypassMediaCSPCheckbox.container.title = + localizationProvider.get("VOTNeedWebAudioAPI"); + } + this.votSettingsDialog.bodyContainer.appendChild( + this.votBypassMediaCSPCheckbox.container, + ); + // ABOUT this.votAboutHeader = ui.createHeader(localizationProvider.get("about")); @@ -951,7 +974,7 @@ class VideoHandler { } async handleTranslationBtnClick() { - if (this.audio.src) { + if (this.audio.src || this.playSound) { debug.log("[click translationBtn] audio.src is not empty"); this.stopTranslate(); return; @@ -1495,6 +1518,18 @@ class VideoHandler { })(); }); + this.votBypassMediaCSPCheckbox.input.addEventListener("change", (e) => { + (async () => { + this.data.bypassMediaCSP = Number(e.target.checked); + await votStorage.set("bypassMediaCSP", this.data.bypassMediaCSP); + debug.log( + "bypassMediaCSP value changed. New value: ", + this.data.bypassMediaCSP, + ); + this.stopTranslate(); + })(); + }); + this.votUpdateLocaleFilesButton.addEventListener("click", () => { (async () => { await votStorage.set("locale-hash", ""); @@ -2064,19 +2099,63 @@ class VideoHandler { } /** - * Synchronizes the lip sync of the video and audio elements. + * Synchronizes the lip sync of the video and audio context. * - * @param {boolean} [mode=false] - The lip sync mode. + * @param {boolean|string} [mode=false] - The lip sync mode. * @return {void} */ - lipSync(mode = false) { - debug.log("lipsync video", this.video); - if (!this.video) { + lipsyncAudioContext(mode = false) { + if (this.playSound) { + this.playSound.playbackRate.value = this.video.playbackRate; + } + + if (!mode) { + debug.log("lipsync mode is not set"); return; } - this.audio.currentTime = this.video.currentTime; - this.audio.playbackRate = this.video.playbackRate; + if (mode == "play") { + debug.log("lipsync mode is play"); + try { + this.playSound.start(0, this.audio.currentTime); + } catch { + /* empty */ + } + return; + } + + // video is inactive + if (["pause", "stop", "waiting"].includes(mode)) { + debug.log(`lipsync mode is ${mode}`); + try { + this.playSound.stop(); + } catch { + /* empty */ + } + + this.playSound = this.audioContext.createBufferSource(); + this.playSound.buffer = this.audioBuffer; + this.playSound.connect(this.gainNode); + return; + } + + if (mode == "playing") { + debug.log("lipsync mode is playing"); + try { + this.playSound.start(0, this.audio.currentTime); + } catch { + /* empty */ + } + } + } + + /** + * Synchronizes the lip sync of the video and audio element. + * + * @param {boolean|string} [mode=false] - The lip sync mode. + * @return {void} + */ + lipsyncAudio(mode = false) { if (!mode) { debug.log("lipsync mode is not set"); return; @@ -2099,10 +2178,12 @@ class VideoHandler { } return; } + // video is inactive if (["pause", "stop", "waiting"].includes(mode)) { debug.log(`lipsync mode is ${mode}`); this.audio.pause(); + return; } if (mode == "playing") { @@ -2111,17 +2192,46 @@ class VideoHandler { } } + /** + * Synchronizes the lip sync of the video and audio elements. + * + * @param {boolean|string} [mode=false] - The lip sync mode. + * @return {void} + */ + lipSync(mode = false) { + debug.log("lipsync video", this.video); + if (!this.video) { + return; + } + this.audio.currentTime = this.video.currentTime; + this.audio.playbackRate = this.video.playbackRate; + + return this.needBypassCSP() + ? this.lipsyncAudioContext(mode) + : this.lipsyncAudio(mode); + } + // Define a function to handle common events handleVideoEvent = (event) => { debug.log(`video ${event.type}`); this.lipSync(event.type); }; + needBypassCSP = () => this.data.bypassMediaCSP && this.site.needBypassCSP; + // Default actions on stop translate stopTranslate() { for (const e of videoLipSyncEvents) { this.video.removeEventListener(e, this.handleVideoEvent); } + if (this.playSound) { + try { + this.playSound.stop(); + this.playSound = null; + } catch { + /* empty */ + } + } this.audio.pause(); this.audio.src = ""; this.audio.removeAttribute("src"); @@ -2241,27 +2351,54 @@ class VideoHandler { } } + return audioUrl; + } + + async setAudioSourceAndPlay(audioUrl) { + debug.log("setAudioSourceAndPlay"); this.audio.src = audioUrl; try { await this.audio.play(); } catch (e) { console.error("[VOT]", e); if (e.name === "NotSupportedError") { - if ( - [...sitesInvidious, ...sitesPiped].includes(window.location.hostname) - ) { - throw new VOTLocalizedError("VOTMediaCSPError"); - } this.data.audioProxy = 1; await votStorage.set("audioProxy", 1); } } + } - return audioUrl; + /** + * Download audio file and connect it to audio context + * + * @param {string} audioUrl + * @return {Promise} + * @memberof VideoHandler + */ + async configurePlaySound(audioUrl) { + try { + debug.log("[VOT] Trying bypass audio CSP..."); + const res = await GM_fetch(audioUrl); + const data = await res.arrayBuffer(); + + this.audioBuffer = await this.audioContext.decodeAudioData(data); + this.playSound = this.audioContext.createBufferSource(); + this.playSound.buffer = this.audioBuffer; + this.playSound.connect(this.gainNode); + // this.playSound.start(); + } catch (err) { + console.error("[VOT] Failed to bypass CSP", err); + if (err.message === "Timeout") { + debug.log("Request timed out. Handling timeout error..."); + this.data.audioProxy = 1; + await votStorage.set("audioProxy", 1); + } + } } // update translation audio src async updateTranslation(audioUrl) { + // ! Don't use this function for streams //debug.log("cachedTranslation", this.cachedTranslation?.url, this.audio.currentSrc); if (this.cachedTranslation?.url === this.audio.currentSrc) { debug.log("[translateFunc] Audio src is the same"); @@ -2282,8 +2419,10 @@ class VideoHandler { console.log(`[VOT] Audio proxied via ${audioUrl}`); } - // ! Don't use this function for streams - this.audio.src = audioUrl; + // eslint-disable-next-line sonarjs/no-unused-expressions + this.needBypassCSP() + ? await this.configurePlaySound(audioUrl) + : await this.setAudioSourceAndPlay(audioUrl); if (!this.volumeOnStart) { this.volumeOnStart = this.getVideoVolume(); diff --git a/src/localization/hashes.json b/src/localization/hashes.json index 6a11a11d..0eca5efc 100644 --- a/src/localization/hashes.json +++ b/src/localization/hashes.json @@ -1,64 +1,64 @@ { - "af": "817c316649e87f23dec9424fba8ff665", - "am": "a34f76ed7a67fa7c50c3deaa01b37e42", - "ar": "8c0af1068fcc8f7a2c230a488c8648df", - "az": "ae3e879c7fab14ea0701e39192016944", - "bg": "d679146f5a5924b2ec41a6b0f11ecf38", - "bn": "4e050983972b3e290a80d40e01816a65", - "bs": "2673e6cdf11aa042bb8cd815e88341ea", - "ca": "e6e9312a19278d9d3c55972611ebbb74", - "cs": "f42acbfb3264d839c9837ca150f1b7af", - "cy": "f14e5f8056cfbb0b59b3dfdf00c175eb", - "da": "17b17effcef860dd79a6edc09f587984", - "de": "d3d7b9b266b8d18906ebc3dcbb85cd92", - "el": "cc9c051f181460544520b62c142e5f06", - "en": "c5c1718938874b0ca96ded7bab28fff1", - "es": "41aad4a9e962241cbf30f7da9146ddb9", - "et": "c02756fb96917d79c0824443462d6568", - "eu": "75855c68a06dd01d036ad37155ab45e2", - "fa": "ebbe0e8d0bbb6db0e0d9219e96dbd677", - "fi": "125d51c0614671b57ad97d046f7d2136", - "fr": "66b17ab642faafc9aca55321d8d7e1d0", - "gl": "33e497526c8e272bff4ffa4beece44f6", - "hi": "467911e27a78f4fe2cfe7a3237ef1168", - "hr": "58e7b42982c7eb67e2313c17f18534f5", - "hu": "f9c5a3866c5fbe0319c894589f70dbe2", - "hy": "cf90c4b646c8c16deadd4b007c5ceadf", - "id": "0ec065bcedd9a3a6377069cad66b50ab", - "it": "bf53754a4bd399175f4447600e142ac8", - "ja": "58e11b2abfcfafcc258d8f4d77655754", - "jv": "c321a788c6668a91416041dc44552568", - "kk": "621bf36ec73a20151fc90e0ff114b440", - "km": "fd74ba87c9d1e588f576d7887be4f1b0", - "kn": "ab410fa0674255da0fb7d27df75dd022", - "ko": "e9490d79f3a2a51d10f5b8682a2ceb01", - "lo": "2091021ade8b7e4817980700f3f5a6f6", - "mk": "d4a36b44f05369a5d451e6e4ac14f862", - "ml": "8855e38a29e6e189f233fb428e15fd2b", - "mn": "a3481db2aa8180e967b0c2766e54eaf9", - "ms": "6a3ca618eb8123574b3018b403e7c5ff", - "mt": "d263f689b84eeac9337a578506ef88a4", - "my": "21eac581362e1bddf84cd92d4acc0f10", - "ne": "769485846aa72bed3cc6d50074408775", - "nl": "ba84127cd23d9e6d7f9cdcf1a8b50cd8", - "pa": "d52ae9f91fd54bc902cef7d66fed42a0", - "pl": "132c0a2f04c77eaa9dfdc7f7f2f06f55", - "pt": "5541dc6d194f350edbce3031f8134c40", - "ro": "cb70b6cff1daab3009ebe5e9be8d5797", - "ru": "e0df112b3ce8ad09722f4f40763e4848", - "si": "4045904430968dfe723bf51a9ee7586d", - "sk": "8fcef0db6549696cdc0d9d93e406bdae", - "sl": "800da38fe5257342ec72097ab347861f", - "sq": "2ed324e8bcab84fb82a9bc21c36ffbc8", - "sr": "784c093dc8902cb2c073cfc2ab428099", - "su": "4814710d104496f48d3b07d86cd46ea9", - "sv": "32cf59548d1b20ea6f0ce5cecfec6d7a", - "sw": "7696770831a870f4bf30e2cd0bf28d02", - "tr": "d794e05528c90b2a5dc12d0258865783", - "uk": "fcf6b150f9970a579c0b062cfe4b3868", - "ur": "17198df07b1da3c33c6963210760bf2b", - "uz": "be683132758855e1d5a45629f59cb0ec", - "vi": "60bb2b10c7fbf34bfeac154815f2a3da", - "zh": "2f3f4aa5ac97ed6a74075080f10a7074", - "zu": "e08af9570d056df5797d6e9ef426d8c5" + "af": "3d65d4907aa63e12628ec8f35c2ee265", + "am": "c136cf8d8f359ad96fe8e5f903c8b5f2", + "ar": "9fce7b067fa38e0a80723ebfdc0e286b", + "az": "867c3d52485cbae3e246e3e4da74b1da", + "bg": "d9859674d8921782f8460ff2f938fa91", + "bn": "9a22f9a9341eb8cfa967b88c441bea24", + "bs": "2cb80ed4773d6855fa6238df51e6a534", + "ca": "5629706871d7f2f1e303edffad9bd801", + "cs": "24e845ebc223e178afc759d4ea60563b", + "cy": "b7a1f94e75d8b2e4e02af1b0d986481f", + "da": "09249ed5f0b8c653094beb7629a4113a", + "de": "3b299168e7700e8f0b4738403c61560b", + "el": "84b339813625032495f7c29e30f696e0", + "en": "f034726565e8c8b965e5d9fb27223362", + "es": "87e4d7864d3b84dec71437cdd51de1bc", + "et": "337c29ce8306f9d13b1224f6ad9b6b4c", + "eu": "98edb5fb8e226c7dc1e77b3fc8f0bbdb", + "fa": "33445d70e64f3002b2e804d75522c63b", + "fi": "35feda069e4f8a682f9ba531f92052ff", + "fr": "c13f8ad44a49a470da072f2b329c9e7c", + "gl": "65ba856bebb2e8d1360b6a5ef6534d4f", + "hi": "ed06efff21760efb3ff5e66ffd3c6b22", + "hr": "2b6b814910639cdc00ce70749110bffb", + "hu": "0bbc946b500f6930bf7d174093eb843a", + "hy": "34862f834a7ec2361fa0fc55b47c8f6f", + "id": "169ee141c3eb4a2cef630b709b99dfa4", + "it": "0d53b245daa5ef91f96ceae3b4b71c3c", + "ja": "48dbe38d635a56ca96d9cda7b9ac8ee3", + "jv": "5e7cc746749db744eb86bfe8c03e821b", + "kk": "ac85429e21605348d32507d28a1a6d4e", + "km": "210b27dd6891252c6c6cbd96b8318d7a", + "kn": "62c9b96e398b5915d5afcbd3bcea8c4a", + "ko": "35fec4f2db7b77ae938dd863027663b3", + "lo": "b07a6d402edc3508148dc0e427c99878", + "mk": "5129e980a39f9249cda60a59c86d8cf2", + "ml": "d04108a9236fd50d2999653e8907fbdd", + "mn": "ec9c6bffc320f51346062703e333295d", + "ms": "fd0e1f2da45801c57cb09bc645bcfa41", + "mt": "715e276d4fa8998f4e1cfd734272d697", + "my": "2ed0ab943728d9b7a49ebdd017632682", + "ne": "3adda42289975c85642442321cc945e9", + "nl": "6693d8cc4c4199cd3a52c561999f18b7", + "pa": "4d15b606233360fa0938658d53b66ea6", + "pl": "6f2e7cd02d8de802c1f8b1896ec02ae3", + "pt": "f531d0d9fc61c02522b4046937bce9b4", + "ro": "3c2a8e90bed4f90b4d0678706e8c4491", + "ru": "b8f74808e5046e7ef18ef3c99c715eb5", + "si": "1f50c8068c7f8a218afc633dbc092c57", + "sk": "501c9af1e09baf8169bf0a2c60ea8731", + "sl": "aa1d3e16b35420aa848f5219cb949060", + "sq": "fd04cc18dd4fecee0ec7a22a47aa0858", + "sr": "952bc393a6107b98a368c94e05873781", + "su": "276f10578488ceed5ec5c6f6f101ca8d", + "sv": "940f7ac86344933059852099731a8f23", + "sw": "ce29a80d3698694294d1cd7ff7daf425", + "tr": "54cdfe88da3a98bc77fd96883ad8ca4e", + "uk": "c9183acd5c9c3866c3b37d54df6d95a4", + "ur": "7d9535e1aa58759719f4d520dc030356", + "uz": "76941ddc67e91924f890697e9d9818d6", + "vi": "dd9c560357f8c2b0350bb0cceb863b39", + "zh": "47d353d2024201b6c00686cb2814f36d", + "zu": "582430fafb6727a229642e51effb758f" } diff --git a/src/localization/locales/af.json b/src/localization/locales/af.json index 9cff7344..2b7fba0d 100644 --- a/src/localization/locales/af.json +++ b/src/localization/locales/af.json @@ -189,7 +189,6 @@ "proxySettings": "Instaaninstellings", "translationTakeApproximatelyMinute2": "Die vertaling sal ongeveer {0} minute neem", "VOTAudioBooster": "Uitgebreide vertaalvolume-verhoging", - "VOTMediaCSPError": "Kon nie klank laai nie (media csp-fout)", "VOTSubtitlesDesign": "Onderskrifte ontwerp", "VOTSubtitlesFontSize": "Lettergrootte van onderskrifte", "VOTSubtitlesOpacity": "Deursigtigheid van die ondertitel agtergrond", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Laai lêers af met die video naam", "VOTUpdateLocaleFiles": "Dateer lokaliseringslêers op", "VOTLocaleHash": "Plaaslike hash", - "VOTUpdatedAt": "Opgedateer om" + "VOTUpdatedAt": "Opgedateer om", + "VOTNeedWebAudioAPI": "Om dit te aktiveer, moet jy'n Web Audio API", + "VOTBypassMediaCSP": "Omseil Media CSP", + "VOTMediaCSPEnabledOnSite": "MEDIA CSP is geaktiveer op hierdie webwerf" } diff --git a/src/localization/locales/am.json b/src/localization/locales/am.json index 5e231f73..928e5658 100644 --- a/src/localization/locales/am.json +++ b/src/localization/locales/am.json @@ -189,7 +189,6 @@ "proxySettings": "የተኪ ቅንብሮች", "translationTakeApproximatelyMinute2": "ትርጉሙ በግምት ይወስዳል {0} ደቂቃዎች", "VOTAudioBooster": "የተራዘመ የትርጉም መጠን መጨመር", - "VOTMediaCSPError": "ኦዲዮ መጫን አልተሳካም (ሚዲያ csp ስህተት)", "VOTSubtitlesDesign": "ንዑስ ርዕሶች ንድፍ", "VOTSubtitlesFontSize": "የትርጉም ጽሑፎች ቅርጸ-ቁምፊ መጠን", "VOTSubtitlesOpacity": "የትርጉም ዳራ ግልፅነት", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "ፋይሎችን በቪዲዮ ስም ያውርዱ", "VOTUpdateLocaleFiles": "የአካባቢ ፋይሎችን አዘምን", "VOTLocaleHash": "አካባቢያዊ ሃሽ", - "VOTUpdatedAt": "ላይ የተዘመነ" + "VOTUpdatedAt": "ላይ የተዘመነ", + "VOTNeedWebAudioAPI": "ይህንን ለማስቻል, አንድ የድር ኦዲዮ ኤፒአይ ሊኖርዎት ይገባል", + "VOTBypassMediaCSP": "Media CSP ማለፍ", + "VOTMediaCSPEnabledOnSite": "በዚህ ድረ ገጽ ላይ የፒ" } diff --git a/src/localization/locales/ar.json b/src/localization/locales/ar.json index e7f39570..470a5758 100644 --- a/src/localization/locales/ar.json +++ b/src/localization/locales/ar.json @@ -189,7 +189,6 @@ "proxySettings": "إعدادات الوكيل", "translationTakeApproximatelyMinute2": "ستستغرق الترجمة حوالي {0} دقيقة", "VOTAudioBooster": "زيادة حجم الترجمة الموسعة", - "VOTMediaCSPError": "فشل تحميل الصوت (خطأ في الطاقة الشمسية المركزة في الوسائط)", "VOTSubtitlesDesign": "تصميم الترجمة", "VOTSubtitlesFontSize": "حجم الخط من ترجمات", "VOTSubtitlesOpacity": "شفافية خلفية العنوان الفرعي", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "تحميل الملفات مع اسم الفيديو", "VOTUpdateLocaleFiles": "تحديث ملفات الترجمة", "VOTLocaleHash": "تجزئة اللغة", - "VOTUpdatedAt": "تحديث في 16: 40" + "VOTUpdatedAt": "تحديث في", + "VOTNeedWebAudioAPI": "لتمكين هذا ، يجب أن يكون لديك واجهة برمجة تطبيقات صوت الويب", + "VOTBypassMediaCSP": "تجاوز ميدياسب", + "VOTMediaCSPEnabledOnSite": "يتم تمكين الطاقة الشمسية المركزة وسائل الإعلام على هذا الموقع" } diff --git a/src/localization/locales/az.json b/src/localization/locales/az.json index da46472d..3bda9a3c 100644 --- a/src/localization/locales/az.json +++ b/src/localization/locales/az.json @@ -189,7 +189,6 @@ "proxySettings": "Proxy server parametrləri", "translationTakeApproximatelyMinute2": "Tərcümə təxminən {0} dəqiqə çəkəcək", "VOTAudioBooster": "Genişləndirilmiş tərcümə həcminin artırılması", - "VOTMediaCSPError": "Audio yükləyə bilmədi (media csp xətası)", "VOTSubtitlesDesign": "Altyazı dizaynı", "VOTSubtitlesFontSize": "Altyazı şrift ölçüsü", "VOTSubtitlesOpacity": "Altyazı fon şəffaflığı", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Video adı ilə faylları yükləyin", "VOTUpdateLocaleFiles": "Yerli faylları yeniləyin", "VOTLocaleHash": "Hash yerli", - "VOTUpdatedAt": "Saat yeniləndi" + "VOTUpdatedAt": "Saat yeniləndi", + "VOTNeedWebAudioAPI": "Bunu aktivləşdirmək üçün veb Audio API olmalıdır", + "VOTBypassMediaCSP": "Media CSP Bypass", + "VOTMediaCSPEnabledOnSite": "Media CSP bu saytda aktivdir" } diff --git a/src/localization/locales/bg.json b/src/localization/locales/bg.json index 90ce6828..ecd02a7a 100644 --- a/src/localization/locales/bg.json +++ b/src/localization/locales/bg.json @@ -189,7 +189,6 @@ "proxySettings": "Настройки На Прокси Сървъра", "translationTakeApproximatelyMinute2": "Преводът ще отнеме около {0} минути", "VOTAudioBooster": "Увеличаване на обема на превода", - "VOTMediaCSPError": "Грешка при зареждане на аудиото (грешка при създаване на аудио файл)", "VOTSubtitlesDesign": "Субтитри дизайн", "VOTSubtitlesFontSize": "Размер на шрифта на субтитрите", "VOTSubtitlesOpacity": "Прозрачност на фона на субтитрите", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Изтегляне на файлове с името на видеото", "VOTUpdateLocaleFiles": "Актуализиране на локализационните файлове", "VOTLocaleHash": "Локален хеш", - "VOTUpdatedAt": "Актуализирано в 16: 40" + "VOTUpdatedAt": "Актуализирано в", + "VOTNeedWebAudioAPI": "За да разрешите това, трябва да имате уеб аудио интерфейс", + "VOTBypassMediaCSP": "Заобикаляне На Медиаксп", + "VOTMediaCSPEnabledOnSite": "Медиа ДУСП е активирана на този сайт" } diff --git a/src/localization/locales/bn.json b/src/localization/locales/bn.json index a19a1cbf..f1556755 100644 --- a/src/localization/locales/bn.json +++ b/src/localization/locales/bn.json @@ -189,7 +189,6 @@ "proxySettings": "প্রক্সি সেটিংস", "translationTakeApproximatelyMinute2": "অনুবাদটি প্রায় {0} মিনিট সময় নেবে", "VOTAudioBooster": "বর্ধিত অনুবাদ ভলিউম বৃদ্ধি", - "VOTMediaCSPError": "অডিও লোড করতে ব্যর্থ (মিডিয়া সিএসপি ত্রুটি)", "VOTSubtitlesDesign": "সাবটাইটেল ডিজাইন", "VOTSubtitlesFontSize": "সাবটাইটেলের ফন্টের আকার", "VOTSubtitlesOpacity": "সাবটাইটেল পটভূমির স্বচ্ছতা", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "ভিডিও নাম সহ ফাইলগুলি ডাউনলোড করুন", "VOTUpdateLocaleFiles": "স্থানীয়করণ ফাইল আপডেট করুন", "VOTLocaleHash": "লোকেল হ্যাশ", - "VOTUpdatedAt": "এ আপডেট হয়েছে" + "VOTUpdatedAt": "এ আপডেট হয়েছে", + "VOTNeedWebAudioAPI": "এটি সক্ষম করতে আপনার অবশ্যই একটি ওয়েব অডিও এপিআই থাকতে হবে", + "VOTBypassMediaCSP": "মিডিয়াসপি বাইপাস করা", + "VOTMediaCSPEnabledOnSite": "এই সাইটে মিডিয়া সিএসপি সক্ষম করা হয়েছে" } diff --git a/src/localization/locales/bs.json b/src/localization/locales/bs.json index f10f1ecf..8872a7ef 100644 --- a/src/localization/locales/bs.json +++ b/src/localization/locales/bs.json @@ -189,7 +189,6 @@ "proxySettings": "_postavke ... ", "translationTakeApproximatelyMinute2": "Prevod će trajati otprilike {0} minuta", "VOTAudioBooster": "Prošireno povećanje obima prevođenja", - "VOTMediaCSPError": "Neuspješno učitavanje zvuka (media csp greška)", "VOTSubtitlesDesign": "Subtitles design", "VOTSubtitlesFontSize": "Veličina titlova", "VOTSubtitlesOpacity": "Transparentnost pozadine titlova", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Preuzmite datoteke sa imenom video zapisa", "VOTUpdateLocaleFiles": "Ažurirajte datoteke za lokalizaciju", "VOTLocaleHash": "Locale hash", - "VOTUpdatedAt": "Ažurirano u" + "VOTUpdatedAt": "Ažurirano u", + "VOTNeedWebAudioAPI": "Da biste to omogućili, morate imati Web Audio API", + "VOTBypassMediaCSP": "Zaobilazeći Media CSP", + "VOTMediaCSPEnabledOnSite": "Media CSP je omogućen na ovom sajtu" } diff --git a/src/localization/locales/ca.json b/src/localization/locales/ca.json index 48390f3c..66e3d770 100644 --- a/src/localization/locales/ca.json +++ b/src/localization/locales/ca.json @@ -189,7 +189,6 @@ "proxySettings": "Arranjament Del Servidor Intermediari", "translationTakeApproximatelyMinute2": "La traducció trigarà aproximadament {0} minuts", "VOTAudioBooster": "Ampliació del volum de traducció", - "VOTMediaCSPError": "Ha fallat en carregar l ' àudio (error media csp)", "VOTSubtitlesDesign": "Disseny de subtítols", "VOTSubtitlesFontSize": "Mida del tipus de lletra dels subtítols", "VOTSubtitlesOpacity": "Transparència del fons dels subtítols", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Baixeu fitxers amb el nom del vídeo", "VOTUpdateLocaleFiles": "Actualitza els fitxers de localització", "VOTLocaleHash": "Hash de localització", - "VOTUpdatedAt": "Actualització a les 16: 40" + "VOTUpdatedAt": "Actualització a les", + "VOTNeedWebAudioAPI": "Per activar-ho, heu de tenir UNA API D'Àudio", + "VOTBypassMediaCSP": "Ignorant Media CSP", + "VOTMediaCSPEnabledOnSite": "Media CSP està habilitat en aquest lloc" } diff --git a/src/localization/locales/cs.json b/src/localization/locales/cs.json index 99058183..f02c5d69 100644 --- a/src/localization/locales/cs.json +++ b/src/localization/locales/cs.json @@ -189,7 +189,6 @@ "proxySettings": "Nastavení Serveru Proxy", "translationTakeApproximatelyMinute2": "Překlad bude trvat přibližně {0} minut", "VOTAudioBooster": "Rozšíření objemu překladu", - "VOTMediaCSPError": "Nepodařilo se načíst zvuk (chyba media CSP)", "VOTSubtitlesDesign": "Titulky design", "VOTSubtitlesFontSize": "Velikost písma titulků", "VOTSubtitlesOpacity": "Průhlednost pozadí titulků", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Stahujte soubory s názvem videa", "VOTUpdateLocaleFiles": "Aktualizace lokalizačních souborů", "VOTLocaleHash": "Národní hash", - "VOTUpdatedAt": "Aktualizováno v 16: 40" + "VOTUpdatedAt": "Aktualizováno v", + "VOTNeedWebAudioAPI": "Chcete-li to povolit, musíte mít webové Audio API", + "VOTBypassMediaCSP": "Obcházení Media CSP", + "VOTMediaCSPEnabledOnSite": "Media CSP je povoleno na tomto webu" } diff --git a/src/localization/locales/cy.json b/src/localization/locales/cy.json index af2bddb1..af52274d 100644 --- a/src/localization/locales/cy.json +++ b/src/localization/locales/cy.json @@ -189,7 +189,6 @@ "proxySettings": "Gosodiadau Dirprwy", "translationTakeApproximatelyMinute2": "Bydd y cyfieithiad yn cymryd oddeutu {0} munud", "VOTAudioBooster": "Cynyddu cyfaint cyfieithu estynedig", - "VOTMediaCSPError": "Methu llwytho sain (gwall csp cyfrwng)", "VOTSubtitlesDesign": "Isdeitlau dylunio", "VOTSubtitlesFontSize": "Maint ffont isdeitlau", "VOTSubtitlesOpacity": "Tryloywder cefndir yr is-deitl", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Lawrlwytho ffeiliau gydag enw'r fideo", "VOTUpdateLocaleFiles": "Diweddaru ffeiliau lleoleiddio", "VOTLocaleHash": "Hash Locale", - "VOTUpdatedAt": "Diweddarwyd am 16: 40" + "VOTUpdatedAt": "Diweddarwyd am", + "VOTNeedWebAudioAPI": "I alluogi HYN, rhaid bod GENNYCH API Sain Gwe", + "VOTBypassMediaCSP": "Osgoi Media CSP", + "VOTMediaCSPEnabledOnSite": "Mae csp cyfryngau wedi'i alluogi ar y wefan hon" } diff --git a/src/localization/locales/da.json b/src/localization/locales/da.json index 4fb6c583..5e6a46ae 100644 --- a/src/localization/locales/da.json +++ b/src/localization/locales/da.json @@ -189,7 +189,6 @@ "proxySettings": "Fuldmagtsindstillinger", "translationTakeApproximatelyMinute2": "Oversættelsen tager cirka {0} minutter", "VOTAudioBooster": "Udvidet oversættelse volumen stigning", - "VOTMediaCSPError": "Kunne ikke indlæse lyd (media CSP-fejl)", "VOTSubtitlesDesign": "Undertekster design", "VOTSubtitlesFontSize": "Skriftstørrelse på undertekster", "VOTSubtitlesOpacity": "Gennemsigtighed i undertekstbaggrunden", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Hent filer med videonavnet", "VOTUpdateLocaleFiles": "Opdater lokaliseringsfiler", "VOTLocaleHash": "Locale hash", - "VOTUpdatedAt": "Opdateret kl." + "VOTUpdatedAt": "Opdateret kl.", + "VOTNeedWebAudioAPI": "For at aktivere dette skal du have en Internet Audio API", + "VOTBypassMediaCSP": "Omgå Media CSP", + "VOTMediaCSPEnabledOnSite": "Media CSP er aktiveret på dette site" } diff --git a/src/localization/locales/de.json b/src/localization/locales/de.json index e4db49bf..f285f4de 100644 --- a/src/localization/locales/de.json +++ b/src/localization/locales/de.json @@ -189,7 +189,6 @@ "proxySettings": "Proxyeinstellungen", "translationTakeApproximatelyMinute2": "Die Übersetzung dauert ungefähr {0} Minuten", "VOTAudioBooster": "Erhöhung des erweiterten Übersetzungsvolumens", - "VOTMediaCSPError": "Audio konnte nicht geladen werden (Medien-CSP-Fehler)", "VOTSubtitlesDesign": "Untertitel-Design", "VOTSubtitlesFontSize": "Schriftgröße der Untertitel", "VOTSubtitlesOpacity": "Transparenz des Untertitelhintergrunds", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Laden Sie Dateien mit dem Videonamen herunter", "VOTUpdateLocaleFiles": "Lokalisierungsdateien aktualisieren", "VOTLocaleHash": "Gebietsschema-Hash", - "VOTUpdatedAt": "Aktualisiert um" + "VOTUpdatedAt": "Aktualisiert um", + "VOTNeedWebAudioAPI": "Um dies zu aktivieren, benötigen Sie eine Web-Audio-API", + "VOTBypassMediaCSP": "Umgehen von Media CSP", + "VOTMediaCSPEnabledOnSite": "Medien-CSP ist auf dieser Site aktiviert" } diff --git a/src/localization/locales/el.json b/src/localization/locales/el.json index 406c9c63..a4b3bad1 100644 --- a/src/localization/locales/el.json +++ b/src/localization/locales/el.json @@ -189,7 +189,6 @@ "proxySettings": "Ρυθμίσεις Διακομιστή Μεσολάβησης", "translationTakeApproximatelyMinute2": "Η μετάφραση θα διαρκέσει περίπου {0} λεπτά", "VOTAudioBooster": "Εκτεταμένη αύξηση όγκου μετάφρασης", - "VOTMediaCSPError": "Αποτυχία φόρτωσης ήχου (σφάλμα CSP πολυμέσων)", "VOTSubtitlesDesign": "Σχεδιασμός υπότιτλων", "VOTSubtitlesFontSize": "Μέγεθος γραμματοσειράς υπότιτλων", "VOTSubtitlesOpacity": "Διαφάνεια του φόντου υποτίτλων", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Λήψη αρχείων με το όνομα του βίντεο", "VOTUpdateLocaleFiles": "Ενημέρωση αρχείων εντοπισμού", "VOTLocaleHash": "Τοπικό χασίς", - "VOTUpdatedAt": "Ενημερώθηκε στις" + "VOTUpdatedAt": "Ενημερώθηκε στις", + "VOTNeedWebAudioAPI": "Για να το ενεργοποιήσετε, πρέπει να έχετε ένα API Web Audio", + "VOTBypassMediaCSP": "Παράκαμψη Media CSP", + "VOTMediaCSPEnabledOnSite": "Το Media CSP είναι ενεργοποιημένο σε αυτόν τον ιστότοπο" } diff --git a/src/localization/locales/en.json b/src/localization/locales/en.json index 79869078..9acb31a2 100644 --- a/src/localization/locales/en.json +++ b/src/localization/locales/en.json @@ -189,7 +189,6 @@ "proxySettings": "Proxy Settings", "translationTakeApproximatelyMinute2": "The translation will take approximately {0} minutes", "VOTAudioBooster": "Extended translation volume increase", - "VOTMediaCSPError": "Failed to load audio (media csp error)", "VOTSubtitlesDesign": "Subtitles design", "VOTSubtitlesFontSize": "Font size of subtitles", "VOTSubtitlesOpacity": "Transparency of the subtitle background", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Download files with the video name", "VOTUpdateLocaleFiles": "Update localization files", "VOTLocaleHash": "Locale hash", - "VOTUpdatedAt": "Updated at" + "VOTUpdatedAt": "Updated at", + "VOTNeedWebAudioAPI": "To enable this, you must have a Web Audio API", + "VOTBypassMediaCSP": "Bypassing Media CSP", + "VOTMediaCSPEnabledOnSite": "Media CSP is enabled on this site" } diff --git a/src/localization/locales/es.json b/src/localization/locales/es.json index 620c216f..0350db6c 100644 --- a/src/localization/locales/es.json +++ b/src/localization/locales/es.json @@ -189,7 +189,6 @@ "proxySettings": "Configuración de Proxy", "translationTakeApproximatelyMinute2": "La traducción tardará aproximadamente {0} minutos", "VOTAudioBooster": "Aumento del volumen de traducción extendida", - "VOTMediaCSPError": "Error al cargar audio (error de csp de medios)", "VOTSubtitlesDesign": "Diseño de subtítulos", "VOTSubtitlesFontSize": "Tamaño de fuente de los subtítulos", "VOTSubtitlesOpacity": "Transparencia del fondo de los subtítulos", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Descargar archivos con el nombre del video", "VOTUpdateLocaleFiles": "Actualizar archivos de localización", "VOTLocaleHash": "Hash de configuración regional", - "VOTUpdatedAt": "Actualizado a las 16: 40" + "VOTUpdatedAt": "Actualizado a las", + "VOTNeedWebAudioAPI": "Para habilitar esto, debe tener una API de audio web", + "VOTBypassMediaCSP": "Omitiendo Media CSP", + "VOTMediaCSPEnabledOnSite": "Media CSP está habilitado en este sitio" } diff --git a/src/localization/locales/et.json b/src/localization/locales/et.json index fab2023e..d59e5efc 100644 --- a/src/localization/locales/et.json +++ b/src/localization/locales/et.json @@ -189,7 +189,6 @@ "proxySettings": "Puhverserveri Seaded", "translationTakeApproximatelyMinute2": "Tõlge võtab umbes {0} minutit", "VOTAudioBooster": "Laiendatud tõlke mahu suurenemine", - "VOTMediaCSPError": "Heli laadimine nurjus (media csp viga)", "VOTSubtitlesDesign": "Subtiitrite kujundus", "VOTSubtitlesFontSize": "Subtiitrite fondi suurus", "VOTSubtitlesOpacity": "Subtiitrite tausta läbipaistvus", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Laadige alla video nimega failid", "VOTUpdateLocaleFiles": "Uuenda lokaliseerimisfaile", "VOTLocaleHash": "Locale hash", - "VOTUpdatedAt": "Uuendatud kell" + "VOTUpdatedAt": "Uuendatud kell", + "VOTNeedWebAudioAPI": "Selle lubamiseks peab teil olema Veebiheli API", + "VOTBypassMediaCSP": "Media CSP-St Mööda Minnes", + "VOTMediaCSPEnabledOnSite": "Meedia CSP on lubatud sellel saidil" } diff --git a/src/localization/locales/eu.json b/src/localization/locales/eu.json index 84cc1e99..ae75318d 100644 --- a/src/localization/locales/eu.json +++ b/src/localization/locales/eu.json @@ -189,7 +189,6 @@ "proxySettings": "Ordezko Ezarpenak", "translationTakeApproximatelyMinute2": "Itzulpenak gutxi gorabehera {0} minutu hartuko ditu", "VOTAudioBooster": "Luzatu itzulpen bolumena handitzea", - "VOTMediaCSPError": "Huts egin du audioa kargatzean (euskarriaren ksp errorea)", "VOTSubtitlesDesign": "Azpitituluen diseinua", "VOTSubtitlesFontSize": "Azpitituluen letra-tamaina", "VOTSubtitlesOpacity": "Azpitituluen atzeko planoaren gardentasuna", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Deskargatu bideoaren izena duten fitxategiak", "VOTUpdateLocaleFiles": "Eguneratu lokalizazio-fitxategiak", "VOTLocaleHash": "Lokaleko hash-a", - "VOTUpdatedAt": "etan eguneratua" + "VOTUpdatedAt": "etan eguneratua", + "VOTNeedWebAudioAPI": "Hau gaitzeko, Audio API Bat Eduki Behar duzu", + "VOTBypassMediaCSP": "Media CSP Saihestea", + "VOTMediaCSPEnabledOnSite": "Multimedia KSP gune honetan gaituta dago" } diff --git a/src/localization/locales/fa.json b/src/localization/locales/fa.json index 731bd37f..62def284 100644 --- a/src/localization/locales/fa.json +++ b/src/localization/locales/fa.json @@ -189,7 +189,6 @@ "proxySettings": "تنظیمات پروکسی", "translationTakeApproximatelyMinute2": "ترجمه تقریبا {0} دقیقه طول خواهد کشید", "VOTAudioBooster": "افزایش حجم ترجمه گسترده", - "VOTMediaCSPError": "نتوانست صدا را بارگذاری کند (خطای csp رسانه ای)", "VOTSubtitlesDesign": "طراحی زیرنویس", "VOTSubtitlesFontSize": "اندازه فونت زیرنویس", "VOTSubtitlesOpacity": "شفافیت پس زمینه زیرنویس", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "دانلود فایل با نام تصویری", "VOTUpdateLocaleFiles": "به روز رسانی فایل های محلی سازی", "VOTLocaleHash": "هش محلی", - "VOTUpdatedAt": "به روز رسانی شده در 16: 40" + "VOTUpdatedAt": "به روز رسانی شده در", + "VOTNeedWebAudioAPI": "برای فعال کردن این ، شما باید یک API صوتی وب داشته باشید", + "VOTBypassMediaCSP": "دور زدن Media CSP", + "VOTMediaCSPEnabledOnSite": "Media CSP در این سایت فعال شده است" } diff --git a/src/localization/locales/fi.json b/src/localization/locales/fi.json index 348c7acd..7b09c134 100644 --- a/src/localization/locales/fi.json +++ b/src/localization/locales/fi.json @@ -189,7 +189,6 @@ "proxySettings": "Välityspalvelimen Asetukset", "translationTakeApproximatelyMinute2": "Käännös kestää noin {0} minuuttia", "VOTAudioBooster": "Laajennettu käännösmäärä kasvaa", - "VOTMediaCSPError": "Äänen lataaminen epäonnistui (median csp-virhe)", "VOTSubtitlesDesign": "Tekstitysten suunnittelu", "VOTSubtitlesFontSize": "Tekstityksen kirjasinkoko", "VOTSubtitlesOpacity": "Tekstityksen Taustan läpinäkyvyys", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Lataa tiedostoja videon nimellä", "VOTUpdateLocaleFiles": "Päivitä lokalisointitiedostot", "VOTLocaleHash": "Paikallinen hash", - "VOTUpdatedAt": "Päivitetty klo" + "VOTUpdatedAt": "Päivitetty klo", + "VOTNeedWebAudioAPI": "Jotta voit ottaa tämän käyttöön, sinulla on oltava Web Audio API", + "VOTBypassMediaCSP": "Media CSP: N Ohittaminen", + "VOTMediaCSPEnabledOnSite": "Media CSP on käytössä tällä sivustolla" } diff --git a/src/localization/locales/fr.json b/src/localization/locales/fr.json index 3516f340..e5ae1022 100644 --- a/src/localization/locales/fr.json +++ b/src/localization/locales/fr.json @@ -189,7 +189,6 @@ "proxySettings": "Paramètres du Proxy", "translationTakeApproximatelyMinute2": "La traduction prendra environ {0} minutes", "VOTAudioBooster": "Augmentation du volume de traduction étendu", - "VOTMediaCSPError": "Échec du chargement de l'audio (erreur csp multimédia)", "VOTSubtitlesDesign": "Conception des sous-titres", "VOTSubtitlesFontSize": "Taille de la police des sous-titres", "VOTSubtitlesOpacity": "Transparence de l'arrière-plan des sous-titres", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Télécharger des fichiers avec le nom de la vidéo", "VOTUpdateLocaleFiles": "Mettre à jour les fichiers de localisation", "VOTLocaleHash": "Hachage des paramètres régionaux", - "VOTUpdatedAt": "Mis à jour à 16h40" + "VOTUpdatedAt": "Mis à jour à 16h40", + "VOTNeedWebAudioAPI": "Pour activer cela, vous devez disposer d'une API audio Web", + "VOTBypassMediaCSP": "Contourner Media CSP", + "VOTMediaCSPEnabledOnSite": "Media CSP est activé sur ce site" } diff --git a/src/localization/locales/gl.json b/src/localization/locales/gl.json index 9b5a212c..d6ee5317 100644 --- a/src/localization/locales/gl.json +++ b/src/localization/locales/gl.json @@ -189,7 +189,6 @@ "proxySettings": "Configuración Do Proxy", "translationTakeApproximatelyMinute2": "A tradución levará aproximadamente {0} minutos", "VOTAudioBooster": "Aumento do volume de tradución estendido", - "VOTMediaCSPError": "Fallou a carga do audio (erro do csp dos medios)", "VOTSubtitlesDesign": "Deseño de subtítulos", "VOTSubtitlesFontSize": "Tamaño da letra dos subtítulos", "VOTSubtitlesOpacity": "Transparencia do fondo do subtítulo", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Descargar ficheiros co nome do vídeo", "VOTUpdateLocaleFiles": "Actualizar os ficheiros de localización", "VOTLocaleHash": "Hash local", - "VOTUpdatedAt": "Actualizado ás 16: 40" + "VOTUpdatedAt": "Actualizado ás", + "VOTNeedWebAudioAPI": "Para activar isto, debes ter UNHA API De Audio Web", + "VOTBypassMediaCSP": "Evitar Media CSP", + "VOTMediaCSPEnabledOnSite": "Os medios de COMUNICACIÓN csp están habilitados neste sitio" } diff --git a/src/localization/locales/hi.json b/src/localization/locales/hi.json index 6a9a4967..eaece7f5 100644 --- a/src/localization/locales/hi.json +++ b/src/localization/locales/hi.json @@ -189,7 +189,6 @@ "proxySettings": "प्रॉक्सी सेटिंग्स", "translationTakeApproximatelyMinute2": "अनुवाद में लगभग {0} मिनट लगेंगे", "VOTAudioBooster": "विस्तारित अनुवाद की मात्रा में वृद्धि", - "VOTMediaCSPError": "ऑडियो लोड करने में विफल (मीडिया सीएसपी त्रुटि)", "VOTSubtitlesDesign": "उपशीर्षक डिजाइन", "VOTSubtitlesFontSize": "उपशीर्षक का फ़ॉन्ट आकार", "VOTSubtitlesOpacity": "उपशीर्षक पृष्ठभूमि की पारदर्शिता", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "वीडियो नाम के साथ फ़ाइलें डाउनलोड करें", "VOTUpdateLocaleFiles": "स्थानीयकरण फ़ाइलें अपडेट करें", "VOTLocaleHash": "लोकेल हैश", - "VOTUpdatedAt": "पर अपडेट किया गया" + "VOTUpdatedAt": "पर अपडेट किया गया", + "VOTNeedWebAudioAPI": "इसे सक्षम करने के लिए, आपके पास एक वेब ऑडियो एपीआई होना चाहिए", + "VOTBypassMediaCSP": "मीडियासीएसपी को दरकिनार", + "VOTMediaCSPEnabledOnSite": "मीडिया सीएसपी इस साइट पर सक्षम है" } diff --git a/src/localization/locales/hr.json b/src/localization/locales/hr.json index e58df956..e3f336fc 100644 --- a/src/localization/locales/hr.json +++ b/src/localization/locales/hr.json @@ -189,7 +189,6 @@ "proxySettings": "Postavke opunomoćenika", "translationTakeApproximatelyMinute2": "Prijevod će trajati približno {0} minuta", "VOTAudioBooster": "Povećanje opsega proširenog prijevoda", - "VOTMediaCSPError": "Preuzimanje zvuka nije uspjelo (pogreška u NDR-u)", "VOTSubtitlesDesign": "Dizajn titlova", "VOTSubtitlesFontSize": "Veličina fonta titla", "VOTSubtitlesOpacity": "Transparentnost pozadine titlova", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Prenesite datoteke s nazivom videozapisa", "VOTUpdateLocaleFiles": "Ažurirajte datoteke lokalizacije", "VOTLocaleHash": "Lokalni hash", - "VOTUpdatedAt": "Ažurirano u" + "VOTUpdatedAt": "Ažurirano u", + "VOTNeedWebAudioAPI": "Da biste to omogućili, morate imati", + "VOTBypassMediaCSP": "Zaobilaženje", + "VOTMediaCSPEnabledOnSite": "Na ovoj je stranici omogućen" } diff --git a/src/localization/locales/hu.json b/src/localization/locales/hu.json index d678aebc..e4d9cb5a 100644 --- a/src/localization/locales/hu.json +++ b/src/localization/locales/hu.json @@ -189,7 +189,6 @@ "proxySettings": "Proxy Beállítások", "translationTakeApproximatelyMinute2": "A fordítás körülbelül {0} percet vesz igénybe", "VOTAudioBooster": "Bővített fordítási volumen növekedés", - "VOTMediaCSPError": "Nem sikerült betölteni a hangot (media csp hiba)", "VOTSubtitlesDesign": "Feliratok tervezése", "VOTSubtitlesFontSize": "A feliratok betűmérete", "VOTSubtitlesOpacity": "A felirat hátterének átláthatósága", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Töltsön le fájlokat a videó nevével", "VOTUpdateLocaleFiles": "Lokalizációs fájlok frissítése", "VOTLocaleHash": "Locale hash", - "VOTUpdatedAt": "Frissítve" + "VOTUpdatedAt": "Frissítve", + "VOTNeedWebAudioAPI": "Ennek engedélyezéséhez rendelkeznie kell egy Web Audio API-val", + "VOTBypassMediaCSP": "A Mediacp Megkerülése", + "VOTMediaCSPEnabledOnSite": "A Media CSP engedélyezve van ezen a webhelyen" } diff --git a/src/localization/locales/hy.json b/src/localization/locales/hy.json index 47f0b4be..eeaa55ed 100644 --- a/src/localization/locales/hy.json +++ b/src/localization/locales/hy.json @@ -189,7 +189,6 @@ "proxySettings": "Վստահված սերվերի կարգավորումներ", "translationTakeApproximatelyMinute2": "Թարգմանությունը կտեւի մոտավորապես {0} րոպե", "VOTAudioBooster": "Ընդլայնված թարգմանության ծավալի ավելացում", - "VOTMediaCSPError": "Չհաջողվեց բեռնել աուդիո (media csp սխալ)", "VOTSubtitlesDesign": "Ենթագրերի ձևավորում", "VOTSubtitlesFontSize": "Ենթագրերի տառատեսակի չափը", "VOTSubtitlesOpacity": "Ենթագրերի ֆոնի թափանցիկություն", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Վերբեռնեք ֆայլեր տեսանյութի անունով", "VOTUpdateLocaleFiles": "Թարմացրեք տեղայնացման ֆայլերը", "VOTLocaleHash": "Հաշ locales", - "VOTUpdatedAt": "Թարմացվել է" + "VOTUpdatedAt": "Թարմացվել է", + "VOTNeedWebAudioAPI": "Սա միացնելու համար դուք պետք է ունենաք վեբ աուդիո API", + "VOTBypassMediaCSP": "Շրջանցելով Media CSP-Ը", + "VOTMediaCSPEnabledOnSite": "Media CSP-ն միացված է այս կայքում" } diff --git a/src/localization/locales/id.json b/src/localization/locales/id.json index 017bdca1..ab6439ac 100644 --- a/src/localization/locales/id.json +++ b/src/localization/locales/id.json @@ -189,7 +189,6 @@ "proxySettings": "Pengaturan Proksi", "translationTakeApproximatelyMinute2": "Terjemahan akan memakan waktu sekitar {0} menit", "VOTAudioBooster": "Peningkatan volume terjemahan yang diperpanjang", - "VOTMediaCSPError": "Gagal memuat audio (kesalahan csp media)", "VOTSubtitlesDesign": "Desain subtitle", "VOTSubtitlesFontSize": "Ukuran font subtitle", "VOTSubtitlesOpacity": "Transparansi latar belakang subtitle", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Unduh file dengan nama video", "VOTUpdateLocaleFiles": "Perbarui file pelokalan", "VOTLocaleHash": "Hash lokal", - "VOTUpdatedAt": "Diperbarui pukul" + "VOTUpdatedAt": "Diperbarui pukul", + "VOTNeedWebAudioAPI": "Untuk mengaktifkan ini, Anda harus memiliki Web Audio API", + "VOTBypassMediaCSP": "Melewati Media CSP", + "VOTMediaCSPEnabledOnSite": "Media CSP diaktifkan di situs ini" } diff --git a/src/localization/locales/it.json b/src/localization/locales/it.json index 58b9c8fb..471f2efe 100644 --- a/src/localization/locales/it.json +++ b/src/localization/locales/it.json @@ -189,7 +189,6 @@ "proxySettings": "Impostazioni proxy", "translationTakeApproximatelyMinute2": "La traduzione richiederà circa {0} minuti", "VOTAudioBooster": "Aumento del volume di traduzione esteso", - "VOTMediaCSPError": "Caricamento audio non riuscito (errore media csp)", "VOTSubtitlesDesign": "Sottotitoli design", "VOTSubtitlesFontSize": "Dimensione del carattere dei sottotitoli", "VOTSubtitlesOpacity": "Trasparenza dello sfondo dei sottotitoli", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Scarica i file con il nome del video", "VOTUpdateLocaleFiles": "Aggiornare i file di localizzazione", "VOTLocaleHash": "Locale hash", - "VOTUpdatedAt": "Aggiornato alle 16: 40" + "VOTUpdatedAt": "Aggiornato alle", + "VOTNeedWebAudioAPI": "Per abilitare questo, è necessario disporre di un'API audio Web", + "VOTBypassMediaCSP": "Bypassando Media CSP", + "VOTMediaCSPEnabledOnSite": "Media CSP è abilitato su questo sito" } diff --git a/src/localization/locales/ja.json b/src/localization/locales/ja.json index 4f262151..62b94e3c 100644 --- a/src/localization/locales/ja.json +++ b/src/localization/locales/ja.json @@ -189,7 +189,6 @@ "proxySettings": "プロキシ設定", "translationTakeApproximatelyMinute2": "翻訳には約{0}分かかります", "VOTAudioBooster": "翻訳量の増加を拡大しました", - "VOTMediaCSPError": "オーディオのロードに失敗しました(メディアcspエラー)", "VOTSubtitlesDesign": "字幕デザイン", "VOTSubtitlesFontSize": "字幕のフォントサイズ", "VOTSubtitlesOpacity": "字幕の背景の透明度", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "ビデオ名のファイルをダウンロードする", "VOTUpdateLocaleFiles": "ローカリゼーションファイルの更新", "VOTLocaleHash": "ロケールハッシュ", - "VOTUpdatedAt": "更新" + "VOTUpdatedAt": "更新", + "VOTNeedWebAudioAPI": "これを有効にするには、Web Audio APIが必要です", + "VOTBypassMediaCSP": "Media CSPのバイパス", + "VOTMediaCSPEnabledOnSite": "メディアCSPはこのサイトで有効になっています" } diff --git a/src/localization/locales/jv.json b/src/localization/locales/jv.json index 984ccbc0..e189ebef 100644 --- a/src/localization/locales/jv.json +++ b/src/localization/locales/jv.json @@ -189,7 +189,6 @@ "proxySettings": "Setelan Proxy", "translationTakeApproximatelyMinute2": "Terjemahan bakal njupuk kira-kira {0} menit", "VOTAudioBooster": "Tambah volume terjemahan sing ditambahi", - "VOTMediaCSPError": "Gagal kanggo mbukak audio (kesalahan csp media)", "VOTSubtitlesDesign": "Subtitle desain", "VOTSubtitlesFontSize": "Ukuran Font saka subtitles", "VOTSubtitlesOpacity": "Transparansi latar mburi subtitle", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Ngundhuh file kanthi jeneng video", "VOTUpdateLocaleFiles": "Nganyari file lokalisasi", "VOTLocaleHash": "Hash lokal", - "VOTUpdatedAt": "Dianyari jam 16: 40" + "VOTUpdatedAt": "Dianyari jam", + "VOTNeedWebAudioAPI": "Kanggo ngaktifake IKI, SAMPEYAN kudu DUWE API Audio Web", + "VOTBypassMediaCSP": "Ngliwati Media CSP", + "VOTMediaCSPEnabledOnSite": "Media CSP diaktifake ing situs iki" } diff --git a/src/localization/locales/kk.json b/src/localization/locales/kk.json index 042b8f96..bec67be5 100644 --- a/src/localization/locales/kk.json +++ b/src/localization/locales/kk.json @@ -189,7 +189,6 @@ "proxySettings": "Прокси параметрлері", "translationTakeApproximatelyMinute2": "Аударма шамамен {0} минутты алады", "VOTAudioBooster": "Аударма көлемінің ұлғаюы", - "VOTMediaCSPError": "Аудио жүктелмеді (медиа csp қатесі)", "VOTSubtitlesDesign": "Субтитрлер дизайны", "VOTSubtitlesFontSize": "Субтитрлердің қаріп өлшемі", "VOTSubtitlesOpacity": "Субтитр фонының мөлдірлігі", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Бейне атауы бар файлдарды жүктеңіз", "VOTUpdateLocaleFiles": "Локализация файлдарын жаңарту", "VOTLocaleHash": "Жергілікті хэш", - "VOTUpdatedAt": "жаңартылды" + "VOTUpdatedAt": "жаңартылды", + "VOTNeedWebAudioAPI": "Мұны қосу Үшін Сізде Web Audio API БОЛУЫ КЕРЕК", + "VOTBypassMediaCSP": "Media CSP Айналып Өту", + "VOTMediaCSPEnabledOnSite": "Бұл сайтта медиа CSP қосылған" } diff --git a/src/localization/locales/km.json b/src/localization/locales/km.json index 2319ce08..43bddccb 100644 --- a/src/localization/locales/km.json +++ b/src/localization/locales/km.json @@ -189,7 +189,6 @@ "proxySettings": "ការកំណត់ប្រូកស៊ី", "translationTakeApproximatelyMinute2": "ការបកប្រែនេះនឹងចំណាយពេលប្រមាណ{0}នាទី", "VOTAudioBooster": "បង្កើនកម្រិតសំឡេងបកប្រែដែលបានពង្រីក", - "VOTMediaCSPError": "បានបរាជ័យក្នុងការផ្ទុកអូឌីយ៉ូ(កំហុសប្រព័ន្ធផ្សព្វផ្សាយ csp)", "VOTSubtitlesDesign": "រចនាអក្សររត់ពីក្រោម", "VOTSubtitlesFontSize": "ទំហំពុម្ពអក្សរនៃចំណងជើងរង", "VOTSubtitlesOpacity": "តម្លាភាពនៃផ្ទៃខាងក្រោយចំណងជើងរង", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "ទាញយកឯកសារដែលមានឈ្មោះវីដេអូ", "VOTUpdateLocaleFiles": "ធ្វើឲ្យឯកសារមូលដ្ឋានីយកម្មទាន់សម័យ", "VOTLocaleHash": "សញ្ញាមូលដ្ឋាន", - "VOTUpdatedAt": "ធ្វើឱ្យទាន់សម័យនៅ" + "VOTUpdatedAt": "ធ្វើឱ្យទាន់សម័យនៅ", + "VOTNeedWebAudioAPI": "ដើម្បីអនុញ្ញាតនេះ,អ្នកត្រូវតែមានបណ្តាញ Api របស់អូឌីយ៉ូ", + "VOTBypassMediaCSP": "ឆ្លងកាត់ Media CSP", + "VOTMediaCSPEnabledOnSite": "ប្រព័ន្ធផ្សព្វផ្សាយ CSP ត្រូវបានបើកនៅលើតំបន់បណ្ដាញនេះ" } diff --git a/src/localization/locales/kn.json b/src/localization/locales/kn.json index b9dd3f6b..e80cd8b9 100644 --- a/src/localization/locales/kn.json +++ b/src/localization/locales/kn.json @@ -189,7 +189,6 @@ "proxySettings": "ಪ್ರಾಕ್ಸಿ ಸೆಟ್ಟಿಂಗ್ಗಳು", "translationTakeApproximatelyMinute2": "ಅನುವಾದವು ಸರಿಸುಮಾರು {0} ನಿಮಿಷಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ", "VOTAudioBooster": "ವಿಸ್ತೃತ ಅನುವಾದ ಪರಿಮಾಣ ಹೆಚ್ಚಳ", - "VOTMediaCSPError": "ಆಡಿಯೋ ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ (ಮೀಡಿಯಾ csp ದೋಷ)", "VOTSubtitlesDesign": "ಉಪಶೀರ್ಷಿಕೆಗಳು ವಿನ್ಯಾಸ", "VOTSubtitlesFontSize": "ಉಪಶೀರ್ಷಿಕೆಗಳ ಫಾಂಟ್ ಗಾತ್ರ", "VOTSubtitlesOpacity": "ಉಪಶೀರ್ಷಿಕೆ ಹಿನ್ನೆಲೆ ಪಾರದರ್ಶಕತೆ", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "ವೀಡಿಯೊ ಹೆಸರಿನೊಂದಿಗೆ ಫೈಲ್ಗಳನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ", "VOTUpdateLocaleFiles": "ಅಪ್ಡೇಟ್ ಸ್ಥಳೀಕರಣ ಕಡತಗಳನ್ನು", "VOTLocaleHash": "ಲೊಕೇಲ್ ಹ್ಯಾಶ್", - "VOTUpdatedAt": "ಕ್ಕೆ ನವೀಕರಿಸಲಾಗಿದೆ" + "VOTUpdatedAt": "ಕ್ಕೆ ನವೀಕರಿಸಲಾಗಿದೆ", + "VOTNeedWebAudioAPI": "ಇದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು, ನೀವು ವೆಬ್ ಆಡಿಯೊ API ಅನ್ನು ಹೊಂದಿರಬೇಕು", + "VOTBypassMediaCSP": "Media CSP ಅನ್ನು ಬೈಪಾಸ್ ಮಾಡುವುದು", + "VOTMediaCSPEnabledOnSite": "ಈ ಸೈಟ್ನಲ್ಲಿ ಮೀಡಿಯಾ CSP ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ" } diff --git a/src/localization/locales/ko.json b/src/localization/locales/ko.json index 21997430..cbdd22c5 100644 --- a/src/localization/locales/ko.json +++ b/src/localization/locales/ko.json @@ -189,7 +189,6 @@ "proxySettings": "프록시 설정", "translationTakeApproximatelyMinute2": "번역은 약{0}분이 소요됩니다", "VOTAudioBooster": "확장 번역 볼륨 증가", - "VOTMediaCSPError": "오디오 로드 실패", "VOTSubtitlesDesign": "자막 디자인", "VOTSubtitlesFontSize": "자막의 글꼴 크기", "VOTSubtitlesOpacity": "자막 배경의 투명도", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "비디오 이름을 가진 파일 다운로드", "VOTUpdateLocaleFiles": "현지화 파일 업데이트", "VOTLocaleHash": "로캘 해시", - "VOTUpdatedAt": "에 업데이트 됨" + "VOTUpdatedAt": "에 업데이트 됨", + "VOTNeedWebAudioAPI": "이 기능을 사용하려면 웹 오디오가 있어야 합니다.", + "VOTBypassMediaCSP": "미디어스피 우회", + "VOTMediaCSPEnabledOnSite": "이 사이트에서 사용할 수 있습니다" } diff --git a/src/localization/locales/lo.json b/src/localization/locales/lo.json index 076c0b9b..2e29e066 100644 --- a/src/localization/locales/lo.json +++ b/src/localization/locales/lo.json @@ -189,7 +189,6 @@ "proxySettings": "ການຕັ້ງຄ່າຕົວແທນ", "translationTakeApproximatelyMinute2": "ການແປພາສາຈະໃຊ້ເວລາປະມານ{0}ນາທີ", "VOTAudioBooster": "ການແປພາສາຂະຫຍາຍປະລິມານເພີ່ມຂຶ້ນ", - "VOTMediaCSPError": "ລົ້ມເຫລວໃນການໂຫຼດສຽງ(media csp error)", "VOTSubtitlesDesign": "ການອອກແບບຄໍາບັນຍາຍ", "VOTSubtitlesFontSize": "ຂະໜາດຕົວອັກສອນຂອງຄຳບັນຍາຍ", "VOTSubtitlesOpacity": "ຄວາມໂປ່ງໃສຂອງຄວາມເປັນມາ subtitle ໄດ້", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "ດາວນ໌ໂຫລດໄຟລ໌ທີ່ມີຊື່ວິດີໂອໄດ້", "VOTUpdateLocaleFiles": "ອັບເດດໄຟລ໌ທ້ອງຖິ່ນ", "VOTLocaleHash": "Hash ທ້ອງຖິ່ນ", - "VOTUpdatedAt": "ອັບເດດເວລາ" + "VOTUpdatedAt": "ອັບເດດເວລາ", + "VOTNeedWebAudioAPI": "ເພື່ອເປີດໃຊ້ສິ່ງນີ້,ທ່ານຕ້ອງມີ Web Audio API", + "VOTBypassMediaCSP": "ຂ້າມຜ່ານ Media CSP", + "VOTMediaCSPEnabledOnSite": "Media CSP ຖືກເປີດໃຊ້ໃນເວັບໄຊທ໌ນີ້" } diff --git a/src/localization/locales/mk.json b/src/localization/locales/mk.json index 6ed3de8f..03d7233a 100644 --- a/src/localization/locales/mk.json +++ b/src/localization/locales/mk.json @@ -189,7 +189,6 @@ "proxySettings": "Поставки За Прокси", "translationTakeApproximatelyMinute2": "Преводот ќе трае приближно {0} минути", "VOTAudioBooster": "Зголемен обем на превод", - "VOTMediaCSPError": "Не успеа да вчита аудио (грешка во медиумскиот цсп)", "VOTSubtitlesDesign": "Преводи дизајн", "VOTSubtitlesFontSize": "Големина на фонт на преводи", "VOTSubtitlesOpacity": "Транспарентност на позадината на титлот", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Преземете датотеки со името на видеото", "VOTUpdateLocaleFiles": "Ажурирајте ги датотеките за локализација", "VOTLocaleHash": "Локал хаш", - "VOTUpdatedAt": "Ажурирано во" + "VOTUpdatedAt": "Ажурирано во", + "VOTNeedWebAudioAPI": "За да го овозможите ОВА, мора да имате ВЕБ АУДИО АПИ", + "VOTBypassMediaCSP": "Заобиколувајќи Медиацсп", + "VOTMediaCSPEnabledOnSite": "Медиумите CSP се овозможени на оваа страница" } diff --git a/src/localization/locales/ml.json b/src/localization/locales/ml.json index 55e1e9c2..7a52846d 100644 --- a/src/localization/locales/ml.json +++ b/src/localization/locales/ml.json @@ -189,7 +189,6 @@ "proxySettings": "പ്രോക്സി ക്രമീകരണങ്ങൾ", "translationTakeApproximatelyMinute2": "പരിഭാഷ ഏകദേശം {0} മിനിറ്റ് എടുക്കും", "VOTAudioBooster": "വിപുലീകരിച്ച പരിഭാഷ വോള്യം വർദ്ധിപ്പിക്കാൻ", - "VOTMediaCSPError": "ഓഡിയോ ലോഡ് ചെയ്യുന്നതില് പരാജയം (മീഡിയ സിഎസ്പി പിശക്)", "VOTSubtitlesDesign": "സബ്ടൈറ്റിലുകൾ ഡിസൈൻ", "VOTSubtitlesFontSize": "സബ്ടൈറ്റിലുകളുടെ അക്ഷരസഞ്ചയം", "VOTSubtitlesOpacity": "സബ്ടൈറ്റിൽ പശ്ചാത്തലത്തിന്റെ സുതാര്യത", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "വീഡിയോ പേര് ഉപയോഗിച്ച് ഫയലുകൾ ഡൗൺലോഡ്", "VOTUpdateLocaleFiles": "അപ്ഡേറ്റ് localization ഫയലുകൾ", "VOTLocaleHash": "പ്രാദേശിക ഹാഷ്", - "VOTUpdatedAt": "അപ്ഡേറ്റ്" + "VOTUpdatedAt": "അപ്ഡേറ്റ്", + "VOTNeedWebAudioAPI": "ഇത് ചെയ്യുന്നതിന്, നിങ്ങൾക്ക് ഒരു വെബ് ഓഡിയോ എപിഐ ഉണ്ടായിരിക്കണം.", + "VOTBypassMediaCSP": "മീഡിയ എസ്പിയെ മറികടന്ന്", + "VOTMediaCSPEnabledOnSite": "മീഡിയ സിഎസ്പി ഈ സൈറ്റിൽ പ്രാപ്തമാക്കിയിരിക്കുന്നു" } diff --git a/src/localization/locales/mn.json b/src/localization/locales/mn.json index 944d68e6..bebc7bec 100644 --- a/src/localization/locales/mn.json +++ b/src/localization/locales/mn.json @@ -189,7 +189,6 @@ "proxySettings": "Прокси Тохиргоо", "translationTakeApproximatelyMinute2": "Орчуулга нь ойролцоогоор {0} минут болно", "VOTAudioBooster": "Өргөтгөсөн орчуулгын хэмжээ нэмэгдэх", - "VOTMediaCSPError": "Аудио ачаалж чадаагүй (медиа csp алдаа)", "VOTSubtitlesDesign": "Хадмалтай дизайн", "VOTSubtitlesFontSize": "Хадмалтай үсгийн хэмжээ", "VOTSubtitlesOpacity": "Subtitle background-ийн ил тод байдал", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Видео нэртэй файлуудыг татаж авах", "VOTUpdateLocaleFiles": "Локалчлалын файлуудыг шинэчлэх", "VOTLocaleHash": "Локал хэш", - "VOTUpdatedAt": "цагт шинэчлэгдсэн" + "VOTUpdatedAt": "цагт шинэчлэгдсэн", + "VOTNeedWebAudioAPI": "Үүнийг идэвхжүүлэхийн тулд та вэб аудио API-тэй байх естой", + "VOTBypassMediaCSP": "Media CSP-Ийг Тойрч Гарах", + "VOTMediaCSPEnabledOnSite": "Хэвлэл мэдээллийн CSP энэ сайт дээр идэвхжүүлсэн байна" } diff --git a/src/localization/locales/ms.json b/src/localization/locales/ms.json index d42f427d..599377fd 100644 --- a/src/localization/locales/ms.json +++ b/src/localization/locales/ms.json @@ -189,7 +189,6 @@ "proxySettings": "Tetapan Proksi", "translationTakeApproximatelyMinute2": "Terjemahan akan mengambil masa lebih kurang {0} minit", "VOTAudioBooster": "Peningkatan jumlah terjemahan lanjutan", - "VOTMediaCSPError": "Gagal memuatkan audio (ralat media CSP)", "VOTSubtitlesDesign": "Reka bentuk sarikata", "VOTSubtitlesFontSize": "Saiz fon sari kata", "VOTSubtitlesOpacity": "Ketelusan latar belakang sari kata", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Muat turun fail dengan nama video", "VOTUpdateLocaleFiles": "Kemas kini fail penyetempatan", "VOTLocaleHash": "Hash tempatan", - "VOTUpdatedAt": "Dikemaskini pada 16: 40" + "VOTUpdatedAt": "Dikemaskini pada", + "VOTNeedWebAudioAPI": "Untuk membolehkan ini, anda mesti mempunyai API Audio web", + "VOTBypassMediaCSP": "Memintas Media CSP", + "VOTMediaCSPEnabledOnSite": "Media CSP diaktifkan di laman web ini" } diff --git a/src/localization/locales/mt.json b/src/localization/locales/mt.json index 589670ea..437f8d11 100644 --- a/src/localization/locales/mt.json +++ b/src/localization/locales/mt.json @@ -189,7 +189,6 @@ "proxySettings": "Settings Tal-Prokura", "translationTakeApproximatelyMinute2": "It-traduzzjoni tieħu madwar {0} minuti", "VOTAudioBooster": "Żieda estiża fil-volum tat-traduzzjoni", - "VOTMediaCSPError": "Naqas milli jgħabbi l-awdjo (żball tal-psp tal-midja)", "VOTSubtitlesDesign": "Disinn tas-sottotitoli", "VOTSubtitlesFontSize": "Daqs tat-tipa tas-sottotitoli", "VOTSubtitlesOpacity": "Trasparenza tal-isfond tas-sottotitolu", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Niżżel fajls bl-isem tal-vidjo", "VOTUpdateLocaleFiles": "Aġġorna l-fajls tal-lokalizzazzjoni", "VOTLocaleHash": "Hash lokali", - "VOTUpdatedAt": "Aġġornat fis-16: 40" + "VOTUpdatedAt": "Aġġornat fis-", + "VOTNeedWebAudioAPI": "Biex tippermetti dan, irid ikollok Api Awdjo Tal - Web", + "VOTBypassMediaCSP": "Jinjora Media CSP", + "VOTMediaCSPEnabledOnSite": "Il-PSK tal-midja huwa attivat fuq dan is-sit" } diff --git a/src/localization/locales/my.json b/src/localization/locales/my.json index da10374f..73dd0c32 100644 --- a/src/localization/locales/my.json +++ b/src/localization/locales/my.json @@ -189,7 +189,6 @@ "proxySettings": "Proxy Setting များ", "translationTakeApproximatelyMinute2": "ဘာသာပြန်ဆိုမှုသည်{0}မိနစ်ခန့်ကြာလိမ့်မည်။", "VOTAudioBooster": "ဘာသာပြန်မှုပမာဏတိုးမြှင့်", - "VOTMediaCSPError": "အသံတင်ရန်ပျက်ကွက်ခြင်း(မီဒီယာ csp အမှား)", "VOTSubtitlesDesign": "စာတန်းထိုးဒီဇိုင်း", "VOTSubtitlesFontSize": "စာတန်းထိုးများ၏စာလုံးအရွယ်အစား", "VOTSubtitlesOpacity": "စာတန်းထိုးနောက်ခံ၏ပွင့်လင်းမြင်သာမှု", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "ဗီဒီယိုအမည်ပါဖိုင်များကိုဒေါင်းလုပ်ဆွဲပါ", "VOTUpdateLocaleFiles": "ဒေသတွင်းဖိုင်များကို Update လုပ်ပါ", "VOTLocaleHash": "ဒေသတွင်းဟက်ရှ်", - "VOTUpdatedAt": "၁၆:၄၀ တွင်အတည်ပြု" + "VOTUpdatedAt": "၁၆:၄၀ တွင်အတည်ပြု", + "VOTNeedWebAudioAPI": "ဒါကိုဖွင့်ဖို့ Web Audio API တစ်ခုရှိရပါမယ်။", + "VOTBypassMediaCSP": "Media CSP ကိုရှောင်လွှဲခြင်း", + "VOTMediaCSPEnabledOnSite": "ဤဆိုက်တွင်မီဒီယာ CSP ကိုခွင့်ပြုထားသည်။" } diff --git a/src/localization/locales/ne.json b/src/localization/locales/ne.json index 14361035..b556dbc0 100644 --- a/src/localization/locales/ne.json +++ b/src/localization/locales/ne.json @@ -189,7 +189,6 @@ "proxySettings": "प्रोक्सी सेटिङ", "translationTakeApproximatelyMinute2": "अनुवाद लगभग {0} मिनेट लाग्नेछ", "VOTAudioBooster": "विस्तारित अनुवाद मात्रा वृद्धि", - "VOTMediaCSPError": "अडियो लोड गर्न असफल भयो (मिडिया सीएसपी त्रुटि)", "VOTSubtitlesDesign": "उपशीर्षक डिजाइन", "VOTSubtitlesFontSize": "उपशीर्षकहरूको फन्ट साइज", "VOTSubtitlesOpacity": "उपशीर्षक पृष्ठभूमिको पारदर्शिता", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "भिडियो नाम सहित फाइलहरू डाउनलोड गर्नुहोस्", "VOTUpdateLocaleFiles": "स्थानीयकरण फाइलहरू अद्यावधिक गर्नुहोस्", "VOTLocaleHash": "स्थानीय ह्यास", - "VOTUpdatedAt": "मा अपडेट गरिएको" + "VOTUpdatedAt": "मा अपडेट गरिएको", + "VOTNeedWebAudioAPI": "यो सक्षम गर्न, तपाईं एक वेब अडियो एपीआई हुनुपर्छ", + "VOTBypassMediaCSP": "मिडियासीएसपीलाई बाइपास गर्दै", + "VOTMediaCSPEnabledOnSite": "यस साइटमा मिडिया सीएसपी सक्षम छ" } diff --git a/src/localization/locales/nl.json b/src/localization/locales/nl.json index ebb299c1..a38b9c47 100644 --- a/src/localization/locales/nl.json +++ b/src/localization/locales/nl.json @@ -189,7 +189,6 @@ "proxySettings": "Proxy-Instellingen", "translationTakeApproximatelyMinute2": "De vertaling duurt ongeveer {0} minuten", "VOTAudioBooster": "Uitbreiding van het vertaalvolume", - "VOTMediaCSPError": "Laden van audio is mislukt (media csp-fout)", "VOTSubtitlesDesign": "Ondertitels ontwerp", "VOTSubtitlesFontSize": "Lettergrootte van ondertitels", "VOTSubtitlesOpacity": "Transparantie van de ondertitelingsachtergrond", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Download bestanden met de naam van de video", "VOTUpdateLocaleFiles": "Lokalisatiebestanden bijwerken", "VOTLocaleHash": "Lokale hash", - "VOTUpdatedAt": "Bijgewerkt op" + "VOTUpdatedAt": "Bijgewerkt op", + "VOTNeedWebAudioAPI": "Om dit in te schakelen, moet u een Web Audio API hebben", + "VOTBypassMediaCSP": "Omzeilen Van Media CSP", + "VOTMediaCSPEnabledOnSite": "Media CSP is ingeschakeld op deze site" } diff --git a/src/localization/locales/pa.json b/src/localization/locales/pa.json index 37fb4a48..cc79c589 100644 --- a/src/localization/locales/pa.json +++ b/src/localization/locales/pa.json @@ -189,7 +189,6 @@ "proxySettings": "ਪਰਾਕਸੀ ਸੈਟਿੰਗ", "translationTakeApproximatelyMinute2": "ਅਨੁਵਾਦ ਲਗਭਗ {0} ਮਿੰਟ ਲਵੇਗਾ", "VOTAudioBooster": "ਵਿਸਤ੍ਰਿਤ ਅਨੁਵਾਦ ਵਾਲੀਅਮ ਵਾਧਾ", - "VOTMediaCSPError": "ਆਡੀਓ ਲੋਡ ਕਰਨ ਲਈ ਫੇਲ੍ਹ (ਮੀਡਿਆ ਸੀਐਸਪੀ ਗਲਤੀ)", "VOTSubtitlesDesign": "ਉਪਸਿਰਲੇਖ ਡਿਜ਼ਾਈਨ", "VOTSubtitlesFontSize": "ਉਪਸਿਰਲੇਖਾਂ ਦਾ ਫੋਂਟ ਸਾਈਜ਼", "VOTSubtitlesOpacity": "ਉਪਸਿਰਲੇਖ ਪਿਛੋਕੜ ਦੀ ਪਾਰਦਰਸ਼ਤਾ", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "ਵੀਡੀਓ ਨਾਂ ਨਾਲ ਫਾਇਲਾਂ ਡਾਊਨਲੋਡ ਕਰੋ", "VOTUpdateLocaleFiles": "ਸਥਾਨੀਕਰਨ ਫਾਇਲਾਂ ਅੱਪਡੇਟ", "VOTLocaleHash": "ਲੋਕੇਲ ਹੈਸ਼", - "VOTUpdatedAt": "ਵਜੇ ਅਪਡੇਟ ਕੀਤਾ ਗਿਆ" + "VOTUpdatedAt": "ਵਜੇ ਅਪਡੇਟ ਕੀਤਾ ਗਿਆ", + "VOTNeedWebAudioAPI": "ਇਸ ਨੂੰ ਯੋਗ ਕਰਨ ਲਈ, ਤੁਹਾਡੇ ਕੋਲ ਇੱਕ ਵੈਬ ਆਡੀਓ ਏਪੀਆਈ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ", + "VOTBypassMediaCSP": "ਮੀਡੀਆਸੀਐਸਪੀ ਨੂੰ ਬਾਈਪਾਸ ਕਰਨਾ", + "VOTMediaCSPEnabledOnSite": "ਮੀਡੀਆ ਸੀਐਸਪੀ ਇਸ ਸਾਈਟ ਤੇ ਸਮਰੱਥ ਹੈ" } diff --git a/src/localization/locales/pl.json b/src/localization/locales/pl.json index eafe8ad8..6cba4fd5 100644 --- a/src/localization/locales/pl.json +++ b/src/localization/locales/pl.json @@ -189,7 +189,6 @@ "proxySettings": "Ustawienia Proxy", "translationTakeApproximatelyMinute2": "Tłumaczenie zajmie około {0} minut", "VOTAudioBooster": "Rozszerzony wzrost objętości tłumaczenia", - "VOTMediaCSPError": "Nie udało się załadować dźwięku (błąd media csp)", "VOTSubtitlesDesign": "Projektowanie napisów", "VOTSubtitlesFontSize": "Rozmiar czcionki napisów", "VOTSubtitlesOpacity": "Przezroczystość tła napisów", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Pobierz pliki z nazwą wideo", "VOTUpdateLocaleFiles": "Aktualizuj pliki lokalizacyjne", "VOTLocaleHash": "Locale hash", - "VOTUpdatedAt": "Aktualizacja:" + "VOTUpdatedAt": "Aktualizacja:", + "VOTNeedWebAudioAPI": "Aby to włączyć, musisz mieć Web Audio API", + "VOTBypassMediaCSP": "Omijanie Media CSP", + "VOTMediaCSPEnabledOnSite": "Media CSP jest włączony na tej stronie" } diff --git a/src/localization/locales/pt.json b/src/localization/locales/pt.json index 31260eb0..62e4c403 100644 --- a/src/localization/locales/pt.json +++ b/src/localization/locales/pt.json @@ -188,7 +188,6 @@ "proxySettings": "Definições De Proxy", "translationTakeApproximatelyMinute2": "A tradução demora cerca de {0} minutos", "VOTAudioBooster": "Aumento do volume de tradução alargado", - "VOTMediaCSPError": "Falha ao carregar áudio (erro de csp de mídia)", "VOTSubtitlesDesign": "Design de Legendas", "VOTSubtitlesFontSize": "Tamanho da fonte das legendas", "VOTSubtitlesOpacity": "Transparência do fundo do subtítulo", @@ -199,5 +198,8 @@ "VOTDownloadWithName": "Baixar arquivos com o nome do vídeo", "VOTUpdateLocaleFiles": "Actualizar ficheiros de localização", "VOTLocaleHash": "Hash de localidade", - "VOTUpdatedAt": "Actualizado às" + "VOTUpdatedAt": "Actualizado às", + "VOTNeedWebAudioAPI": "Para habilitar isso, você deve ter uma API de áudio da Web", + "VOTBypassMediaCSP": "Ignorando Media CSP", + "VOTMediaCSPEnabledOnSite": "O Media CSP está ativado neste site" } diff --git a/src/localization/locales/ro.json b/src/localization/locales/ro.json index a91faa01..37179a14 100644 --- a/src/localization/locales/ro.json +++ b/src/localization/locales/ro.json @@ -189,7 +189,6 @@ "proxySettings": "Setări Proxy", "translationTakeApproximatelyMinute2": "Traducerea va dura aproximativ {0} minute", "VOTAudioBooster": "Creșterea extinsă a volumului de traducere", - "VOTMediaCSPError": "Nu s-a încărcat audio (eroare media csp)", "VOTSubtitlesDesign": "Design subtitrari", "VOTSubtitlesFontSize": "Dimensiunea fontului subtitrărilor", "VOTSubtitlesOpacity": "Transparența fundalului subtitrării", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Descărcați fișiere cu numele videoclipului", "VOTUpdateLocaleFiles": "Actualizați fișierele de localizare", "VOTLocaleHash": "Hash Locale", - "VOTUpdatedAt": "Actualizat la 16: 40" + "VOTUpdatedAt": "Actualizat la", + "VOTNeedWebAudioAPI": "Pentru a activa acest lucru, trebuie să aveți un API Audio Web", + "VOTBypassMediaCSP": "Ocolind Media CSP", + "VOTMediaCSPEnabledOnSite": "Media CSP este activat pe acest site" } diff --git a/src/localization/locales/ru.json b/src/localization/locales/ru.json index 267b3666..c58cf570 100644 --- a/src/localization/locales/ru.json +++ b/src/localization/locales/ru.json @@ -189,7 +189,6 @@ "proxySettings": "Настройки прокси-сервера", "translationTakeApproximatelyMinute2": "Перевод займёт примерно {0} минуту", "VOTAudioBooster": "Расширенное увеличение громкости перевода", - "VOTMediaCSPError": "Не удалось загрузить аудио (ошибка media csp)", "VOTSubtitlesDesign": "Оформление субтитров", "VOTSubtitlesFontSize": "Размер шрифта субтитров", "VOTSubtitlesOpacity": "Прозрачность фона субтитров", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Загружать файлы с названием видео", "VOTUpdateLocaleFiles": "Обновить файлы локализации", "VOTLocaleHash": "Хеш перевода", - "VOTUpdatedAt": "Обновлено в" + "VOTUpdatedAt": "Обновлено в", + "VOTNeedWebAudioAPI": "Чтобы включить это, у вас должен быть Web Audio API", + "VOTBypassMediaCSP": "Обход Media CSP", + "VOTMediaCSPEnabledOnSite": "На этом сайте включен Media CSP" } diff --git a/src/localization/locales/si.json b/src/localization/locales/si.json index 8767ea69..3c5082b0 100644 --- a/src/localization/locales/si.json +++ b/src/localization/locales/si.json @@ -189,7 +189,6 @@ "proxySettings": "ප්රොක්සි සැකසුම්", "translationTakeApproximatelyMinute2": "පරිවර්තනය සඳහා ආසන්න වශයෙන් {0} විනාඩි ගතවනු ඇත", "VOTAudioBooster": "දීර්ඝ පරිවර්තන පරිමාව වැඩි කිරීම", - "VOTMediaCSPError": "ශ්රව්ය පූරණය කිරීමට අසමත් (මාධ්ය csp දෝෂය)", "VOTSubtitlesDesign": "උපසිරැසි නිර්මාණය", "VOTSubtitlesFontSize": "උපසිරැසි වල අකුරු ප්රමාණය", "VOTSubtitlesOpacity": "උපසිරැසි පසුබිමේ විනිවිදභාවය", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "වීඩියෝ නාමය සහිත ගොනු බාගත කරන්න", "VOTUpdateLocaleFiles": "දේශීයකරණ ගොනු යාවත්කාලීන කරන්න", "VOTLocaleHash": "දේශීය හැෂ්", - "VOTUpdatedAt": "ට යාවත්කාලීන කරන ලදි" + "VOTUpdatedAt": "ට යාවත්කාලීන කරන ලදි", + "VOTNeedWebAudioAPI": "මෙය සක් රීය කිරීම සඳහා, ඔබට වෙබ් ශ් රව් ය API එකක් තිබිය යුතුය", + "VOTBypassMediaCSP": "Media CSP මග හැරීම", + "VOTMediaCSPEnabledOnSite": "මෙම වෙබ් අඩවියේ csp මාධ් ය සක් රීය කර ඇත" } diff --git a/src/localization/locales/sk.json b/src/localization/locales/sk.json index 0213d366..88145328 100644 --- a/src/localization/locales/sk.json +++ b/src/localization/locales/sk.json @@ -189,7 +189,6 @@ "proxySettings": "Nastavenia Servera Proxy", "translationTakeApproximatelyMinute2": "Preklad bude trvať približne {0} minút", "VOTAudioBooster": "Rozšírené zvýšenie objemu prekladu", - "VOTMediaCSPError": "Nepodarilo sa načítať zvuk (chyba media csp)", "VOTSubtitlesDesign": "Dizajn titulkov", "VOTSubtitlesFontSize": "Veľkosť písma titulkov", "VOTSubtitlesOpacity": "Transparentnosť pozadia titulkov", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Stiahnite si súbory s názvom videa", "VOTUpdateLocaleFiles": "Aktualizácia lokalizačných súborov", "VOTLocaleHash": "Locale hash", - "VOTUpdatedAt": "Aktualizované o 16: 40" + "VOTUpdatedAt": "Aktualizované o", + "VOTNeedWebAudioAPI": "Ak to chcete povoliť, musíte mať rozhranie Web Audio API", + "VOTBypassMediaCSP": "Obchádzanie Media CSP", + "VOTMediaCSPEnabledOnSite": "Media CSP je povolené na tejto stránke" } diff --git a/src/localization/locales/sl.json b/src/localization/locales/sl.json index 09efdd19..f90c20dd 100644 --- a/src/localization/locales/sl.json +++ b/src/localization/locales/sl.json @@ -189,7 +189,6 @@ "proxySettings": "Nastavitve Posrednika", "translationTakeApproximatelyMinute2": "Prevod bo trajal približno {0} minut", "VOTAudioBooster": "Povečanje obsega razširjenega prevajanja", - "VOTMediaCSPError": "Ni bilo mogoče naložiti zvoka (napaka media CSP)", "VOTSubtitlesDesign": "Oblikovanje podnapisov", "VOTSubtitlesFontSize": "Velikost pisave podnapisov", "VOTSubtitlesOpacity": "Preglednost ozadja podnapisov", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Prenesite datoteke z imenom videoposnetka", "VOTUpdateLocaleFiles": "Posodobite lokalizacijske datoteke", "VOTLocaleHash": "Lokalni hash", - "VOTUpdatedAt": "Posodobljeno ob" + "VOTUpdatedAt": "Posodobljeno ob", + "VOTNeedWebAudioAPI": "Če želite to omogočiti, morate imeti spletni avdio API", + "VOTBypassMediaCSP": "Obhod Media CSP", + "VOTMediaCSPEnabledOnSite": "Media CSP je omogočen na tej spletni strani" } diff --git a/src/localization/locales/sq.json b/src/localization/locales/sq.json index 6e873396..29664fda 100644 --- a/src/localization/locales/sq.json +++ b/src/localization/locales/sq.json @@ -189,7 +189,6 @@ "proxySettings": "Cilësimet E Përfaqësuesit", "translationTakeApproximatelyMinute2": "Përkthimi do të zgjasë afërsisht {0} minuta", "VOTAudioBooster": "Rritja e vëllimit të përkthimit të zgjeruar", - "VOTMediaCSPError": "Nuk arriti të ngarkojë audio (gabim media csp)", "VOTSubtitlesDesign": "Dizajni i titrave", "VOTSubtitlesFontSize": "Madhësia e shkronjave të titrave", "VOTSubtitlesOpacity": "Transparenca e sfondit të titrave", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Shkarkoni skedarë me emrin e videos", "VOTUpdateLocaleFiles": "Përditësoni skedarët e lokalizimit", "VOTLocaleHash": "Hash Locale", - "VOTUpdatedAt": "Përditësuar në" + "VOTUpdatedAt": "Përditësuar në", + "VOTNeedWebAudioAPI": "Për ta mundësuar këtë, duhet të keni NJË API Audio Në Internet", + "VOTBypassMediaCSP": "Duke Anashkaluar Media CSP", + "VOTMediaCSPEnabledOnSite": "Media CSP është aktivizuar në këtë faqe" } diff --git a/src/localization/locales/sr.json b/src/localization/locales/sr.json index aba1dbdb..7f81930c 100644 --- a/src/localization/locales/sr.json +++ b/src/localization/locales/sr.json @@ -189,7 +189,6 @@ "proxySettings": "Подешавања проксија", "translationTakeApproximatelyMinute2": "Превод ће трајати приближно {0} минута", "VOTAudioBooster": "Повећање обима проширеног трансфера", - "VOTMediaCSPError": "Преузимање звука није успело (Медиа ЦСП грешка)", "VOTSubtitlesDesign": "Дизајн титлова", "VOTSubtitlesFontSize": "Величина фонта титлова", "VOTSubtitlesOpacity": "Транспарентност позадине титлова", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Преузмите датотеке са именом видео записа", "VOTUpdateLocaleFiles": "Ажурирајте датотеке локализације", "VOTLocaleHash": "Хеш локали", - "VOTUpdatedAt": "Ажурирано у" + "VOTUpdatedAt": "Ажурирано у", + "VOTNeedWebAudioAPI": "Да бисте то омогућили, морате имати Веб Аудио АПИ", + "VOTBypassMediaCSP": "Заобилажење Медиацсп-А", + "VOTMediaCSPEnabledOnSite": "На овој веб локацији је омогућен Медиа ЦСП" } diff --git a/src/localization/locales/su.json b/src/localization/locales/su.json index 30b928cd..63a6a783 100644 --- a/src/localization/locales/su.json +++ b/src/localization/locales/su.json @@ -189,7 +189,6 @@ "proxySettings": "Setélan Proxy", "translationTakeApproximatelyMinute2": "Tarjamahan bakal nyandak kira-kira {0} menit", "VOTAudioBooster": "Paningkatan volume tarjamahan anu diperpanjang", - "VOTMediaCSPError": "Gagal pikeun muka audio (media csp error)", "VOTSubtitlesDesign": "Desain subtitle", "VOTSubtitlesFontSize": "Ukuran font tina subtitles", "VOTSubtitlesOpacity": "Transparansi tina latar subjudul", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Ngundeur payil jeung ngaran video", "VOTUpdateLocaleFiles": "File lokalisasi Update", "VOTLocaleHash": "Lokal hash", - "VOTUpdatedAt": "Diperbarui jam 16: 40" + "VOTUpdatedAt": "Diperbarui jam", + "VOTNeedWebAudioAPI": "Pikeun ngaktipkeun ieu, anjeun kudu boga API Audio Web", + "VOTBypassMediaCSP": "Ngalangkungan Media CSP", + "VOTMediaCSPEnabledOnSite": "Media csp diaktipkeun dina situs ieu" } diff --git a/src/localization/locales/sv.json b/src/localization/locales/sv.json index cacaa230..ca330ad3 100644 --- a/src/localization/locales/sv.json +++ b/src/localization/locales/sv.json @@ -189,7 +189,6 @@ "proxySettings": "Proxyinställningar", "translationTakeApproximatelyMinute2": "Översättningen tar ungefär {0} minuter", "VOTAudioBooster": "Utökad volymökning av översättning", - "VOTMediaCSPError": "Det gick inte att ladda ljud (media csp-fel)", "VOTSubtitlesDesign": "Textning design", "VOTSubtitlesFontSize": "Teckenstorlek på undertexter", "VOTSubtitlesOpacity": "Öppenhet i undertextens bakgrund", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Ladda ner filer med videonamnet", "VOTUpdateLocaleFiles": "Uppdatera lokaliseringsfiler", "VOTLocaleHash": "Lokal hash", - "VOTUpdatedAt": "Uppdaterat klockan" + "VOTUpdatedAt": "Uppdaterat klockan", + "VOTNeedWebAudioAPI": "För att aktivera detta måste du ha ETT Web Audio API", + "VOTBypassMediaCSP": "Kringgå Media CSP", + "VOTMediaCSPEnabledOnSite": "Media CSP är aktiverat på den här webbplatsen" } diff --git a/src/localization/locales/sw.json b/src/localization/locales/sw.json index a9818459..b22946e0 100644 --- a/src/localization/locales/sw.json +++ b/src/localization/locales/sw.json @@ -189,7 +189,6 @@ "proxySettings": "Mipangilio Ya Wakala", "translationTakeApproximatelyMinute2": "Tafsiri itachukua takriban {0} dakika", "VOTAudioBooster": "Kuongezeka kwa kiasi cha tafsiri", - "VOTMediaCSPError": "Imeshindwa kupakia sauti (kosa la media csp)", "VOTSubtitlesDesign": "Subtitles kubuni", "VOTSubtitlesFontSize": "Ukubwa wa fonti ya manukuu", "VOTSubtitlesOpacity": "Uwazi wa mandharinyuma ya manukuu", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Pakua faili zilizo na jina la video", "VOTUpdateLocaleFiles": "Sasisha faili za ujanibishaji", "VOTLocaleHash": "Eneo hash", - "VOTUpdatedAt": "Imesasishwa saa 16: 40" + "VOTUpdatedAt": "Imesasishwa saa", + "VOTNeedWebAudioAPI": "Ili kuwezesha hii, lazima uwe NA API Ya Sauti Ya Wavuti", + "VOTBypassMediaCSP": "Kupitia Media CSP", + "VOTMediaCSPEnabledOnSite": "Media CSP imewezeshwa kwenye tovuti hii" } diff --git a/src/localization/locales/tr.json b/src/localization/locales/tr.json index 7dae6865..668003b5 100644 --- a/src/localization/locales/tr.json +++ b/src/localization/locales/tr.json @@ -189,7 +189,6 @@ "proxySettings": "Proxy Ayarları", "translationTakeApproximatelyMinute2": "Çeviri yaklaşık {0} dakika sürecektir", "VOTAudioBooster": "Genişletilmiş çeviri hacmi artışı", - "VOTMediaCSPError": "Ses yüklenemedi (ortam csp hatası)", "VOTSubtitlesDesign": "Altyazı tasarımı", "VOTSubtitlesFontSize": "Altyazıların yazı tipi boyutu", "VOTSubtitlesOpacity": "Altyazı arka planının şeffaflığı", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Video adına sahip dosyaları indirin", "VOTUpdateLocaleFiles": "Yerelleştirme dosyalarını güncelle", "VOTLocaleHash": "Yerel ayar karması", - "VOTUpdatedAt": "güncellendi" + "VOTUpdatedAt": "güncellendi", + "VOTNeedWebAudioAPI": "Bunu etkinleştirmek için bir Web Ses API'sine sahip olmanız gerekir", + "VOTBypassMediaCSP": "Media CSP'yi atlamak", + "VOTMediaCSPEnabledOnSite": "Media CSP bu sitede etkindir" } diff --git a/src/localization/locales/uk.json b/src/localization/locales/uk.json index 5253b59a..b9494f5e 100644 --- a/src/localization/locales/uk.json +++ b/src/localization/locales/uk.json @@ -189,7 +189,6 @@ "proxySettings": "Налаштування проксі-сервера", "translationTakeApproximatelyMinute2": "Переклад займе приблизно {0} хвилину", "VOTAudioBooster": "Збільшення обсягу розширеного перекладу", - "VOTMediaCSPError": "Не вдалося завантажити аудіо (помилка media csp)", "VOTSubtitlesDesign": "Дизайн субтитрів", "VOTSubtitlesFontSize": "Розмір шрифту субтитрів", "VOTSubtitlesOpacity": "Прозорість фону субтитрів", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Завантажуйте файли з назвою відео", "VOTUpdateLocaleFiles": "Оновити файли локалізації", "VOTLocaleHash": "Хеш локалі", - "VOTUpdatedAt": "Оновлено о 16: 40" + "VOTUpdatedAt": "Оновлено о", + "VOTNeedWebAudioAPI": "Щоб увімкнути це, ви повинні мати Web Audio API", + "VOTBypassMediaCSP": "Обхід Media CSP", + "VOTMediaCSPEnabledOnSite": "На цьому сайті включено Media CSP" } diff --git a/src/localization/locales/ur.json b/src/localization/locales/ur.json index f5dd7f50..e33028fb 100644 --- a/src/localization/locales/ur.json +++ b/src/localization/locales/ur.json @@ -189,7 +189,6 @@ "proxySettings": "پراکسی کی ترتیبات", "translationTakeApproximatelyMinute2": "ترجمہ میں تقریبا {0} منٹ لگیں گے", "VOTAudioBooster": "توسیع شدہ ترجمہ حجم میں اضافہ", - "VOTMediaCSPError": "آڈیو لوڈ کرنے میں ناکام (میڈیا سی ایس پی کی خرابی)", "VOTSubtitlesDesign": "سب ٹائٹلز ڈیزائن", "VOTSubtitlesFontSize": "سب ٹائٹلز کا فونٹ سائز", "VOTSubtitlesOpacity": "ذیلی عنوان کے پس منظر کی شفافیت", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "ویڈیو نام کے ساتھ فائلیں ڈاؤن لوڈ کریں", "VOTUpdateLocaleFiles": "لوکلائزیشن فائلوں کو اپ ڈیٹ کریں", "VOTLocaleHash": "مقامی ہیش", - "VOTUpdatedAt": "پر اپ ڈیٹ" + "VOTUpdatedAt": "پر اپ ڈیٹ", + "VOTNeedWebAudioAPI": "اس کو فعال کرنے کے ل you ، آپ کے پاس ویب آڈیو API ہونا ضروری ہے", + "VOTBypassMediaCSP": "میڈیا ایس پی کو نظرانداز کرنا", + "VOTMediaCSPEnabledOnSite": "اس سائٹ پر میڈیا سی ایس پی فعال ہے" } diff --git a/src/localization/locales/uz.json b/src/localization/locales/uz.json index 0b6cba5e..617fb7b5 100644 --- a/src/localization/locales/uz.json +++ b/src/localization/locales/uz.json @@ -189,7 +189,6 @@ "proxySettings": "Proksi Moslamalari", "translationTakeApproximatelyMinute2": "Tarjima taxminan {0} daqiqa davom etadi", "VOTAudioBooster": "Kengaytirilgan tarjima hajmini oshirish", - "VOTMediaCSPError": "Ovozni yuklab bo'lmadi (media CSP xatosi)", "VOTSubtitlesDesign": "Subtitrlar dizayni", "VOTSubtitlesFontSize": "Subtitrlarning shrift o'lchami", "VOTSubtitlesOpacity": "Subtitr fonining shaffofligi", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Video nomi bilan fayllarni yuklab oling", "VOTUpdateLocaleFiles": "Mahalliylashtirish fayllarini yangilang", "VOTLocaleHash": "Mahalliy Xash", - "VOTUpdatedAt": "da yangilangan" + "VOTUpdatedAt": "da yangilangan", + "VOTNeedWebAudioAPI": "Buni yoqish uchun sizda veb-Audio API bo'lishi kerak", + "VOTBypassMediaCSP": "Mediacspni Chetlab O'tish", + "VOTMediaCSPEnabledOnSite": "Media CSP ushbu saytda yoqilgan" } diff --git a/src/localization/locales/vi.json b/src/localization/locales/vi.json index 1842571b..db282ef8 100644 --- a/src/localization/locales/vi.json +++ b/src/localization/locales/vi.json @@ -189,7 +189,6 @@ "proxySettings": "Cài Đặt Proxy", "translationTakeApproximatelyMinute2": "Bản dịch sẽ mất khoảng {0} phút", "VOTAudioBooster": "Mở rộng khối lượng dịch tăng", - "VOTMediaCSPError": "Không tải được âm thanh (lỗi media csp)", "VOTSubtitlesDesign": "Thiết kế phụ đề", "VOTSubtitlesFontSize": "Kích thước phông chữ của phụ đề", "VOTSubtitlesOpacity": "Độ trong suốt của nền phụ đề", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Tải xuống các tệp có tên video", "VOTUpdateLocaleFiles": "Cập nhật tệp bản địa hóa", "VOTLocaleHash": "Ngôn ngữ băm", - "VOTUpdatedAt": "Cập nhật lúc 16: 40" + "VOTUpdatedAt": "Cập nhật lúc", + "VOTNeedWebAudioAPI": "Để kích hoạt ĐIỀU này, bạn phải có Api Âm Thanh Web", + "VOTBypassMediaCSP": "Bỏ Qua Media CSP", + "VOTMediaCSPEnabledOnSite": "Media CSP được kích hoạt trên trang web này" } diff --git a/src/localization/locales/zh.json b/src/localization/locales/zh.json index 4268bbf5..aedda434 100644 --- a/src/localization/locales/zh.json +++ b/src/localization/locales/zh.json @@ -189,7 +189,6 @@ "proxySettings": "代理设置", "translationTakeApproximatelyMinute2": "翻译大约需要{0}分钟", "VOTAudioBooster": "扩展翻译量增加", - "VOTMediaCSPError": "加载音频失败(媒体csp错误)", "VOTSubtitlesDesign": "字幕设计", "VOTSubtitlesFontSize": "字幕的字体大小", "VOTSubtitlesOpacity": "字幕背景的透明度", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "下载带有视频名称的文件", "VOTUpdateLocaleFiles": "更新本地化文件", "VOTLocaleHash": "区域设置哈希", - "VOTUpdatedAt": "更新于" + "VOTUpdatedAt": "更新于", + "VOTNeedWebAudioAPI": "要启用此功能,您必须具有Web音频API", + "VOTBypassMediaCSP": "绕过Media CSP", + "VOTMediaCSPEnabledOnSite": "媒体CSP在此站点上启用" } diff --git a/src/localization/locales/zu.json b/src/localization/locales/zu.json index 1735f364..fd2fecbd 100644 --- a/src/localization/locales/zu.json +++ b/src/localization/locales/zu.json @@ -189,7 +189,6 @@ "proxySettings": "Izilungiselelo Ze-Proxy", "translationTakeApproximatelyMinute2": "Ukuhumusha kuzothatha cishe imizuzu {0}", "VOTAudioBooster": "Ukwanda kwevolumu yokuhumusha okwandisiwe", - "VOTMediaCSPError": "Yehlulekile ukulayisha audio (media csp iphutha)", "VOTSubtitlesDesign": "Umklamo wemibhalo engezansi", "VOTSubtitlesFontSize": "Usayizi wefonti yemibhalo engezansi", "VOTSubtitlesOpacity": "Ukungafihli lutho kwesizinda sesihlokwana", @@ -200,5 +199,8 @@ "VOTDownloadWithName": "Thwebula amafayela ngegama video", "VOTUpdateLocaleFiles": "Buyekeza amafayela localization", "VOTLocaleHash": "I-hash yendawo", - "VOTUpdatedAt": "Kubuyekezwe" + "VOTUpdatedAt": "Kubuyekezwe", + "VOTNeedWebAudioAPI": "Ukuze ukwazi lokhu, kufanele UBE NE-WEB AUDIO API", + "VOTBypassMediaCSP": "Ukugwema I-Media CSP", + "VOTMediaCSPEnabledOnSite": "I-Media csp inikwe amandla kule sayithi" } diff --git a/src/styles/components/checkbox.scss b/src/styles/components/checkbox.scss index b124a20c..061573be 100644 --- a/src/styles/components/checkbox.scss +++ b/src/styles/components/checkbox.scss @@ -126,7 +126,7 @@ &:active { & > input, - &:hover > input { + &:hover > input:not(:disabled) { border-color: rgb(var(--vot-helper-theme)); }