<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9214173474004328598</id><updated>2025-06-30T07:17:31.994-07:00</updated><category term="Entertainment"/><category term="Live Streaming TV"/><category term="Live Movie Channel"/><category term="Movies Gallery"/><category term="Bollywood Movie"/><category term="Hollywood Movies"/><category term="Live TV"/><category term="Web Series"/><category term="Sports TV"/><category term="English Channel"/><category term="Live News Channel"/><category term="Live"/><category term="New&#39;s Channel&#39;s"/><category term="Hindi Channel"/><category term="Hindi Dubbed"/><category term="Music Channel"/><category term="Multi Language"/><category term="Kannada Movie"/><category term="Amazon Prime Series"/><category term="Netflix Series"/><category term="Life Style TV"/><category term="South Dubbed"/><category term="Trending"/><category term="Marathi Movies"/><category term="Netflix Movies"/><category term="Sony Liv Series"/><category term="Marathi Channel"/><category term="Spiritual Principles Channel"/><category term="Tamil Channel"/><category term="Kannada Channel"/><category term="South Doubbed"/><category term="Telugu Channel"/><category term="Hotstar Series"/><category term="Zee5  Series"/><category term="Food recipe TV"/><category term="Geographic Channel"/><category term="Malayalam Channel"/><category term="Fashion TV"/><category term="Hollywood Dubbed Movies"/><category term="Russian TV Channel"/><category term="Amazon Prime Movies"/><category term="Arabic Channel"/><category term="Australia Cam Live"/><category term="Disney+"/><category term="Korean Series"/><category term="Live from Australia"/><category term="MX Player Series"/><category term="Spanish"/><category term="SspectrumLive TV"/><category term="Telugu Music Chennel"/><category term="Web-Series"/><category term="Argentina Webcam"/><category term="Bojhpuri Channel"/><category term="Booba 🔴 LIVE - DOUBLE TROUBLE - Cartoon for Kids"/><category term="California - Live Cat Cam"/><category term="Chinese Channel"/><category term="Chinese Movies"/><category term="Explore Channel"/><category term="Express entertainment TV Live"/><category term="France Live TV Streaming ESA"/><category term="Gaming Channel"/><category term="German TV channel"/><category term="Germany Live webcam"/><category term="Greece Channel"/><category term="Gujarati Channel"/><category term="Gujarati Movies"/><category term="Hollywood Web Series"/><category term="Hotstar Movie"/><category term="Iceland volcanos (-) Live from Iceland"/><category term="Pac-12 Network-Sports- English-United States"/><category term="Poker TV"/><category term="Sci-Fi"/><category term="Serbian Channel"/><category term="Sinhala Channel"/><category term="Sony Six LIVE"/><category term="Space Channel"/><category term="TVF Series"/><category term="Taiwan TV"/><category term="Turkey TV"/><category term="Urdu Channel"/><category term="Zee5  Movies"/><category term="🌎 Nasa Live Stream - Earth From Space"/><category term="🌎 ShopHQ 🔴 LIVE - ShopHQ Shopping - English - United States"/><category term="🔴 Las Vegas Strip Street-Level View Cam LIVE"/><category term="🔴 Las Vegas: Aerie View Live"/><category term="🔴 New York City Walk 24/7 Stream"/><category term="🔴 The Cat Cafe LIVE 🐾🐾🐈‍⬛ - San Diego"/><title type='text'>SspectrumLive TV</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>917</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-7967696234528570100</id><published>2024-10-19T07:16:00.000-07:00</published><updated>2024-10-19T07:16:59.341-07:00</updated><title type='text'></title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj86oyVRZdLiSC6635NMbzZxxcXG3XPzEfu9nl9wppQ5hd5V6UxdHwq7oK5s2iWkgzadpoiNmU7YS-IaZ29NtKAVEpJwQx_EKxCHgSPDpxZinJUYSqbWG41AUA3Ge8o6nDLKqg1EoRe4w9r5GU8dPYDnsOAVfAcpimCqSNyVD6DCL9lzsuseHuc_xK3nmI/s220/Double-iSmart-2024-Hindi-Language.png&quot; style=&quot;clear: left; display: block; float: left; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;220&quot; data-original-width=&quot;165&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj86oyVRZdLiSC6635NMbzZxxcXG3XPzEfu9nl9wppQ5hd5V6UxdHwq7oK5s2iWkgzadpoiNmU7YS-IaZ29NtKAVEpJwQx_EKxCHgSPDpxZinJUYSqbWG41AUA3Ge8o6nDLKqg1EoRe4w9r5GU8dPYDnsOAVfAcpimCqSNyVD6DCL9lzsuseHuc_xK3nmI/s320/Double-iSmart-2024-Hindi-Language.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;style&gt;
.video-gallery-container {
  width: 100%;
  font-family: &quot;Roboto&quot;, sans-serif;
  background: #ffd166;
  padding: 8px 0 0 0;
  margin: 0 auto;
}
  
.video-gallery-container,
.video-gallery-container * {
  box-sizing: border-box;
}
 
.video-gallery-container h2.title {
  text-align: center;
  font-weight: 300;
  text-transform: uppercase;
  font-size: 34px;
  margin-bottom: 24px;
}

.video-gallery-container .video-gallery {
  display: 100%;
  background: #02151e;
  justify-content: center;
  padding: 16px;
  padding-top: 24px;
  gap: 24px;
  color: #fff;
}

.video-gallery h3.video-title {
  line-height: 1.6;
  font-weight: 700;
  font-size: 20px;
  width: 100%;
}

.video-gallery .thumbnail {
  height: 120px;
  cursor: pointer;
  width: 240px;
  
}

.video-gallery .video {
  position: relative;
}

.video-gallery .video:hover .play-icon {
  opacity: 1;
}

.video-gallery .play-icon {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  pointer-events: none;
  opacity: 0;
  transition: opacity 400ms ease;
}

.video-gallery .video .play-icon img {
  height: 50px;
  width: 50px;
}

.video-gallery .all-videos {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.video-gallery .responsive-iframe {
  position: relative;
  height: 0;
  overflow: hidden;
  padding-top: 56.25%;
  padding-bottom: 30px;
}

.video-gallery .responsive-iframe iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
  @media (max-width: 900px) {
  .video-gallery-container {
    width: 100%;
  }
}
  
@media (max-width: 700px) {
  .video-gallery-container .video-gallery {
    flex-direction: column;
  }

  .video-gallery .all-videos {
    display: grid;
    grid-template-columns: 1fr 1fr;
  }

  .video-gallery .thumbnail {
    height: unset;
    width: 100%;
  }
}

@media (max-width: 500px) {
  .video-gallery .all-videos {
    grid-template-columns: 1fr;
  }

  .video-gallery-container {
    max-width: 400px;
  }

  .video-gallery-container h2.title {
    font-size: 24px;
    font-weight: bold;
  }
}
 .BorderColorChangeElement {
  	animation: BorderColorChange 1s ease-out 0s infinite alternate none running;
}
@keyframes BorderColorChange{
  	0%  { border: 10px solid #ffc0cb;}
  	100%  { border: 10px solid #ff69b4;}
}
@keyframes rotateAnim {
    0% { transform: rotate(deg);}
    100% { transform:rotate(360deg);}
}
@keyframes scaler {
  0% {
    transform: scale(1);
  }
  100% {    transform: scale(1.5);
  }
}
.imgAnim691 {
  animation: rotateAnim 10s linear 0s infinite forwards running;
}
.btnAnim691 {
  animation: scaler 1s linear 0s infinite alternate none running;
}
.btnAnim691:hover{
  animation-play-state: paused;
}
.download-button-container {
  width: 90%;
  max-width: 600px;
  background: #eee;
  margin: 24px auto;
  padding: 16px;
  text-align: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  border-radius: 10px;
  box-shadow: inset 0 10px 15px -3px rgba(0, 0, 0, 0.1);
  display: flex;
  flex-direction: column;
  align-items: center;
}

.download-button-container .download-button {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 200px;
  justify-content: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  font-size: 16px;
  font-weight: 300;
  text-transform: uppercase;
  letter-spacing: 2px;
  background: #ef233c;
  border: none;
  padding: 8px;
  cursor: pointer;
  color: #fff;
}

.download-button-container .download-button.active .download-icon {
  animation: bounceAnim 700ms infinite alternate;
}

.download-button-container .download-icon {
  width: 16px;
}

.download-info h3 {
  color: #023047;
  margin-bottom: 12px;
}

.download-info {
  height: 0;
  overflow: hidden;
  transition: all 400ms ease;
}

.download-button-container .download-button.active + .download-info {
  height: 90px;
}

.download-info .download-link {
  font-size: 14px;
  text-transform: uppercase;
  font-weight: 300;
  color: #023047;
  letter-spacing: 4px;
  text-decoration: underline;
  text-underline-offset: 5px;
}

@keyframes bounceAnim {
  to {
    transform: translateY(4px);
  }
}
  

&lt;/style&gt;

                             
                                
&lt;div class=&quot;video-gallery-container&quot;&gt;
&lt;div class=&quot;detail-mod&quot;&gt;
                                &lt;div class=&quot;dm-thumb&quot;&gt;&lt;img alt=&quot;Double iSmart (Hindi)&quot; src=&quot;https://i.ytimg.com/vi/WdKhQr_WVdA/hq720.jpg&quot; title=&quot;Double iSmart (Hindi)&quot; /&gt;&lt;/div&gt;
                                &lt;h3&gt;Double iSmart (Hindi)&lt;/h3&gt;
								
                              				

                                &lt;div class=&quot;mobile-view&quot;&gt;&lt;i class=&quot;icon-remove_red_eye&quot;&gt;&lt;/i&gt;  views&lt;/div&gt; 
                       

                            &lt;div class=&quot;desc&quot;&gt;  &lt;p&gt;Watch Double iSmart (2024) Hindi full movie online, Double iSmart (Hindi) movie download 720p HD quality 300MB and 1GB print on Ogomovies When a dead police officer’s memories are transplanted to his brain, an assassin assists the authorities.&lt;/p&gt;
														&lt;/div&gt;
                            &lt;div class=&quot;mvic-info&quot;&gt;
                                &lt;div class=&quot;mvici-left&quot;&gt;
                                    &lt;p&gt;&lt;strong&gt;Genres: &lt;/strong&gt;Hindi Dubbed&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Actors: &lt;/strong&gt;Kavya Thapar, Ram Pothineni, Sanjay Dutt&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Director: &lt;/strong&gt;Puri Jagannadh&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Country: &lt;/strong&gt;India&lt;br /&gt;&lt;/p&gt;
                                 &lt;/div&gt;
                                &lt;div class=&quot;mvici-right&quot;&gt;
									                                    &lt;p&gt;&lt;strong&gt;Duration:&lt;/strong&gt;  min&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; &lt;span class=&quot;quality&quot;&gt;HD&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; 2024&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;IMDb:&lt;/strong&gt; 6.8&lt;/p&gt;

                                                              &lt;p id=&quot;imdb&quot;&gt;&lt;strong&gt;IMDb ID:&lt;/strong&gt; &lt;span id=&quot;imdb_id&quot;&gt;&lt;/span&gt;&lt;/p&gt;    
                                                          &lt;/div&gt;
                                &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;/div&gt;
                            &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;!--keywords--&gt;
                            &lt;div id=&quot;mv-keywords&quot;&gt;
                                &lt;strong class=&quot;mr10&quot;&gt;Keywords:&lt;/strong&gt;
									&lt;h5&gt;Double iSmart (2024) Hindi Movie&lt;/h5&gt;&lt;h5&gt;Double iSmart&amp;nbsp;&lt;/h5&gt;                            &lt;/div&gt;
                        &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                    &lt;/div&gt;  
  &lt;div class=&quot;pa-main&quot;&gt;
  &lt;div class=&quot;widget-content&quot;&gt;
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...Subscribe our channel for Upcomiiing New movies notification....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;
&lt;/div&gt;
    
    &lt;center&gt; &lt;h3&gt;Double iSmart (Hindi) Movie&lt;/h3&gt;&lt;/center&gt;
    
    &lt;div class=&quot;container2&quot;&gt;
      
        &lt;div class=&quot;box box1&quot;&gt;&lt;/div&gt;
	
          &lt;div class=&quot;box box2&quot;&gt;
          
         &lt;div class=&quot;video-container&quot;&gt;
          
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;https://teamomw5.com/xwwm3behpeg4cof2bs5uanocvojvp5osvfxlkpw7gnw5famcuhq6fsuasqfa/www_0Gomovies.mov_-_Double_ismart_(2024)_Hindi.mkv.mp4&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;/div&gt;                
    

    
    &lt;div class=&quot;download-button-container&quot;&gt;
      &lt;button class=&quot;download-button&quot;&gt;Download&lt;span class=&quot;download-icon&quot;&gt;
          &lt;svg class=&quot;h-6 w-6&quot; fill=&quot;none&quot; stroke-width=&quot;2&quot; stroke=&quot;currentColor&quot; viewbox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
            &lt;path d=&quot;M19 14l-7 7m0 0l-7-7m7 7V3&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
          &lt;/path&gt;&lt;/svg&gt;
        &lt;/span&gt;
      &lt;/button&gt;
    

      &lt;div class=&quot;download-info&quot;&gt;
        &lt;h3&gt;Your download link will appear in 5 seconds.&lt;/h3&gt;
      &lt;/div&gt;
    &lt;/div&gt;
 






&lt;script&gt;
const downloadButton = document.querySelector(
  &quot;.download-button-container .download-button&quot;
);
const downloadHeading = document.querySelector(&quot;.download-info h3&quot;);
const downloadInfo = document.querySelector(&quot;.download-info&quot;);

let downloadTimer;
let remainingTime = 5;
let linkDisplayed = false;

const showDownloadLink = () =&gt; {
  if (!linkDisplayed) {
    const downloadLink = document.createElement(&quot;a&quot;);
    downloadLink.href = &quot;https://teamomw5.com/xwwm3behpeg4cof2bs5uanocvojvp5osvfxlkpw7gnw5flbuazjq5dcrkveq/master.m3u8&quot;;
    downloadLink.innerHTML = &quot;Click Here&quot;;
    downloadLink.classList.add(&quot;download-link&quot;);
    downloadInfo.appendChild(downloadLink);
  }
  linkDisplayed = true;
};

downloadButton.addEventListener(&quot;click&quot;, () =&gt; {
  downloadButton.classList.add(&quot;active&quot;);

  downloadTimer = setInterval(() =&gt; {
    remainingTime--;

    if (remainingTime &lt;= 0) {
      clearInterval(downloadTimer);
      showDownloadLink();
      downloadHeading.innerHTML = &quot;Here is the download link.&quot;;
    } else {
      downloadHeading.innerHTML = `Your download link will appear in ${remainingTime} seconds.`;
    }
  }, 1000);
});
&lt;/script&gt;

  &lt;p&gt;Or Direct Download From Above link &lt;/p&gt;


      
  


  

  

  
  &lt;!--/main--&gt;
&lt;center&gt;&lt;!--info line, ad unit name: Footer--&gt;

&lt;script async=&quot;&quot; src=&quot;https://tags.h12-media.com/load2.js&quot;&gt;&lt;/script&gt;&lt;/center&gt;



            &lt;div id=&quot;copyright&quot;&gt;
                &lt;p&gt;&lt;a href=&quot;&quot; id=&quot;logo-footer&quot;&gt;&lt;/a&gt;&lt;/p&gt;
                &lt;p&gt;Copyright © &lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;. All Rights
                    Reserved 2023&lt;/p&gt;
            &lt;/div&gt;
  
&lt;b&gt;We do not host any files on it’s servers. All files or contents hosted on third party websites.
We do not accept responsibility for contents hosted on third party websites.
We just index those links which are already available in internet&lt;/b&gt;


&lt;/div&gt;&lt;/div&gt;

&lt;style&gt;

.codehap {
      display: flex;
      flex-wrap: wrap;
    }

    .codehapBox, .codehap_box {
      box-sizing: border-box;
      width: 100%;
      padding: 10px;
      border: 1px solid #ccc;
    }

    @media (min-width: 600px) {
      .codehapBox {
        width: 50%;
      }
    }
    
.video-container {
    position: relative;
    padding-bottom: 56.25%;
    padding-top: 0px;
    height: 0%;
    overflow: hidden;
}

.video-container iframe {
    position: absolute;
    top:0;
    left: 0%;
    width: 100%;
    height: 100%;
}
.codehapContent{
 
margin:auto;


}

&lt;/style&gt;


	

 
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/7967696234528570100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/10/double-ismart-hindi_19.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/7967696234528570100'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/7967696234528570100'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/10/double-ismart-hindi_19.html' title=''/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj86oyVRZdLiSC6635NMbzZxxcXG3XPzEfu9nl9wppQ5hd5V6UxdHwq7oK5s2iWkgzadpoiNmU7YS-IaZ29NtKAVEpJwQx_EKxCHgSPDpxZinJUYSqbWG41AUA3Ge8o6nDLKqg1EoRe4w9r5GU8dPYDnsOAVfAcpimCqSNyVD6DCL9lzsuseHuc_xK3nmI/s72-c/Double-iSmart-2024-Hindi-Language.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-2205400742983600352</id><published>2024-10-19T00:04:00.000-07:00</published><updated>2024-10-19T08:12:38.039-07:00</updated><title type='text'>Double iSmart (2024) Hindi Movie</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj86oyVRZdLiSC6635NMbzZxxcXG3XPzEfu9nl9wppQ5hd5V6UxdHwq7oK5s2iWkgzadpoiNmU7YS-IaZ29NtKAVEpJwQx_EKxCHgSPDpxZinJUYSqbWG41AUA3Ge8o6nDLKqg1EoRe4w9r5GU8dPYDnsOAVfAcpimCqSNyVD6DCL9lzsuseHuc_xK3nmI/s220/Double-iSmart-2024-Hindi-Language.png&quot; style=&quot;clear: left; display: block; float: left; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;220&quot; data-original-width=&quot;165&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj86oyVRZdLiSC6635NMbzZxxcXG3XPzEfu9nl9wppQ5hd5V6UxdHwq7oK5s2iWkgzadpoiNmU7YS-IaZ29NtKAVEpJwQx_EKxCHgSPDpxZinJUYSqbWG41AUA3Ge8o6nDLKqg1EoRe4w9r5GU8dPYDnsOAVfAcpimCqSNyVD6DCL9lzsuseHuc_xK3nmI/s320/Double-iSmart-2024-Hindi-Language.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;style&gt;
.video-gallery-container {
  width: 100%;
  font-family: &quot;Roboto&quot;, sans-serif;
  background: #ffd166;
  padding: 8px 0 0 0;
  margin: 0 auto;
}
  
.video-gallery-container,
.video-gallery-container * {
  box-sizing: border-box;
}
 
.video-gallery-container h2.title {
  text-align: center;
  font-weight: 300;
  text-transform: uppercase;
  font-size: 34px;
  margin-bottom: 24px;
}

.video-gallery-container .video-gallery {
  display: 100%;
  background: #02151e;
  justify-content: center;
  padding: 16px;
  padding-top: 24px;
  gap: 24px;
  color: #fff;
}

.video-gallery h3.video-title {
  line-height: 1.6;
  font-weight: 700;
  font-size: 20px;
  width: 100%;
}

.video-gallery .thumbnail {
  height: 120px;
  cursor: pointer;
  width: 240px;
  
}

.video-gallery .video {
  position: relative;
}

.video-gallery .video:hover .play-icon {
  opacity: 1;
}

.video-gallery .play-icon {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  pointer-events: none;
  opacity: 0;
  transition: opacity 400ms ease;
}

.video-gallery .video .play-icon img {
  height: 50px;
  width: 50px;
}

.video-gallery .all-videos {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.video-gallery .responsive-iframe {
  position: relative;
  height: 0;
  overflow: hidden;
  padding-top: 56.25%;
  padding-bottom: 30px;
}

.video-gallery .responsive-iframe iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
  @media (max-width: 900px) {
  .video-gallery-container {
    width: 100%;
  }
}
  
@media (max-width: 700px) {
  .video-gallery-container .video-gallery {
    flex-direction: column;
  }

  .video-gallery .all-videos {
    display: grid;
    grid-template-columns: 1fr 1fr;
  }

  .video-gallery .thumbnail {
    height: unset;
    width: 100%;
  }
}

@media (max-width: 500px) {
  .video-gallery .all-videos {
    grid-template-columns: 1fr;
  }

  .video-gallery-container {
    max-width: 400px;
  }

  .video-gallery-container h2.title {
    font-size: 24px;
    font-weight: bold;
  }
}
 .BorderColorChangeElement {
  	animation: BorderColorChange 1s ease-out 0s infinite alternate none running;
}
@keyframes BorderColorChange{
  	0%  { border: 10px solid #ffc0cb;}
  	100%  { border: 10px solid #ff69b4;}
}
@keyframes rotateAnim {
    0% { transform: rotate(deg);}
    100% { transform:rotate(360deg);}
}
@keyframes scaler {
  0% {
    transform: scale(1);
  }
  100% {    transform: scale(1.5);
  }
}
.imgAnim691 {
  animation: rotateAnim 10s linear 0s infinite forwards running;
}
.btnAnim691 {
  animation: scaler 1s linear 0s infinite alternate none running;
}
.btnAnim691:hover{
  animation-play-state: paused;
}
.download-button-container {
  width: 90%;
  max-width: 600px;
  background: #eee;
  margin: 24px auto;
  padding: 16px;
  text-align: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  border-radius: 10px;
  box-shadow: inset 0 10px 15px -3px rgba(0, 0, 0, 0.1);
  display: flex;
  flex-direction: column;
  align-items: center;
}

.download-button-container .download-button {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 200px;
  justify-content: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  font-size: 16px;
  font-weight: 300;
  text-transform: uppercase;
  letter-spacing: 2px;
  background: #ef233c;
  border: none;
  padding: 8px;
  cursor: pointer;
  color: #fff;
}

.download-button-container .download-button.active .download-icon {
  animation: bounceAnim 700ms infinite alternate;
}

.download-button-container .download-icon {
  width: 16px;
}

.download-info h3 {
  color: #023047;
  margin-bottom: 12px;
}

.download-info {
  height: 0;
  overflow: hidden;
  transition: all 400ms ease;
}

.download-button-container .download-button.active + .download-info {
  height: 90px;
}

.download-info .download-link {
  font-size: 14px;
  text-transform: uppercase;
  font-weight: 300;
  color: #023047;
  letter-spacing: 4px;
  text-decoration: underline;
  text-underline-offset: 5px;
}

@keyframes bounceAnim {
  to {
    transform: translateY(4px);
  }
}
  

&lt;/style&gt;

                             
                                
&lt;div class=&quot;video-gallery-container&quot;&gt;
&lt;div class=&quot;detail-mod&quot;&gt;
                                &lt;div class=&quot;dm-thumb&quot;&gt;&lt;img alt=&quot;Double iSmart (Hindi)&quot; src=&quot;https://i.ytimg.com/vi/WdKhQr_WVdA/hq720.jpg&quot; title=&quot;Double iSmart (Hindi)&quot; /&gt;&lt;/div&gt;
                                &lt;h3&gt;Double iSmart (Hindi)&lt;/h3&gt;
								
                              				

                                &lt;div class=&quot;mobile-view&quot;&gt;&lt;i class=&quot;icon-remove_red_eye&quot;&gt;&lt;/i&gt;  views&lt;/div&gt; 
                       

                            &lt;div class=&quot;desc&quot;&gt;  &lt;p&gt;Watch Double iSmart (2024) Hindi full movie online, Double iSmart (Hindi) movie download 720p HD quality 300MB and 1GB print on Ogomovies When a dead police officer’s memories are transplanted to his brain, an assassin assists the authorities.&lt;/p&gt;
														&lt;/div&gt;
                            &lt;div class=&quot;mvic-info&quot;&gt;
                                &lt;div class=&quot;mvici-left&quot;&gt;
                                    &lt;p&gt;&lt;strong&gt;Genres: &lt;/strong&gt;Hindi Dubbed&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Actors: &lt;/strong&gt;Kavya Thapar, Ram Pothineni, Sanjay Dutt&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Director: &lt;/strong&gt;Puri Jagannadh&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Country: &lt;/strong&gt;India&lt;br /&gt;&lt;/p&gt;
                                 &lt;/div&gt;
                                &lt;div class=&quot;mvici-right&quot;&gt;
									                                    &lt;p&gt;&lt;strong&gt;Duration:&lt;/strong&gt;  min&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; &lt;span class=&quot;quality&quot;&gt;HD&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; 2024&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;IMDb:&lt;/strong&gt; 6.8&lt;/p&gt;

                                                              &lt;p id=&quot;imdb&quot;&gt;&lt;strong&gt;IMDb ID:&lt;/strong&gt; &lt;span id=&quot;imdb_id&quot;&gt;&lt;/span&gt;&lt;/p&gt;    
                                                          &lt;/div&gt;
                                &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;/div&gt;
                            &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;!--keywords--&gt;
                            &lt;div id=&quot;mv-keywords&quot;&gt;
                                &lt;strong class=&quot;mr10&quot;&gt;Keywords:&lt;/strong&gt;
									&lt;h5&gt;Double iSmart (2024) Hindi Movie&lt;/h5&gt;&lt;h5&gt;Double iSmart&amp;nbsp;&lt;/h5&gt;                            &lt;/div&gt;
                        &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                    &lt;/div&gt;  
  &lt;div class=&quot;pa-main&quot;&gt;
  &lt;div class=&quot;widget-content&quot;&gt;
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...Subscribe our channel for Upcomiiing New movies notification....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;
&lt;/div&gt;
    
    &lt;center&gt; &lt;h3&gt;Double iSmart (Hindi) Movie&lt;/h3&gt;&lt;/center&gt;
    
    &lt;div class=&quot;container2&quot;&gt;
      
        &lt;div class=&quot;box box1&quot;&gt;&lt;/div&gt;
	
          &lt;div class=&quot;box box2&quot;&gt;
          
         &lt;div class=&quot;video-container&quot;&gt;
          
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;https://teamomw5.com/xwwm3behpeg4cof2bs5uanocvojvp5osvfxlkpw7gnw5famcuhq6fsuasqfa/www_0Gomovies.mov_-_Double_ismart_(2024)_Hindi.mkv.mp4&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;/div&gt;                
    

    
    &lt;div class=&quot;download-button-container&quot;&gt;
      &lt;button class=&quot;download-button&quot;&gt;Download&lt;span class=&quot;download-icon&quot;&gt;
          &lt;svg class=&quot;h-6 w-6&quot; fill=&quot;none&quot; stroke-width=&quot;2&quot; stroke=&quot;currentColor&quot; viewbox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
            &lt;path d=&quot;M19 14l-7 7m0 0l-7-7m7 7V3&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
          &lt;/path&gt;&lt;/svg&gt;
        &lt;/span&gt;
      &lt;/button&gt;
    

      &lt;div class=&quot;download-info&quot;&gt;
        &lt;h3&gt;Your download link will appear in 5 seconds.&lt;/h3&gt;
      &lt;/div&gt;
    &lt;/div&gt;
 






&lt;script&gt;
const downloadButton = document.querySelector(
  &quot;.download-button-container .download-button&quot;
);
const downloadHeading = document.querySelector(&quot;.download-info h3&quot;);
const downloadInfo = document.querySelector(&quot;.download-info&quot;);

let downloadTimer;
let remainingTime = 5;
let linkDisplayed = false;

const showDownloadLink = () =&gt; {
  if (!linkDisplayed) {
    const downloadLink = document.createElement(&quot;a&quot;);
    downloadLink.href = &quot;https://teamomw5.com/xwwm3behpeg4cof2bs5uanocvojvp5osvfxlkpw7gnw5flbuazjq5dcrkveq/master.m3u8&quot;;
    downloadLink.innerHTML = &quot;Click Here&quot;;
    downloadLink.classList.add(&quot;download-link&quot;);
    downloadInfo.appendChild(downloadLink);
  }
  linkDisplayed = true;
};

downloadButton.addEventListener(&quot;click&quot;, () =&gt; {
  downloadButton.classList.add(&quot;active&quot;);

  downloadTimer = setInterval(() =&gt; {
    remainingTime--;

    if (remainingTime &lt;= 0) {
      clearInterval(downloadTimer);
      showDownloadLink();
      downloadHeading.innerHTML = &quot;Here is the download link.&quot;;
    } else {
      downloadHeading.innerHTML = `Your download link will appear in ${remainingTime} seconds.`;
    }
  }, 1000);
});
&lt;/script&gt;

  &lt;p&gt;Or Direct Download From Above link &lt;/p&gt;


      
  


  

  

  
  &lt;!--/main--&gt;
&lt;center&gt;&lt;!--info line, ad unit name: Footer--&gt;

&lt;script async=&quot;&quot; src=&quot;https://tags.h12-media.com/load2.js&quot;&gt;&lt;/script&gt;&lt;/center&gt;



            &lt;div id=&quot;copyright&quot;&gt;
                &lt;p&gt;&lt;a href=&quot;&quot; id=&quot;logo-footer&quot;&gt;&lt;/a&gt;&lt;/p&gt;
                &lt;p&gt;Copyright © &lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;. All Rights
                    Reserved 2023&lt;/p&gt;
            &lt;/div&gt;
  
&lt;b&gt;We do not host any files on it’s servers. All files or contents hosted on third party websites.
We do not accept responsibility for contents hosted on third party websites.
We just index those links which are already available in internet&lt;/b&gt;


&lt;/div&gt;&lt;/div&gt;

&lt;style&gt;

.codehap {
      display: flex;
      flex-wrap: wrap;
    }

    .codehapBox, .codehap_box {
      box-sizing: border-box;
      width: 100%;
      padding: 10px;
      border: 1px solid #ccc;
    }

    @media (min-width: 600px) {
      .codehapBox {
        width: 50%;
      }
    }
    
.video-container {
    position: relative;
    padding-bottom: 56.25%;
    padding-top: 0px;
    height: 0%;
    overflow: hidden;
}

.video-container iframe {
    position: absolute;
    top:0;
    left: 0%;
    width: 100%;
    height: 100%;
}
.codehapContent{
 
margin:auto;


}

&lt;/style&gt;


	

 
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/2205400742983600352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/10/double-ismart-2024-hindi-movie.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/2205400742983600352'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/2205400742983600352'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/10/double-ismart-2024-hindi-movie.html' title='Double iSmart (2024) Hindi Movie'/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj86oyVRZdLiSC6635NMbzZxxcXG3XPzEfu9nl9wppQ5hd5V6UxdHwq7oK5s2iWkgzadpoiNmU7YS-IaZ29NtKAVEpJwQx_EKxCHgSPDpxZinJUYSqbWG41AUA3Ge8o6nDLKqg1EoRe4w9r5GU8dPYDnsOAVfAcpimCqSNyVD6DCL9lzsuseHuc_xK3nmI/s72-c/Double-iSmart-2024-Hindi-Language.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-4129916900270969641</id><published>2024-09-18T23:20:00.000-07:00</published><updated>2024-09-18T23:30:34.303-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Sports TV"/><title type='text'>India vs Bangladesh, IND vs Ban Test Series Live Cricket Score Free Streaming  Online</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhn6xxkzLIR4l63J87LJzXH9NYCqf1JLXB5-0hWb5aVBbPWUvxaIh8aOMnbZ6x1CsZ_CVYYBQxrefl8KZMIYQjuyuqCAbWSGWlij5rA-d0NNaeSNGmLTAR01oRkkDyEIyR0x1hD9_tXZd1OnLRlGWdsINQW2qyJuVn8QcQ_SRQ3rOGeKw-KNk2x78zqD8w/s1200/WhatsApp%20Image%202024-09-18%20at%207.34.46%20PM.jpeg&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;675&quot; data-original-width=&quot;1200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhn6xxkzLIR4l63J87LJzXH9NYCqf1JLXB5-0hWb5aVBbPWUvxaIh8aOMnbZ6x1CsZ_CVYYBQxrefl8KZMIYQjuyuqCAbWSGWlij5rA-d0NNaeSNGmLTAR01oRkkDyEIyR0x1hD9_tXZd1OnLRlGWdsINQW2qyJuVn8QcQ_SRQ3rOGeKw-KNk2x78zqD8w/s600/WhatsApp%20Image%202024-09-18%20at%207.34.46%20PM.jpeg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;


&lt;div class=&quot;container my-5 align-items-center rounded-3 border shadow-lg text-center&quot;&gt;
&lt;br /&gt;
&lt;h3&gt; Watch Online - ( 2024 ) &lt;/h3&gt;
&lt;script src=&quot;https://cdn.jsdelivr.net/npm/hls.js@latest&quot;&gt;&lt;/script&gt;

&lt;video autoplay controls height=&quot;380&quot; id=&quot;video&quot; width=&quot;100%&quot; poster=&quot;&quot; loading=&quot;lazy&quot; alt=&quot;Poster for Last Seen Alive&quot;&gt;&lt;/video&gt;
  
  
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...SspectrumLive TV does not stream any of the channels included in this website, All the streaming links are from third-party websites available freely on the internet. We&#39;re just giving way to stream and all content is the copyright of their owner...इस वेबसाइट में शामिल किसी भी चैनल को स्ट्रीम नहीं करता है, सभी स्ट्रीमिंग लिंक इंटरनेट पर मुफ्त में उपलब्ध तृतीय-पक्ष वेबसाइटों से हैं। हम सिर्फ स्ट्रीम करने का रास्ता दे रहे हैं और सभी सामग्री उनके मालिक का कॉपीराइट है....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;

  

&lt;script&gt;
  
  if(Hls.isSupported()) {
    var video = document.getElementById(&#39;video&#39;);
    var hls = new Hls();
    hls.loadSource(&#39;https://prod-ent-live-gm.jiocinema.com/hls/live/2100306/hd_akamai_androidmob_avc_eng_ipl_s2_m2190924/master.m3u8&#39;);
    hls.attachMedia(video);
    hls.on(Hls.Events.MANIFEST_PARSED,function() {
      video.play();
  });
 }
 // hls.js is not supported on platforms that do not have Media Source Extensions (MSE) enabled.
 // When the browser has built-in HLS support (check using `canPlayType`), we can provide an HLS manifest (i.e. .m3u8 URL) directly to the video element throught the `src` property.
 // This is using the built-in support of the plain video element, without using hls.js.
  else if (video.canPlayType(&#39;application/vnd.apple.mpegurl&#39;)) {
    video.src = &#39;https://prod-ent-live-gm.jiocinema.com/hls/live/2100306/hd_akamai_androidmob_avc_eng_ipl_s2_m2190924/master.m3u8&#39;;
    video.addEventListener(&#39;canplay&#39;,function() {
      video.play();
    });
  }
  
&lt;/script&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
  
  


&lt;link href=&quot;https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.1/font/bootstrap-icons.css&quot; rel=&quot;stylesheet&quot;&gt;&lt;/link&gt;
&lt;link crossorigin=&quot;anonymous&quot; href=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css&quot; integrity=&quot;sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3&quot; rel=&quot;stylesheet&quot;&gt;&lt;/link&gt;

&lt;script crossorigin=&quot;anonymous&quot; integrity=&quot;sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p&quot; src=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js&quot;&gt;&lt;/script&gt;
&lt;script crossorigin=&quot;anonymous&quot; integrity=&quot;sha384-7+zCNj/IqJ95wo16oMtfsKbZ9ccEh31eOz1HGyDuCQ6wgnyJNSYdrPa03rtR1zdB&quot; src=&quot;https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js&quot;&gt;&lt;/script&gt;
&lt;script crossorigin=&quot;anonymous&quot; integrity=&quot;sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13&quot; src=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js&quot;&gt;&lt;/script&gt;

&lt;center&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;a href=&quot;https://www.sspectrumlivetv.com&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;SspectrumLive TV&lt;/a&gt; by OnlyWomen&#39;s International&lt;/span&gt;&lt;/center&gt;

&lt;center&gt;&lt;p&gt;Copyright&lt;/p&gt;
SspectrumLive TV does not stream any of the channels included in this website, All the streaming links are from third-party websites available freely on the internet. We&#39;re just giving way to stream and all content is the copyright of their owner&lt;/center&gt;</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/4129916900270969641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/09/india-vs-bangladesh-ind-vs-ban-test_18.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/4129916900270969641'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/4129916900270969641'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/09/india-vs-bangladesh-ind-vs-ban-test_18.html' title='India vs Bangladesh, IND vs Ban Test Series Live Cricket Score Free Streaming  Online'/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhn6xxkzLIR4l63J87LJzXH9NYCqf1JLXB5-0hWb5aVBbPWUvxaIh8aOMnbZ6x1CsZ_CVYYBQxrefl8KZMIYQjuyuqCAbWSGWlij5rA-d0NNaeSNGmLTAR01oRkkDyEIyR0x1hD9_tXZd1OnLRlGWdsINQW2qyJuVn8QcQ_SRQ3rOGeKw-KNk2x78zqD8w/s72-c/WhatsApp%20Image%202024-09-18%20at%207.34.46%20PM.jpeg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-180657821560600694</id><published>2024-09-18T22:28:00.000-07:00</published><updated>2024-09-18T22:28:32.841-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Sports TV"/><title type='text'>India vs Bangladesh, IND vs Ban Test Series Live Cricket Score Free Streaming  Online</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPzkRQhwy1XJCz1AdnNNZjW1KaYTd3ZuPAduSwr7yKCniwnJWIBebsXm_cfZxJPj-fg548K-DurPftCqF4IIdM7MyxbWVDGy_LZjEOuS8v_1cFQVOKg29sI3_7lYQYXWeFKUX1cQiyTvKIH5C7iNrmPDawyESHXZskoucn3XLy1b3JBDyb5dMHjXlVhws/s1200/WhatsApp%20Image%202024-09-18%20at%207.34.46%20PM.jpeg&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;320&quot; data-original-height=&quot;675&quot; data-original-width=&quot;1200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPzkRQhwy1XJCz1AdnNNZjW1KaYTd3ZuPAduSwr7yKCniwnJWIBebsXm_cfZxJPj-fg548K-DurPftCqF4IIdM7MyxbWVDGy_LZjEOuS8v_1cFQVOKg29sI3_7lYQYXWeFKUX1cQiyTvKIH5C7iNrmPDawyESHXZskoucn3XLy1b3JBDyb5dMHjXlVhws/s320/WhatsApp%20Image%202024-09-18%20at%207.34.46%20PM.jpeg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;


  
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...SspectrumLive TV does not stream any of the channels included in this website, All the streaming links are from third-party websites available freely on the internet. We&#39;re just giving way to stream and all content is the copyright of their owner...इस वेबसाइट में शामिल किसी भी चैनल को स्ट्रीम नहीं करता है, सभी स्ट्रीमिंग लिंक इंटरनेट पर मुफ्त में उपलब्ध तृतीय-पक्ष वेबसाइटों से हैं। हम सिर्फ स्ट्रीम करने का रास्ता दे रहे हैं और सभी सामग्री उनके मालिक का कॉपीराइट है....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;

&lt;hr&gt;

&lt;h3 class=&quot;indIKd GW0XC cS4Vcb-pGL6qe-fwJd0c&quot;&gt;India vs Bangladesh, IND vs Ban Test Series Live Cricket Score Free Streaming  Online  Online &amp;amp; Telecast Channel in India: Watch Bharat Banaam Bangladesh Match  Live on Jio Cinema&lt;/h3&gt;

  &lt;div id=&quot;content-embed&quot; style=&quot;display: block;&quot;&gt;&lt;div id=&quot;player2&quot;&gt;&lt;div id=&quot;&quot; style=&quot;display: block;&quot;&gt;&lt;div class=&quot;movieplay&quot;&gt; &lt;iframe src=&quot;https://s5.24cwc.com/&quot; frameborder=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;NO&quot; width=&quot;100%&quot; height=&quot;500&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/div&gt;
  

&lt;script&gt;
  
  if(Hls.isSupported()) {
    var video = document.getElementById(&#39;video&#39;);
    var hls = new Hls();
    hls.loadSource(&#39;https://vod.cf.dmcdn.net/sec2(Afemd2r_V5ZESBIH3JmglPt8Bu2g09hyMePA9-7Doog1NpMboF8gdlZA2SzOnyswH6Dq3FrbubA5Xdr6GfjkgACmn-7nQZq0APVKTIdGcN357y3y02-l1HUwnPGpnE70mXakAYaUPMYHHALTSe6_uQ)/video/357/316/515613753_mp4_h264_aac_hq_10.m3u8&#39;);
    hls.attachMedia(video);
    hls.on(Hls.Events.MANIFEST_PARSED,function() {
      video.play();
  });
 }
 // hls.js is not supported on platforms that do not have Media Source Extensions (MSE) enabled.
 // When the browser has built-in HLS support (check using `canPlayType`), we can provide an HLS manifest (i.e. .m3u8 URL) directly to the video element throught the `src` property.
 // This is using the built-in support of the plain video element, without using hls.js.
  else if (video.canPlayType(&#39;application/vnd.apple.mpegurl&#39;)) {
    video.src = &#39;https://vod.cf.dmcdn.net/sec2(Afemd2r_V5ZESBIH3JmglPt8Bu2g09hyMePA9-7Doog1NpMboF8gdlZA2SzOnyswH6Dq3FrbubA5Xdr6GfjkgACmn-7nQZq0APVKTIdGcN357y3y02-l1HUwnPGpnE70mXakAYaUPMYHHALTSe6_uQ)/video/357/316/515613753_mp4_h264_aac_hq_10.m3u8&#39;;
    video.addEventListener(&#39;canplay&#39;,function() {
      video.play();
    });
  }
  
&lt;/script&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
  
  


&lt;link href=&quot;https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.1/font/bootstrap-icons.css&quot; rel=&quot;stylesheet&quot;&gt;&lt;/link&gt;
&lt;link crossorigin=&quot;anonymous&quot; href=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css&quot; integrity=&quot;sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3&quot; rel=&quot;stylesheet&quot;&gt;&lt;/link&gt;

&lt;script crossorigin=&quot;anonymous&quot; integrity=&quot;sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p&quot; src=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js&quot;&gt;&lt;/script&gt;
&lt;script crossorigin=&quot;anonymous&quot; integrity=&quot;sha384-7+zCNj/IqJ95wo16oMtfsKbZ9ccEh31eOz1HGyDuCQ6wgnyJNSYdrPa03rtR1zdB&quot; src=&quot;https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js&quot;&gt;&lt;/script&gt;
&lt;script crossorigin=&quot;anonymous&quot; integrity=&quot;sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13&quot; src=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js&quot;&gt;&lt;/script&gt;

&lt;center&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;a href=&quot;https://www.sspectrumlivetv.com&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;SspectrumLive TV&lt;/a&gt; by OnlyWomen&#39;s International&lt;/span&gt;&lt;/center&gt;

&lt;center&gt;&lt;p&gt;Copyright&lt;/p&gt;
SspectrumLive TV does not stream any of the channels included in this website, All the streaming links are from third-party websites available freely on the internet. We&#39;re just giving way to stream and all content is the copyright of their owner&lt;/center&gt;</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/180657821560600694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/09/india-vs-bangladesh-ind-vs-ban-test.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/180657821560600694'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/180657821560600694'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/09/india-vs-bangladesh-ind-vs-ban-test.html' title='India vs Bangladesh, IND vs Ban Test Series Live Cricket Score Free Streaming  Online'/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPzkRQhwy1XJCz1AdnNNZjW1KaYTd3ZuPAduSwr7yKCniwnJWIBebsXm_cfZxJPj-fg548K-DurPftCqF4IIdM7MyxbWVDGy_LZjEOuS8v_1cFQVOKg29sI3_7lYQYXWeFKUX1cQiyTvKIH5C7iNrmPDawyESHXZskoucn3XLy1b3JBDyb5dMHjXlVhws/s72-c/WhatsApp%20Image%202024-09-18%20at%207.34.46%20PM.jpeg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-1120408432707721983</id><published>2024-08-11T02:31:00.000-07:00</published><updated>2024-08-11T02:35:36.406-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Hollywood Movies"/><title type='text'>Watch Deadpool &amp; Wolverine (English) full movie online</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyu95_35DYv5DvlfDgo1rRaXFIGsXFNe_yQMCa9_xBwySuSLfXZcWcdGTWlCMoBSxp3b703td-FfrLPeE9_IjIfh_V4MLyB0OuHllSQBeEQXCBSnsC2cWi85-883uXeleEUT9O2HQYz0n9lBYbwX9Pz6GtXgEt5kWssrZWRokJ3RPvCWNvzDVOo4GNoD8/s281/deadpool-wolverine-2024.jpg&quot; style=&quot;clear: left; display: block; float: left; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;281&quot; data-original-width=&quot;190&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyu95_35DYv5DvlfDgo1rRaXFIGsXFNe_yQMCa9_xBwySuSLfXZcWcdGTWlCMoBSxp3b703td-FfrLPeE9_IjIfh_V4MLyB0OuHllSQBeEQXCBSnsC2cWi85-883uXeleEUT9O2HQYz0n9lBYbwX9Pz6GtXgEt5kWssrZWRokJ3RPvCWNvzDVOo4GNoD8/s320/deadpool-wolverine-2024.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;


  
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...SspectrumLive TV does not stream any of the channels included in this website, All the streaming links are from third-party websites available freely on the internet. We&#39;re just giving way to stream and all content is the copyright of their owner...इस वेबसाइट में शामिल किसी भी चैनल को स्ट्रीम नहीं करता है, सभी स्ट्रीमिंग लिंक इंटरनेट पर मुफ्त में उपलब्ध तृतीय-पक्ष वेबसाइटों से हैं। हम सिर्फ स्ट्रीम करने का रास्ता दे रहे हैं और सभी सामग्री उनके मालिक का कॉपीराइट है....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;

&lt;hr /&gt;
&lt;div class=&quot;detail-mod&quot;&gt;
&lt;h3&gt;Deadpool &amp;amp; Wolverine (English)&lt;/h3&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;mobile-view&quot;&gt;&lt;i class=&quot;icon-remove_red_eye&quot;&gt;&lt;/i&gt; 66541 views&lt;/div&gt; 
&lt;div class=&quot;desc&quot;&gt;  &lt;p&gt;Watch &lt;strong&gt;Deadpool &amp;amp; Wolverine (2024) English full movie&lt;/strong&gt; online, &lt;strong&gt;Deadpool &amp;amp; Wolverine (English) movie download&lt;/strong&gt; 720p HD quality 300MB and 1GB print On &lt;strong&gt;0Gomovies&lt;/strong&gt;. Wolverine is recovering from his injuries when he crosses paths with the loudmouth Deadpool. They team up to defeat a common enemy.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;mvic-info&quot;&gt;
&lt;div class=&quot;mvici-left&quot;&gt;
&lt;p&gt;&lt;strong&gt;Genres: &lt;/strong&gt;Hollywood&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Actors: &lt;/strong&gt;Emma Corrin, Hugh Jackman, Ryan Reynolds&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Director: &lt;/strong&gt;Shawn Levy&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Country: &lt;/strong&gt;United States&lt;br /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;mvici-right&quot;&gt;
&lt;p&gt;&lt;strong&gt;Duration:&lt;/strong&gt;  min&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; &lt;span class=&quot;quality&quot;&gt;HDCAM&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; 2024&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IMDb:&lt;/strong&gt; 7.2&lt;/p&gt;
&lt;p id=&quot;imdb&quot;&gt;&lt;strong&gt;IMDb ID:&lt;/strong&gt; &lt;span id=&quot;imdb_id&quot;&gt;&lt;/span&gt;&lt;/p&gt;    
&lt;/div&gt;
&lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
&lt;/div&gt;

  &lt;div id=&quot;content-embed&quot; style=&quot;display: block;&quot;&gt;&lt;div id=&quot;player2&quot;&gt;&lt;div id=&quot;&quot; style=&quot;display: block;&quot;&gt;&lt;div class=&quot;movieplay&quot;&gt; &lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;500&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;NO&quot; src=&quot;https://vidsrc.net/embed/movie/tt6263850&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/div&gt;
  

&lt;script&gt;
  
  if(Hls.isSupported()) {
    var video = document.getElementById(&#39;video&#39;);
    var hls = new Hls();
    hls.loadSource(&#39;https://vod.cf.dmcdn.net/sec2(Afemd2r_V5ZESBIH3JmglPt8Bu2g09hyMePA9-7Doog1NpMboF8gdlZA2SzOnyswH6Dq3FrbubA5Xdr6GfjkgACmn-7nQZq0APVKTIdGcN357y3y02-l1HUwnPGpnE70mXakAYaUPMYHHALTSe6_uQ)/video/357/316/515613753_mp4_h264_aac_hq_10.m3u8&#39;);
    hls.attachMedia(video);
    hls.on(Hls.Events.MANIFEST_PARSED,function() {
      video.play();
  });
 }
 // hls.js is not supported on platforms that do not have Media Source Extensions (MSE) enabled.
 // When the browser has built-in HLS support (check using `canPlayType`), we can provide an HLS manifest (i.e. .m3u8 URL) directly to the video element throught the `src` property.
 // This is using the built-in support of the plain video element, without using hls.js.
  else if (video.canPlayType(&#39;application/vnd.apple.mpegurl&#39;)) {
    video.src = &#39;https://vod.cf.dmcdn.net/sec2(Afemd2r_V5ZESBIH3JmglPt8Bu2g09hyMePA9-7Doog1NpMboF8gdlZA2SzOnyswH6Dq3FrbubA5Xdr6GfjkgACmn-7nQZq0APVKTIdGcN357y3y02-l1HUwnPGpnE70mXakAYaUPMYHHALTSe6_uQ)/video/357/316/515613753_mp4_h264_aac_hq_10.m3u8&#39;;
    video.addEventListener(&#39;canplay&#39;,function() {
      video.play();
    });
  }
  
&lt;/script&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
  
  


&lt;link href=&quot;https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.1/font/bootstrap-icons.css&quot; rel=&quot;stylesheet&quot;&gt;&lt;/link&gt;
&lt;link crossorigin=&quot;anonymous&quot; href=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css&quot; integrity=&quot;sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3&quot; rel=&quot;stylesheet&quot;&gt;&lt;/link&gt;

&lt;script crossorigin=&quot;anonymous&quot; integrity=&quot;sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p&quot; src=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js&quot;&gt;&lt;/script&gt;
&lt;script crossorigin=&quot;anonymous&quot; integrity=&quot;sha384-7+zCNj/IqJ95wo16oMtfsKbZ9ccEh31eOz1HGyDuCQ6wgnyJNSYdrPa03rtR1zdB&quot; src=&quot;https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js&quot;&gt;&lt;/script&gt;
&lt;script crossorigin=&quot;anonymous&quot; integrity=&quot;sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13&quot; src=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js&quot;&gt;&lt;/script&gt;

&lt;center&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;a href=&quot;https://www.sspectrumlivetv.com&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;SspectrumLive TV&lt;/a&gt; by OnlyWomen&#39;s International&lt;/span&gt;&lt;/center&gt;

&lt;center&gt;&lt;p&gt;Copyright&lt;/p&gt;
SspectrumLive TV does not stream any of the channels included in this website, All the streaming links are from third-party websites available freely on the internet. We&#39;re just giving way to stream and all content is the copyright of their owner&lt;/center&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/1120408432707721983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/08/watch-deadpool-wolverine-english-full.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/1120408432707721983'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/1120408432707721983'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/08/watch-deadpool-wolverine-english-full.html' title='Watch Deadpool &amp; Wolverine (English) full movie online'/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyu95_35DYv5DvlfDgo1rRaXFIGsXFNe_yQMCa9_xBwySuSLfXZcWcdGTWlCMoBSxp3b703td-FfrLPeE9_IjIfh_V4MLyB0OuHllSQBeEQXCBSnsC2cWi85-883uXeleEUT9O2HQYz0n9lBYbwX9Pz6GtXgEt5kWssrZWRokJ3RPvCWNvzDVOo4GNoD8/s72-c/deadpool-wolverine-2024.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-8350764362880547492</id><published>2024-08-10T21:43:00.000-07:00</published><updated>2024-08-11T02:09:49.146-07:00</updated><title type='text'></title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM5FzY62xe1O-dMaw3I1r8Rt9iL24_K8DP2rGzmZBGaS_ODDaith4pRz7z2ClvM3iojSafU0Hafi6qABQPkYC_oE0CWsGBEZb3dWOdagUAFfB6zHgP6PQ-yl8YrLH3tn5AltWOc_UR15uYpIPDayrgvG4b7i_9j44Wwqajpo0ZHw1s4F8PwfIu4XGQNp4/s1200/India-vs-Sri-Lanka-IND-vs-SL-2nd-ODI-Live-Score-Streaming-Online-And-Telecast-Channels.webp&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;320&quot; data-original-height=&quot;675&quot; data-original-width=&quot;1200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM5FzY62xe1O-dMaw3I1r8Rt9iL24_K8DP2rGzmZBGaS_ODDaith4pRz7z2ClvM3iojSafU0Hafi6qABQPkYC_oE0CWsGBEZb3dWOdagUAFfB6zHgP6PQ-yl8YrLH3tn5AltWOc_UR15uYpIPDayrgvG4b7i_9j44Wwqajpo0ZHw1s4F8PwfIu4XGQNp4/s320/India-vs-Sri-Lanka-IND-vs-SL-2nd-ODI-Live-Score-Streaming-Online-And-Telecast-Channels.webp&quot;/&gt;&lt;/a&gt;&lt;/div&gt;


  
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...SspectrumLive TV does not stream any of the channels included in this website, All the streaming links are from third-party websites available freely on the internet. We&#39;re just giving way to stream and all content is the copyright of their owner...इस वेबसाइट में शामिल किसी भी चैनल को स्ट्रीम नहीं करता है, सभी स्ट्रीमिंग लिंक इंटरनेट पर मुफ्त में उपलब्ध तृतीय-पक्ष वेबसाइटों से हैं। हम सिर्फ स्ट्रीम करने का रास्ता दे रहे हैं और सभी सामग्री उनके मालिक का कॉपीराइट है....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;

&lt;hr&gt;

&lt;h3 class=&quot;indIKd GW0XC cS4Vcb-pGL6qe-fwJd0c&quot;&gt;India vs Sri Lanka, IND vs SL 2nd ODI Live Cricket Score Free Streaming  Online &amp;amp; Telecast Channel in India: Watch Bharat Banaam Sri Lanka Match  Live on Sony Liv App, Jio&lt;/h3&gt;

  &lt;div id=&quot;content-embed&quot; style=&quot;display: block;&quot;&gt;&lt;div id=&quot;player2&quot;&gt;&lt;div id=&quot;&quot; style=&quot;display: block;&quot;&gt;&lt;div class=&quot;movieplay&quot;&gt; &lt;iframe src=&quot;https://vidsrc.net/embed/movie/tt6263850&quot; frameborder=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;NO&quot; width=&quot;100%&quot; height=&quot;500&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/div&gt;
  

&lt;script&gt;
  
  if(Hls.isSupported()) {
    var video = document.getElementById(&#39;video&#39;);
    var hls = new Hls();
    hls.loadSource(&#39;https://vod.cf.dmcdn.net/sec2(Afemd2r_V5ZESBIH3JmglPt8Bu2g09hyMePA9-7Doog1NpMboF8gdlZA2SzOnyswH6Dq3FrbubA5Xdr6GfjkgACmn-7nQZq0APVKTIdGcN357y3y02-l1HUwnPGpnE70mXakAYaUPMYHHALTSe6_uQ)/video/357/316/515613753_mp4_h264_aac_hq_10.m3u8&#39;);
    hls.attachMedia(video);
    hls.on(Hls.Events.MANIFEST_PARSED,function() {
      video.play();
  });
 }
 // hls.js is not supported on platforms that do not have Media Source Extensions (MSE) enabled.
 // When the browser has built-in HLS support (check using `canPlayType`), we can provide an HLS manifest (i.e. .m3u8 URL) directly to the video element throught the `src` property.
 // This is using the built-in support of the plain video element, without using hls.js.
  else if (video.canPlayType(&#39;application/vnd.apple.mpegurl&#39;)) {
    video.src = &#39;https://vod.cf.dmcdn.net/sec2(Afemd2r_V5ZESBIH3JmglPt8Bu2g09hyMePA9-7Doog1NpMboF8gdlZA2SzOnyswH6Dq3FrbubA5Xdr6GfjkgACmn-7nQZq0APVKTIdGcN357y3y02-l1HUwnPGpnE70mXakAYaUPMYHHALTSe6_uQ)/video/357/316/515613753_mp4_h264_aac_hq_10.m3u8&#39;;
    video.addEventListener(&#39;canplay&#39;,function() {
      video.play();
    });
  }
  
&lt;/script&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
  
  


&lt;link href=&quot;https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.1/font/bootstrap-icons.css&quot; rel=&quot;stylesheet&quot;&gt;&lt;/link&gt;
&lt;link crossorigin=&quot;anonymous&quot; href=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css&quot; integrity=&quot;sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3&quot; rel=&quot;stylesheet&quot;&gt;&lt;/link&gt;

&lt;script crossorigin=&quot;anonymous&quot; integrity=&quot;sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p&quot; src=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js&quot;&gt;&lt;/script&gt;
&lt;script crossorigin=&quot;anonymous&quot; integrity=&quot;sha384-7+zCNj/IqJ95wo16oMtfsKbZ9ccEh31eOz1HGyDuCQ6wgnyJNSYdrPa03rtR1zdB&quot; src=&quot;https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js&quot;&gt;&lt;/script&gt;
&lt;script crossorigin=&quot;anonymous&quot; integrity=&quot;sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13&quot; src=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js&quot;&gt;&lt;/script&gt;

&lt;center&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;a href=&quot;https://www.sspectrumlivetv.com&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;SspectrumLive TV&lt;/a&gt; by OnlyWomen&#39;s International&lt;/span&gt;&lt;/center&gt;

&lt;center&gt;&lt;p&gt;Copyright&lt;/p&gt;
SspectrumLive TV does not stream any of the channels included in this website, All the streaming links are from third-party websites available freely on the internet. We&#39;re just giving way to stream and all content is the copyright of their owner&lt;/center&gt;</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/8350764362880547492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/08/you-are-watching-sspectrumlive-tv.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/8350764362880547492'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/8350764362880547492'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/08/you-are-watching-sspectrumlive-tv.html' title=''/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM5FzY62xe1O-dMaw3I1r8Rt9iL24_K8DP2rGzmZBGaS_ODDaith4pRz7z2ClvM3iojSafU0Hafi6qABQPkYC_oE0CWsGBEZb3dWOdagUAFfB6zHgP6PQ-yl8YrLH3tn5AltWOc_UR15uYpIPDayrgvG4b7i_9j44Wwqajpo0ZHw1s4F8PwfIu4XGQNp4/s72-c/India-vs-Sri-Lanka-IND-vs-SL-2nd-ODI-Live-Score-Streaming-Online-And-Telecast-Channels.webp" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-7993934131554793382</id><published>2024-08-10T07:04:00.000-07:00</published><updated>2024-08-10T07:08:25.234-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bollywood Movie"/><category scheme="http://www.blogger.com/atom/ns#" term="Multi Language"/><title type='text'>Watch Phir Aayi Hasseen Dillruba (Tam + Tel + Hin + Eng)  (2024) Hindi full movie online</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQi7an9WRVuRUJjSM9wxcyg3CULPAMtE7ZiEqBWwxlJCl8duMPOXZgQhhI4z1WacBPfSBjGYQDnYEKIYD33wYO4vmiy9in0qMO3OTHcEiJgSxxFiEytVwOTZ3UAhvSGqUioCde_fh3pQPv5GTKxaoS2CbYcJ85iJT9Ji_pHkF6ase3RIf8Ps4JgOKs0DE/s220/Phir-Aayi-Hasseen-Dillruba-2024-Tam-Tel-Hin-Eng-Language-PNG.jpg&quot; style=&quot;clear: left; display: block; float: left; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;220&quot; data-original-width=&quot;165&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQi7an9WRVuRUJjSM9wxcyg3CULPAMtE7ZiEqBWwxlJCl8duMPOXZgQhhI4z1WacBPfSBjGYQDnYEKIYD33wYO4vmiy9in0qMO3OTHcEiJgSxxFiEytVwOTZ3UAhvSGqUioCde_fh3pQPv5GTKxaoS2CbYcJ85iJT9Ji_pHkF6ase3RIf8Ps4JgOKs0DE/s320/Phir-Aayi-Hasseen-Dillruba-2024-Tam-Tel-Hin-Eng-Language-PNG.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;style&gt;
.video-gallery-container {
  width: 100%;
  font-family: &quot;Roboto&quot;, sans-serif;
  background: #ffd166;
  padding: 8px 0 0 0;
  margin: 0 auto;
}
  
.video-gallery-container,
.video-gallery-container * {
  box-sizing: border-box;
}
 
.video-gallery-container h2.title {
  text-align: center;
  font-weight: 300;
  text-transform: uppercase;
  font-size: 34px;
  margin-bottom: 24px;
}

.video-gallery-container .video-gallery {
  display: 100%;
  background: #02151e;
  justify-content: center;
  padding: 16px;
  padding-top: 24px;
  gap: 24px;
  color: #fff;
}

.video-gallery h3.video-title {
  line-height: 1.6;
  font-weight: 700;
  font-size: 20px;
  width: 100%;
}

.video-gallery .thumbnail {
  height: 120px;
  cursor: pointer;
  width: 240px;
  
}

.video-gallery .video {
  position: relative;
}

.video-gallery .video:hover .play-icon {
  opacity: 1;
}

.video-gallery .play-icon {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  pointer-events: none;
  opacity: 0;
  transition: opacity 400ms ease;
}

.video-gallery .video .play-icon img {
  height: 50px;
  width: 50px;
}

.video-gallery .all-videos {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.video-gallery .responsive-iframe {
  position: relative;
  height: 0;
  overflow: hidden;
  padding-top: 56.25%;
  padding-bottom: 30px;
}

.video-gallery .responsive-iframe iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
  @media (max-width: 900px) {
  .video-gallery-container {
    width: 100%;
  }
}
  
@media (max-width: 700px) {
  .video-gallery-container .video-gallery {
    flex-direction: column;
  }

  .video-gallery .all-videos {
    display: grid;
    grid-template-columns: 1fr 1fr;
  }

  .video-gallery .thumbnail {
    height: unset;
    width: 100%;
  }
}

@media (max-width: 500px) {
  .video-gallery .all-videos {
    grid-template-columns: 1fr;
  }

  .video-gallery-container {
    max-width: 400px;
  }

  .video-gallery-container h2.title {
    font-size: 24px;
    font-weight: bold;
  }
}
 .BorderColorChangeElement {
  	animation: BorderColorChange 1s ease-out 0s infinite alternate none running;
}
@keyframes BorderColorChange{
  	0%  { border: 10px solid #ffc0cb;}
  	100%  { border: 10px solid #ff69b4;}
}
@keyframes rotateAnim {
    0% { transform: rotate(deg);}
    100% { transform:rotate(360deg);}
}
@keyframes scaler {
  0% {
    transform: scale(1);
  }
  100% {    transform: scale(1.5);
  }
}
.imgAnim691 {
  animation: rotateAnim 10s linear 0s infinite forwards running;
}
.btnAnim691 {
  animation: scaler 1s linear 0s infinite alternate none running;
}
.btnAnim691:hover{
  animation-play-state: paused;
}
.download-button-container {
  width: 90%;
  max-width: 600px;
  background: #eee;
  margin: 24px auto;
  padding: 16px;
  text-align: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  border-radius: 10px;
  box-shadow: inset 0 10px 15px -3px rgba(0, 0, 0, 0.1);
  display: flex;
  flex-direction: column;
  align-items: center;
}

.download-button-container .download-button {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 200px;
  justify-content: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  font-size: 16px;
  font-weight: 300;
  text-transform: uppercase;
  letter-spacing: 2px;
  background: #ef233c;
  border: none;
  padding: 8px;
  cursor: pointer;
  color: #fff;
}

.download-button-container .download-button.active .download-icon {
  animation: bounceAnim 700ms infinite alternate;
}

.download-button-container .download-icon {
  width: 16px;
}

.download-info h3 {
  color: #023047;
  margin-bottom: 12px;
}

.download-info {
  height: 0;
  overflow: hidden;
  transition: all 400ms ease;
}

.download-button-container .download-button.active + .download-info {
  height: 90px;
}

.download-info .download-link {
  font-size: 14px;
  text-transform: uppercase;
  font-weight: 300;
  color: #023047;
  letter-spacing: 4px;
  text-decoration: underline;
  text-underline-offset: 5px;
}

@keyframes bounceAnim {
  to {
    transform: translateY(4px);
  }
}
  

&lt;/style&gt;

                             
                                
&lt;div class=&quot;video-gallery-container&quot;&gt;
&lt;div class=&quot;detail-mod&quot;&gt;
&lt;div class=&quot;dm-thumb&quot;&gt;&lt;img alt=&quot;Phir Aayi Hasseen Dillruba (Tam + Tel + Hin + Eng)&quot; src=&quot;https://i.ytimg.com/vi/fszL1fdPQ-o/maxresdefault.jpg&quot; title=&quot;Phir Aayi Hasseen Dillruba (Tam + Tel + Hin + Eng)&quot; /&gt;&lt;/div&gt;
&lt;h3&gt;Phir Aayi Hasseen Dillruba (Tam + Tel + Hin + Eng)&lt;/h3&gt;
&lt;div class=&quot;desc&quot;&gt;  &lt;p&gt;Watch Phir Aayi Hasseen Dillruba (2024) Tam + Tel + Hin + Eng full movie online, Phir Aayi Hasseen Dillruba (Tam + Tel + Hin + Eng) movie download 720p HD quality 300MB and 1GB print On 0Gomovies. While evading the cops in Agra, Rani and Rishu scheme to run away together. But when their plans go awry, Rani asks a mild-mannered admirer for help.&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;mvic-info&quot;&gt;
&lt;div class=&quot;mvici-left&quot;&gt;
&lt;p&gt;&lt;strong&gt;Genres: &lt;/strong&gt;Multi Language&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Actors: &lt;/strong&gt;Sunny Kaushal, Taapsee Pannu, Vikrant Massey&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Director: &lt;/strong&gt;Jayprad Desai&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Country: &lt;/strong&gt;India&lt;br /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class=&quot;mvici-right&quot;&gt;
&lt;p&gt;&lt;strong&gt;Duration:&lt;/strong&gt;  min&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; &lt;span class=&quot;quality&quot;&gt;HD&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; 2024&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IMDb:&lt;/strong&gt; 6.8&lt;/p&gt;
&lt;p id=&quot;imdb&quot;&gt;&lt;strong&gt;IMDb ID:&lt;/strong&gt; &lt;span id=&quot;imdb_id&quot;&gt;&lt;/span&gt;&lt;/p&gt;    
&lt;/div&gt;
&lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
  
  &lt;div class=&quot;pa-main&quot;&gt;
  &lt;div class=&quot;widget-content&quot;&gt;
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...Subscribe our channel for Upcomiiing New movies notification....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;
&lt;/div&gt;
    
    &lt;center&gt; &lt;h3&gt;Phir Aayi Hasseen Dillruba (Tam + Tel + Hin + Eng)&lt;/h3&gt;&lt;/center&gt;
    
    &lt;div class=&quot;container2&quot;&gt;
      
        &lt;div class=&quot;box box1&quot;&gt;&lt;/div&gt;
	
          &lt;div class=&quot;box box2&quot;&gt;
          
         &lt;div class=&quot;video-container&quot;&gt;
          
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;https://cdn.asumanaksoy.com/video/5571df479aa024d28e17f555babd1fcb&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;/div&gt;                
    

    
    &lt;div class=&quot;download-button-container&quot;&gt;
      &lt;button class=&quot;download-button&quot;&gt;Download&lt;span class=&quot;download-icon&quot;&gt;
          &lt;svg class=&quot;h-6 w-6&quot; fill=&quot;none&quot; stroke-width=&quot;2&quot; stroke=&quot;currentColor&quot; viewbox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
            &lt;path d=&quot;M19 14l-7 7m0 0l-7-7m7 7V3&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
          &lt;/path&gt;&lt;/svg&gt;
        &lt;/span&gt;
      &lt;/button&gt;
    

      &lt;div class=&quot;download-info&quot;&gt;
        &lt;h3&gt;Your download link will appear in 5 seconds.&lt;/h3&gt;
      &lt;/div&gt;
    &lt;/div&gt;
 






&lt;script&gt;
const downloadButton = document.querySelector(
  &quot;.download-button-container .download-button&quot;
);
const downloadHeading = document.querySelector(&quot;.download-info h3&quot;);
const downloadInfo = document.querySelector(&quot;.download-info&quot;);

let downloadTimer;
let remainingTime = 5;
let linkDisplayed = false;

const showDownloadLink = () =&gt; {
  if (!linkDisplayed) {
    const downloadLink = document.createElement(&quot;a&quot;);
    downloadLink.href = &quot;https://sspectrumlivetv.blogspot.com/p/your-download-link-here-below_10.html&quot;;
    downloadLink.innerHTML = &quot;Click Here&quot;;
    downloadLink.classList.add(&quot;download-link&quot;);
    downloadInfo.appendChild(downloadLink);
  }
  linkDisplayed = true;
};

downloadButton.addEventListener(&quot;click&quot;, () =&gt; {
  downloadButton.classList.add(&quot;active&quot;);

  downloadTimer = setInterval(() =&gt; {
    remainingTime--;

    if (remainingTime &lt;= 0) {
      clearInterval(downloadTimer);
      showDownloadLink();
      downloadHeading.innerHTML = &quot;Here is the download link.&quot;;
    } else {
      downloadHeading.innerHTML = `Your download link will appear in ${remainingTime} seconds.`;
    }
  }, 1000);
});
&lt;/script&gt;

  &lt;p&gt;Or Direct Download From Above link &lt;/p&gt;


      
  


  

  

  
  &lt;!--/main--&gt;
&lt;center&gt;&lt;!--info line, ad unit name: Footer--&gt;

&lt;script async=&quot;&quot; src=&quot;https://tags.h12-media.com/load2.js&quot;&gt;&lt;/script&gt;&lt;/center&gt;



            &lt;div id=&quot;copyright&quot;&gt;
                &lt;p&gt;&lt;a href=&quot;&quot; id=&quot;logo-footer&quot;&gt;&lt;/a&gt;&lt;/p&gt;
                &lt;p&gt;Copyright © &lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;. All Rights
                    Reserved 2023&lt;/p&gt;
            &lt;/div&gt;
  
&lt;b&gt;We do not host any files on it’s servers. All files or contents hosted on third party websites.
We do not accept responsibility for contents hosted on third party websites.
We just index those links which are already available in internet&lt;/b&gt;


&lt;/div&gt;&lt;/div&gt;

&lt;style&gt;

.codehap {
      display: flex;
      flex-wrap: wrap;
    }

    .codehapBox, .codehap_box {
      box-sizing: border-box;
      width: 100%;
      padding: 10px;
      border: 1px solid #ccc;
    }

    @media (min-width: 600px) {
      .codehapBox {
        width: 50%;
      }
    }
    
.video-container {
    position: relative;
    padding-bottom: 56.25%;
    padding-top: 0px;
    height: 0%;
    overflow: hidden;
}

.video-container iframe {
    position: absolute;
    top:0;
    left: 0%;
    width: 100%;
    height: 100%;
}
.codehapContent{
 
margin:auto;


}

&lt;/style&gt;


	

 
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/7993934131554793382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/08/watch-phir-aayi-hasseen-dillruba-tam.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/7993934131554793382'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/7993934131554793382'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/08/watch-phir-aayi-hasseen-dillruba-tam.html' title='Watch Phir Aayi Hasseen Dillruba (Tam + Tel + Hin + Eng)  (2024) Hindi full movie online'/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQi7an9WRVuRUJjSM9wxcyg3CULPAMtE7ZiEqBWwxlJCl8duMPOXZgQhhI4z1WacBPfSBjGYQDnYEKIYD33wYO4vmiy9in0qMO3OTHcEiJgSxxFiEytVwOTZ3UAhvSGqUioCde_fh3pQPv5GTKxaoS2CbYcJ85iJT9Ji_pHkF6ase3RIf8Ps4JgOKs0DE/s72-c/Phir-Aayi-Hasseen-Dillruba-2024-Tam-Tel-Hin-Eng-Language-PNG.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-3663288980271631299</id><published>2024-08-04T04:14:00.000-07:00</published><updated>2024-11-23T21:49:30.397-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Sports TV"/><title type='text'>India vs Sri Lanka, IND vs SL 2nd ODI Live Cricket Score Free Streaming  Online</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM5FzY62xe1O-dMaw3I1r8Rt9iL24_K8DP2rGzmZBGaS_ODDaith4pRz7z2ClvM3iojSafU0Hafi6qABQPkYC_oE0CWsGBEZb3dWOdagUAFfB6zHgP6PQ-yl8YrLH3tn5AltWOc_UR15uYpIPDayrgvG4b7i_9j44Wwqajpo0ZHw1s4F8PwfIu4XGQNp4/s1200/India-vs-Sri-Lanka-IND-vs-SL-2nd-ODI-Live-Score-Streaming-Online-And-Telecast-Channels.webp&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;320&quot; data-original-height=&quot;675&quot; data-original-width=&quot;1200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM5FzY62xe1O-dMaw3I1r8Rt9iL24_K8DP2rGzmZBGaS_ODDaith4pRz7z2ClvM3iojSafU0Hafi6qABQPkYC_oE0CWsGBEZb3dWOdagUAFfB6zHgP6PQ-yl8YrLH3tn5AltWOc_UR15uYpIPDayrgvG4b7i_9j44Wwqajpo0ZHw1s4F8PwfIu4XGQNp4/s320/India-vs-Sri-Lanka-IND-vs-SL-2nd-ODI-Live-Score-Streaming-Online-And-Telecast-Channels.webp&quot;/&gt;&lt;/a&gt;&lt;/div&gt;


  
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...SspectrumLive TV does not stream any of the channels included in this website, All the streaming links are from third-party websites available freely on the internet. We&#39;re just giving way to stream and all content is the copyright of their owner...इस वेबसाइट में शामिल किसी भी चैनल को स्ट्रीम नहीं करता है, सभी स्ट्रीमिंग लिंक इंटरनेट पर मुफ्त में उपलब्ध तृतीय-पक्ष वेबसाइटों से हैं। हम सिर्फ स्ट्रीम करने का रास्ता दे रहे हैं और सभी सामग्री उनके मालिक का कॉपीराइट है....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;

&lt;hr&gt;

&lt;h3 class=&quot;indIKd GW0XC cS4Vcb-pGL6qe-fwJd0c&quot;&gt;India vs Sri Lanka, IND vs SL 2nd ODI Live Cricket Score Free Streaming  Online &amp;amp; Telecast Channel in India: Watch Bharat Banaam Sri Lanka Match  Live on Sony Liv App, Jio&lt;/h3&gt;

  &lt;div id=&quot;content-embed&quot; style=&quot;display: block;&quot;&gt;&lt;div id=&quot;player2&quot;&gt;&lt;div id=&quot;&quot; style=&quot;display: block;&quot;&gt;&lt;div class=&quot;movieplay&quot;&gt; &lt;iframe src=&quot;https://s8.24cwc.com/&quot; frameborder=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;NO&quot; width=&quot;100%&quot; height=&quot;500&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/div&gt;
  

&lt;script&gt;
  
  if(Hls.isSupported()) {
    var video = document.getElementById(&#39;video&#39;);
    var hls = new Hls();
    hls.loadSource(&#39;https://vod.cf.dmcdn.net/sec2(Afemd2r_V5ZESBIH3JmglPt8Bu2g09hyMePA9-7Doog1NpMboF8gdlZA2SzOnyswH6Dq3FrbubA5Xdr6GfjkgACmn-7nQZq0APVKTIdGcN357y3y02-l1HUwnPGpnE70mXakAYaUPMYHHALTSe6_uQ)/video/357/316/515613753_mp4_h264_aac_hq_10.m3u8&#39;);
    hls.attachMedia(video);
    hls.on(Hls.Events.MANIFEST_PARSED,function() {
      video.play();
  });
 }
 // hls.js is not supported on platforms that do not have Media Source Extensions (MSE) enabled.
 // When the browser has built-in HLS support (check using `canPlayType`), we can provide an HLS manifest (i.e. .m3u8 URL) directly to the video element throught the `src` property.
 // This is using the built-in support of the plain video element, without using hls.js.
  else if (video.canPlayType(&#39;application/vnd.apple.mpegurl&#39;)) {
    video.src = &#39;https://vod.cf.dmcdn.net/sec2(Afemd2r_V5ZESBIH3JmglPt8Bu2g09hyMePA9-7Doog1NpMboF8gdlZA2SzOnyswH6Dq3FrbubA5Xdr6GfjkgACmn-7nQZq0APVKTIdGcN357y3y02-l1HUwnPGpnE70mXakAYaUPMYHHALTSe6_uQ)/video/357/316/515613753_mp4_h264_aac_hq_10.m3u8&#39;;
    video.addEventListener(&#39;canplay&#39;,function() {
      video.play();
    });
  }
  
&lt;/script&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
  
  


&lt;link href=&quot;https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.1/font/bootstrap-icons.css&quot; rel=&quot;stylesheet&quot;&gt;&lt;/link&gt;
&lt;link crossorigin=&quot;anonymous&quot; href=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css&quot; integrity=&quot;sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3&quot; rel=&quot;stylesheet&quot;&gt;&lt;/link&gt;

&lt;script crossorigin=&quot;anonymous&quot; integrity=&quot;sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p&quot; src=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js&quot;&gt;&lt;/script&gt;
&lt;script crossorigin=&quot;anonymous&quot; integrity=&quot;sha384-7+zCNj/IqJ95wo16oMtfsKbZ9ccEh31eOz1HGyDuCQ6wgnyJNSYdrPa03rtR1zdB&quot; src=&quot;https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js&quot;&gt;&lt;/script&gt;
&lt;script crossorigin=&quot;anonymous&quot; integrity=&quot;sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13&quot; src=&quot;https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js&quot;&gt;&lt;/script&gt;

&lt;center&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;a href=&quot;https://www.sspectrumlivetv.com&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;SspectrumLive TV&lt;/a&gt; by OnlyWomen&#39;s International&lt;/span&gt;&lt;/center&gt;

&lt;center&gt;&lt;p&gt;Copyright&lt;/p&gt;
SspectrumLive TV does not stream any of the channels included in this website, All the streaming links are from third-party websites available freely on the internet. We&#39;re just giving way to stream and all content is the copyright of their owner&lt;/center&gt;</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/3663288980271631299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/08/tata-ipl-2024-streaming-watch-online.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/3663288980271631299'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/3663288980271631299'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/08/tata-ipl-2024-streaming-watch-online.html' title='India vs Sri Lanka, IND vs SL 2nd ODI Live Cricket Score Free Streaming  Online'/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM5FzY62xe1O-dMaw3I1r8Rt9iL24_K8DP2rGzmZBGaS_ODDaith4pRz7z2ClvM3iojSafU0Hafi6qABQPkYC_oE0CWsGBEZb3dWOdagUAFfB6zHgP6PQ-yl8YrLH3tn5AltWOc_UR15uYpIPDayrgvG4b7i_9j44Wwqajpo0ZHw1s4F8PwfIu4XGQNp4/s72-c/India-vs-Sri-Lanka-IND-vs-SL-2nd-ODI-Live-Score-Streaming-Online-And-Telecast-Channels.webp" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-1149804301059523380</id><published>2024-08-04T01:17:00.000-07:00</published><updated>2024-08-10T21:17:48.374-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bollywood Movie"/><title type='text'>Auron Mein Kahan Dum Tha (2024) Hindi</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTTe2Ks04Ia9Biu6o6tqLYkiw2ESEdkZ9L0AjaWPS_2RrJx5A1Az1eDG_PSUPn3I3pkEr7mrsnpvEzaFLZRsU5PWwkFT3ZLvT9dUp538_K7INnplNmGV3hG-qScKfR6-8ab5rtvpvrmbHdhNMHH5bLvMo962gnp5geMf8S4gknevEch-l_rj5D1PEi91M/s750/photo_2024-08-01_23-16-01.jpg&quot; style=&quot;clear: left; display: block; float: left; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;750&quot; data-original-width=&quot;500&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTTe2Ks04Ia9Biu6o6tqLYkiw2ESEdkZ9L0AjaWPS_2RrJx5A1Az1eDG_PSUPn3I3pkEr7mrsnpvEzaFLZRsU5PWwkFT3ZLvT9dUp538_K7INnplNmGV3hG-qScKfR6-8ab5rtvpvrmbHdhNMHH5bLvMo962gnp5geMf8S4gknevEch-l_rj5D1PEi91M/s320/photo_2024-08-01_23-16-01.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;style&gt;
.video-gallery-container {
  width: 100%;
  font-family: &quot;Roboto&quot;, sans-serif;
  background: #ffd166;
  padding: 8px 0 0 0;
  margin: 0 auto;
}
  
.video-gallery-container,
.video-gallery-container * {
  box-sizing: border-box;
}
 
.video-gallery-container h2.title {
  text-align: center;
  font-weight: 300;
  text-transform: uppercase;
  font-size: 34px;
  margin-bottom: 24px;
}

.video-gallery-container .video-gallery {
  display: 100%;
  background: #02151e;
  justify-content: center;
  padding: 16px;
  padding-top: 24px;
  gap: 24px;
  color: #fff;
}

.video-gallery h3.video-title {
  line-height: 1.6;
  font-weight: 700;
  font-size: 20px;
  width: 100%;
}

.video-gallery .thumbnail {
  height: 120px;
  cursor: pointer;
  width: 240px;
  
}

.video-gallery .video {
  position: relative;
}

.video-gallery .video:hover .play-icon {
  opacity: 1;
}

.video-gallery .play-icon {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  pointer-events: none;
  opacity: 0;
  transition: opacity 400ms ease;
}

.video-gallery .video .play-icon img {
  height: 50px;
  width: 50px;
}

.video-gallery .all-videos {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.video-gallery .responsive-iframe {
  position: relative;
  height: 0;
  overflow: hidden;
  padding-top: 56.25%;
  padding-bottom: 30px;
}

.video-gallery .responsive-iframe iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
  @media (max-width: 900px) {
  .video-gallery-container {
    width: 100%;
  }
}
  
@media (max-width: 700px) {
  .video-gallery-container .video-gallery {
    flex-direction: column;
  }

  .video-gallery .all-videos {
    display: grid;
    grid-template-columns: 1fr 1fr;
  }

  .video-gallery .thumbnail {
    height: unset;
    width: 100%;
  }
}

@media (max-width: 500px) {
  .video-gallery .all-videos {
    grid-template-columns: 1fr;
  }

  .video-gallery-container {
    max-width: 400px;
  }

  .video-gallery-container h2.title {
    font-size: 24px;
    font-weight: bold;
  }
}
 .BorderColorChangeElement {
  	animation: BorderColorChange 1s ease-out 0s infinite alternate none running;
}
@keyframes BorderColorChange{
  	0%  { border: 10px solid #ffc0cb;}
  	100%  { border: 10px solid #ff69b4;}
}
@keyframes rotateAnim {
    0% { transform: rotate(deg);}
    100% { transform:rotate(360deg);}
}
@keyframes scaler {
  0% {
    transform: scale(1);
  }
  100% {    transform: scale(1.5);
  }
}
.imgAnim691 {
  animation: rotateAnim 10s linear 0s infinite forwards running;
}
.btnAnim691 {
  animation: scaler 1s linear 0s infinite alternate none running;
}
.btnAnim691:hover{
  animation-play-state: paused;
}
.download-button-container {
  width: 90%;
  max-width: 600px;
  background: #eee;
  margin: 24px auto;
  padding: 16px;
  text-align: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  border-radius: 10px;
  box-shadow: inset 0 10px 15px -3px rgba(0, 0, 0, 0.1);
  display: flex;
  flex-direction: column;
  align-items: center;
}

.download-button-container .download-button {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 200px;
  justify-content: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  font-size: 16px;
  font-weight: 300;
  text-transform: uppercase;
  letter-spacing: 2px;
  background: #ef233c;
  border: none;
  padding: 8px;
  cursor: pointer;
  color: #fff;
}

.download-button-container .download-button.active .download-icon {
  animation: bounceAnim 700ms infinite alternate;
}

.download-button-container .download-icon {
  width: 16px;
}

.download-info h3 {
  color: #023047;
  margin-bottom: 12px;
}

.download-info {
  height: 0;
  overflow: hidden;
  transition: all 400ms ease;
}

.download-button-container .download-button.active + .download-info {
  height: 90px;
}

.download-info .download-link {
  font-size: 14px;
  text-transform: uppercase;
  font-weight: 300;
  color: #023047;
  letter-spacing: 4px;
  text-decoration: underline;
  text-underline-offset: 5px;
}

@keyframes bounceAnim {
  to {
    transform: translateY(4px);
  }
}
  

&lt;/style&gt;

                             
                                
&lt;div class=&quot;video-gallery-container&quot;&gt;
&lt;div class=&quot;detail-mod&quot;&gt;
                                &lt;div class=&quot;dm-thumb&quot;&gt;&lt;img alt=&quot;Auron Mein Kahan Dum Tha (Hindi)&quot; src=&quot;https://i.ytimg.com/vi/_gmCCOo6rqM/maxresdefault.jpg&quot; title=&quot;Auron Mein Kahan Dum Tha (Hindi)&quot; /&gt;&lt;/div&gt;
                                &lt;h3&gt;Auron Mein Kahan Dum Tha (Hindi)&lt;/h3&gt;
                                				

                                &lt;div class=&quot;mobile-view&quot;&gt;&lt;i class=&quot;icon-remove_red_eye&quot;&gt;&lt;/i&gt; 2623 views&lt;/div&gt; 
                       

                            &lt;div class=&quot;desc&quot;&gt;  &lt;p&gt;Watch Auron Mein Kahan Dum Tha (2024) Hindi full movie online, Auron Mein Kahan Dum Tha (Hindi) movie download 720p HD quality 300MB and 1GB print On 0Gomovies. After 20 years in prison, a man reunites with his lost love and the truth behind his crimes is revealed.&lt;/p&gt;
														&lt;/div&gt;
                            &lt;div class=&quot;mvic-info&quot;&gt;
                                &lt;div class=&quot;mvici-left&quot;&gt;
                                    &lt;p&gt;&lt;strong&gt;Genres: &lt;/strong&gt;Watch Hindi Movies&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Actors: &lt;/strong&gt;Ajay Devgn, Jimmy Shergill, Tabu&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Director: &lt;/strong&gt;Neeraj Pandey&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Country: &lt;/strong&gt;India&lt;br /&gt;&lt;/p&gt;
                                 &lt;/div&gt;
                                &lt;div class=&quot;mvici-right&quot;&gt;
									                                    &lt;p&gt;&lt;strong&gt;Duration:&lt;/strong&gt;  min&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; &lt;span class=&quot;quality&quot;&gt;HDTS&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; 2024&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;IMDb:&lt;/strong&gt; 6.5&lt;/p&gt;

                                                              &lt;p id=&quot;imdb&quot;&gt;&lt;strong&gt;IMDb ID:&lt;/strong&gt; &lt;span id=&quot;imdb_id&quot;&gt;&lt;/span&gt;&lt;/p&gt;    
                                                          &lt;/div&gt;
                                &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;/div&gt;
                            
  
  &lt;div class=&quot;pa-main&quot;&gt;
  &lt;div class=&quot;widget-content&quot;&gt;
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...Subscribe our channel for Upcomiiing New movies notification....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;
&lt;/div&gt;
    
    &lt;center&gt; &lt;h3&gt;Auron Mein Kahan Dum Tha (Hindi)&lt;/h3&gt;&lt;/center&gt;
    
    &lt;div class=&quot;container2&quot;&gt;
      
        &lt;div class=&quot;box box1&quot;&gt;&lt;/div&gt;
	
          &lt;div class=&quot;box box2&quot;&gt;
          
         &lt;div class=&quot;video-container&quot;&gt;
          
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;https://new3.filepress.boats/video/66acad2c495fd6a7281a4396&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;/div&gt;

    
    &lt;div class=&quot;download-button-container&quot;&gt;
      &lt;button class=&quot;download-button&quot;&gt;Download&lt;span class=&quot;download-icon&quot;&gt;
          &lt;svg class=&quot;h-6 w-6&quot; fill=&quot;none&quot; stroke-width=&quot;2&quot; stroke=&quot;currentColor&quot; viewbox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
            &lt;path d=&quot;M19 14l-7 7m0 0l-7-7m7 7V3&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
          &lt;/path&gt;&lt;/svg&gt;
        &lt;/span&gt;
      &lt;/button&gt;
    

      &lt;div class=&quot;download-info&quot;&gt;
        &lt;h3&gt;Your download link will appear in 5 seconds.&lt;/h3&gt;
      &lt;/div&gt;
    &lt;/div&gt;
 






&lt;script&gt;
const downloadButton = document.querySelector(
  &quot;.download-button-container .download-button&quot;
);
const downloadHeading = document.querySelector(&quot;.download-info h3&quot;);
const downloadInfo = document.querySelector(&quot;.download-info&quot;);

let downloadTimer;
let remainingTime = 5;
let linkDisplayed = false;

const showDownloadLink = () =&gt; {
  if (!linkDisplayed) {
    const downloadLink = document.createElement(&quot;a&quot;);
    downloadLink.href = &quot;https://sspectrumlivetv.blogspot.com/p/your-download-link-here-below_4.html&quot;;
    downloadLink.innerHTML = &quot;Click Here&quot;;
    downloadLink.classList.add(&quot;download-link&quot;);
    downloadInfo.appendChild(downloadLink);
  }
  linkDisplayed = true;
};

downloadButton.addEventListener(&quot;click&quot;, () =&gt; {
  downloadButton.classList.add(&quot;active&quot;);

  downloadTimer = setInterval(() =&gt; {
    remainingTime--;

    if (remainingTime &lt;= 0) {
      clearInterval(downloadTimer);
      showDownloadLink();
      downloadHeading.innerHTML = &quot;Here is the download link.&quot;;
    } else {
      downloadHeading.innerHTML = `Your download link will appear in ${remainingTime} seconds.`;
    }
  }, 1000);
});
&lt;/script&gt;

  &lt;p&gt;Or Direct Download From Above link &lt;/p&gt;


      
  


  

  

  
  &lt;!--/main--&gt;
&lt;center&gt;&lt;!--info line, ad unit name: Footer--&gt;

&lt;script async=&quot;&quot; src=&quot;https://tags.h12-media.com/load2.js&quot;&gt;&lt;/script&gt;&lt;/center&gt;



            &lt;div id=&quot;copyright&quot;&gt;
                &lt;p&gt;&lt;a href=&quot;&quot; id=&quot;logo-footer&quot;&gt;&lt;/a&gt;&lt;/p&gt;
                &lt;p&gt;Copyright © &lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;. All Rights
                    Reserved 2023&lt;/p&gt;
            &lt;/div&gt;
  
&lt;b&gt;We do not host any files on it’s servers. All files or contents hosted on third party websites.
We do not accept responsibility for contents hosted on third party websites.
We just index those links which are already available in internet&lt;/b&gt;


&lt;/div&gt;&lt;/div&gt;

&lt;style&gt;

.codehap {
      display: flex;
      flex-wrap: wrap;
    }

    .codehapBox, .codehap_box {
      box-sizing: border-box;
      width: 100%;
      padding: 10px;
      border: 1px solid #ccc;
    }

    @media (min-width: 600px) {
      .codehapBox {
        width: 50%;
      }
    }
    
.video-container {
    position: relative;
    padding-bottom: 56.25%;
    padding-top: 0px;
    height: 0%;
    overflow: hidden;
}

.video-container iframe {
    position: absolute;
    top:0;
    left: 0%;
    width: 100%;
    height: 100%;
}
.codehapContent{
 
margin:auto;


}

&lt;/style&gt;


	

 
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/1149804301059523380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/08/auron-mein-kahan-dum-tha-2024-hindi.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/1149804301059523380'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/1149804301059523380'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/08/auron-mein-kahan-dum-tha-2024-hindi.html' title='Auron Mein Kahan Dum Tha (2024) Hindi'/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTTe2Ks04Ia9Biu6o6tqLYkiw2ESEdkZ9L0AjaWPS_2RrJx5A1Az1eDG_PSUPn3I3pkEr7mrsnpvEzaFLZRsU5PWwkFT3ZLvT9dUp538_K7INnplNmGV3hG-qScKfR6-8ab5rtvpvrmbHdhNMHH5bLvMo962gnp5geMf8S4gknevEch-l_rj5D1PEi91M/s72-c/photo_2024-08-01_23-16-01.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-6922903225994824981</id><published>2024-07-13T03:59:00.000-07:00</published><updated>2024-07-25T10:43:27.250-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bollywood Movie"/><title type='text'>Watch Sarfira  (2024) Hindi full movie online</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0_SNt6Oa-4Q4FSC5SGa3u6XXulz3vuYUSQZQsc4tWN99zfQ8N3Po_1sEapqLqQfHKPQDSBKIRKVRnKGarKijU8-6W30rlXrcVng-wbOJE1Xe2cksvFF0ZNxDYlmpErgLy5JD1qlRFZazKJVE3cxIHL1sM_xSQjOqYN5oSbbtOM-ZL6349cWDrs9f6X5k/s220/Sarfira-2024-Hindi-Language.png&quot; style=&quot;clear: left; display: block; float: left; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;220&quot; data-original-width=&quot;165&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0_SNt6Oa-4Q4FSC5SGa3u6XXulz3vuYUSQZQsc4tWN99zfQ8N3Po_1sEapqLqQfHKPQDSBKIRKVRnKGarKijU8-6W30rlXrcVng-wbOJE1Xe2cksvFF0ZNxDYlmpErgLy5JD1qlRFZazKJVE3cxIHL1sM_xSQjOqYN5oSbbtOM-ZL6349cWDrs9f6X5k/s320/Sarfira-2024-Hindi-Language.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;style&gt;
.video-gallery-container {
  width: 100%;
  font-family: &quot;Roboto&quot;, sans-serif;
  background: #ffd166;
  padding: 8px 0 0 0;
  margin: 0 auto;
}
  
.video-gallery-container,
.video-gallery-container * {
  box-sizing: border-box;
}
 
.video-gallery-container h2.title {
  text-align: center;
  font-weight: 300;
  text-transform: uppercase;
  font-size: 34px;
  margin-bottom: 24px;
}

.video-gallery-container .video-gallery {
  display: 100%;
  background: #02151e;
  justify-content: center;
  padding: 16px;
  padding-top: 24px;
  gap: 24px;
  color: #fff;
}

.video-gallery h3.video-title {
  line-height: 1.6;
  font-weight: 700;
  font-size: 20px;
  width: 100%;
}

.video-gallery .thumbnail {
  height: 120px;
  cursor: pointer;
  width: 240px;
  
}

.video-gallery .video {
  position: relative;
}

.video-gallery .video:hover .play-icon {
  opacity: 1;
}

.video-gallery .play-icon {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  pointer-events: none;
  opacity: 0;
  transition: opacity 400ms ease;
}

.video-gallery .video .play-icon img {
  height: 50px;
  width: 50px;
}

.video-gallery .all-videos {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.video-gallery .responsive-iframe {
  position: relative;
  height: 0;
  overflow: hidden;
  padding-top: 56.25%;
  padding-bottom: 30px;
}

.video-gallery .responsive-iframe iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
  @media (max-width: 900px) {
  .video-gallery-container {
    width: 100%;
  }
}
  
@media (max-width: 700px) {
  .video-gallery-container .video-gallery {
    flex-direction: column;
  }

  .video-gallery .all-videos {
    display: grid;
    grid-template-columns: 1fr 1fr;
  }

  .video-gallery .thumbnail {
    height: unset;
    width: 100%;
  }
}

@media (max-width: 500px) {
  .video-gallery .all-videos {
    grid-template-columns: 1fr;
  }

  .video-gallery-container {
    max-width: 400px;
  }

  .video-gallery-container h2.title {
    font-size: 24px;
    font-weight: bold;
  }
}
 .BorderColorChangeElement {
  	animation: BorderColorChange 1s ease-out 0s infinite alternate none running;
}
@keyframes BorderColorChange{
  	0%  { border: 10px solid #ffc0cb;}
  	100%  { border: 10px solid #ff69b4;}
}
@keyframes rotateAnim {
    0% { transform: rotate(deg);}
    100% { transform:rotate(360deg);}
}
@keyframes scaler {
  0% {
    transform: scale(1);
  }
  100% {    transform: scale(1.5);
  }
}
.imgAnim691 {
  animation: rotateAnim 10s linear 0s infinite forwards running;
}
.btnAnim691 {
  animation: scaler 1s linear 0s infinite alternate none running;
}
.btnAnim691:hover{
  animation-play-state: paused;
}
.download-button-container {
  width: 90%;
  max-width: 600px;
  background: #eee;
  margin: 24px auto;
  padding: 16px;
  text-align: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  border-radius: 10px;
  box-shadow: inset 0 10px 15px -3px rgba(0, 0, 0, 0.1);
  display: flex;
  flex-direction: column;
  align-items: center;
}

.download-button-container .download-button {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 200px;
  justify-content: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  font-size: 16px;
  font-weight: 300;
  text-transform: uppercase;
  letter-spacing: 2px;
  background: #ef233c;
  border: none;
  padding: 8px;
  cursor: pointer;
  color: #fff;
}

.download-button-container .download-button.active .download-icon {
  animation: bounceAnim 700ms infinite alternate;
}

.download-button-container .download-icon {
  width: 16px;
}

.download-info h3 {
  color: #023047;
  margin-bottom: 12px;
}

.download-info {
  height: 0;
  overflow: hidden;
  transition: all 400ms ease;
}

.download-button-container .download-button.active + .download-info {
  height: 90px;
}

.download-info .download-link {
  font-size: 14px;
  text-transform: uppercase;
  font-weight: 300;
  color: #023047;
  letter-spacing: 4px;
  text-decoration: underline;
  text-underline-offset: 5px;
}

@keyframes bounceAnim {
  to {
    transform: translateY(4px);
  }
}
  

&lt;/style&gt;

                             
                                
&lt;div class=&quot;video-gallery-container&quot;&gt;
&lt;div class=&quot;detail-mod&quot;&gt;
                                &lt;div class=&quot;dm-thumb&quot;&gt;&lt;img alt=&quot;Sarfira (Hindi)&quot; src=&quot;https://i.postimg.cc/PqNw1m6m/Snapshot-08.jpg&quot; title=&quot;Sarfira (Hindi)&quot; /&gt;&lt;/div&gt;
                                &lt;h3 data-h12-processed=&quot;true&quot;&gt;Sarfira (Hindi) &lt;/h3&gt;
                                				
                       

                            &lt;div class=&quot;desc&quot;&gt;  &lt;p&gt;Watch &lt;strong&gt;Sarfira (2024) Hindi full movie online&lt;/strong&gt;, &lt;a href=&quot;&quot;&gt;&lt;strong&gt;Sarfira (Hindi) movie download&lt;/strong&gt;&lt;/a&gt; 720p HD quality 300MB and 1GB print A unique family and their experience. A man fights to make his dream of creating a low cost airline a reality, facing opposition from devious competitive airline owners who threaten his business and his passengers’ safety.&lt;/p&gt;
														&lt;/div&gt;
                            &lt;div class=&quot;mvic-info&quot;&gt;
                                &lt;div class=&quot;mvici-left&quot;&gt;
                                    &lt;p&gt;&lt;strong&gt;Genres: &lt;/strong&gt;Watch Hindi Movies&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Actors: &lt;/strong&gt;Akshay Kumar, Radhika Madan, Suriya&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Director: &lt;/strong&gt;Sudha Kongara&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Country: &lt;/strong&gt;India&lt;br /&gt;&lt;/p&gt;
                                 &lt;/div&gt;
                                &lt;div class=&quot;mvici-right&quot;&gt;
									                                    &lt;p&gt;&lt;strong&gt;Duration:&lt;/strong&gt;  min&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; &lt;span class=&quot;quality&quot;&gt;HDTS&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; 2024&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;IMDb:&lt;/strong&gt; 6.9&lt;/p&gt;

                                                              &lt;p id=&quot;imdb&quot;&gt;&lt;strong&gt;IMDb ID:&lt;/strong&gt; &lt;span id=&quot;imdb_id&quot;&gt;&lt;/span&gt;&lt;/p&gt;    
                                                          &lt;/div&gt;
                                &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;/div&gt;
                            &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;!--keywords--&gt;
                            &lt;div id=&quot;mv-keywords&quot;&gt;
                                &lt;strong class=&quot;mr10&quot;&gt;Keywords:&lt;/strong&gt;
									&lt;h5&gt;Sarfira (2024) Hindi Movie&lt;/h5&gt;&lt;h5&gt;Sarfira ©&amp;nbsp;&lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;.&lt;/h5&gt;                            &lt;/div&gt;
                        &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                    &lt;/div&gt;  
  &lt;div class=&quot;pa-main&quot;&gt;
  &lt;div class=&quot;widget-content&quot;&gt;
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...Subscribe our channel for Upcomiiing New movies notification....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;
&lt;/div&gt;
    
    &lt;center&gt; &lt;h3&gt;Sarfira  (2024) Hindi&lt;/h3&gt;&lt;/center&gt;
    
    &lt;div class=&quot;container2&quot;&gt;
      
        &lt;div class=&quot;box box1&quot;&gt;&lt;/div&gt;
	
          &lt;div class=&quot;box box2&quot;&gt;
          
         &lt;div class=&quot;video-container&quot;&gt;
          
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;https://cdn.asumanaksoy.com/video/fce88321c6d9b474fa62e53042243f48&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;/div&gt;                
    

    
    &lt;div class=&quot;download-button-container&quot;&gt;
      &lt;button class=&quot;download-button&quot;&gt;Download&lt;span class=&quot;download-icon&quot;&gt;
          &lt;svg class=&quot;h-6 w-6&quot; fill=&quot;none&quot; stroke-width=&quot;2&quot; stroke=&quot;currentColor&quot; viewbox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
            &lt;path d=&quot;M19 14l-7 7m0 0l-7-7m7 7V3&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
          &lt;/path&gt;&lt;/svg&gt;
        &lt;/span&gt;
      &lt;/button&gt;
    

      &lt;div class=&quot;download-info&quot;&gt;
        &lt;h3&gt;Your download link will appear in 5 seconds.&lt;/h3&gt;
      &lt;/div&gt;
    &lt;/div&gt;
 






&lt;script&gt;
const downloadButton = document.querySelector(
  &quot;.download-button-container .download-button&quot;
);
const downloadHeading = document.querySelector(&quot;.download-info h3&quot;);
const downloadInfo = document.querySelector(&quot;.download-info&quot;);

let downloadTimer;
let remainingTime = 5;
let linkDisplayed = false;

const showDownloadLink = () =&gt; {
  if (!linkDisplayed) {
    const downloadLink = document.createElement(&quot;a&quot;);
    downloadLink.href = &quot;https://sspectrumlivetv.blogspot.com/p/your-download-link-here-below_13.html&quot;;
    downloadLink.innerHTML = &quot;Click Here&quot;;
    downloadLink.classList.add(&quot;download-link&quot;);
    downloadInfo.appendChild(downloadLink);
  }
  linkDisplayed = true;
};

downloadButton.addEventListener(&quot;click&quot;, () =&gt; {
  downloadButton.classList.add(&quot;active&quot;);

  downloadTimer = setInterval(() =&gt; {
    remainingTime--;

    if (remainingTime &lt;= 0) {
      clearInterval(downloadTimer);
      showDownloadLink();
      downloadHeading.innerHTML = &quot;Here is the download link.&quot;;
    } else {
      downloadHeading.innerHTML = `Your download link will appear in ${remainingTime} seconds.`;
    }
  }, 1000);
});
&lt;/script&gt;

  &lt;p&gt;Or Direct Download From Above link &lt;/p&gt;


      
  


  

  

  
  &lt;!--/main--&gt;
&lt;center&gt;&lt;!--info line, ad unit name: Footer--&gt;

&lt;script async=&quot;&quot; src=&quot;https://tags.h12-media.com/load2.js&quot;&gt;&lt;/script&gt;&lt;/center&gt;



            &lt;div id=&quot;copyright&quot;&gt;
                &lt;p&gt;&lt;a href=&quot;&quot; id=&quot;logo-footer&quot;&gt;&lt;/a&gt;&lt;/p&gt;
                &lt;p&gt;Copyright © &lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;. All Rights
                    Reserved 2023&lt;/p&gt;
            &lt;/div&gt;
  
&lt;b&gt;We do not host any files on it’s servers. All files or contents hosted on third party websites.
We do not accept responsibility for contents hosted on third party websites.
We just index those links which are already available in internet&lt;/b&gt;


&lt;/div&gt;&lt;/div&gt;

&lt;style&gt;

.codehap {
      display: flex;
      flex-wrap: wrap;
    }

    .codehapBox, .codehap_box {
      box-sizing: border-box;
      width: 100%;
      padding: 10px;
      border: 1px solid #ccc;
    }

    @media (min-width: 600px) {
      .codehapBox {
        width: 50%;
      }
    }
    
.video-container {
    position: relative;
    padding-bottom: 56.25%;
    padding-top: 0px;
    height: 0%;
    overflow: hidden;
}

.video-container iframe {
    position: absolute;
    top:0;
    left: 0%;
    width: 100%;
    height: 100%;
}
.codehapContent{
 
margin:auto;


}

&lt;/style&gt;


	

 
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/6922903225994824981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/07/watch-sarfira-2024-hindi-full-movie.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/6922903225994824981'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/6922903225994824981'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/07/watch-sarfira-2024-hindi-full-movie.html' title='Watch Sarfira  (2024) Hindi full movie online'/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0_SNt6Oa-4Q4FSC5SGa3u6XXulz3vuYUSQZQsc4tWN99zfQ8N3Po_1sEapqLqQfHKPQDSBKIRKVRnKGarKijU8-6W30rlXrcVng-wbOJE1Xe2cksvFF0ZNxDYlmpErgLy5JD1qlRFZazKJVE3cxIHL1sM_xSQjOqYN5oSbbtOM-ZL6349cWDrs9f6X5k/s72-c/Sarfira-2024-Hindi-Language.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-3103578355366791694</id><published>2024-07-12T23:26:00.000-07:00</published><updated>2024-07-25T10:48:25.674-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bollywood Movie"/><title type='text'>Watch Indian 2 (2024) Hindi full movie online</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIMNQ2w94KkUznhFIGdVJHW4ZnDAYluH0S-w-Bt03aToyX9CKp05V1gkpTmpa0eWv_E0cz8RAUtspiatXSeuaMPMwVgqnQRTxaM-H4Nuuh06jmb3Kismj3tIk9Uw9by8zXMn4sbQTAHqwMGQ8womS1d9V-2dtjIE6RNs2n-hNnRRZhYOZBf_H50e0SKgk/s220/Indian-2-2024-Hindi-Language.png&quot; style=&quot;clear: left; display: block; float: left; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;220&quot; data-original-width=&quot;165&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIMNQ2w94KkUznhFIGdVJHW4ZnDAYluH0S-w-Bt03aToyX9CKp05V1gkpTmpa0eWv_E0cz8RAUtspiatXSeuaMPMwVgqnQRTxaM-H4Nuuh06jmb3Kismj3tIk9Uw9by8zXMn4sbQTAHqwMGQ8womS1d9V-2dtjIE6RNs2n-hNnRRZhYOZBf_H50e0SKgk/s320/Indian-2-2024-Hindi-Language.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;style&gt;
.video-gallery-container {
  width: 100%;
  font-family: &quot;Roboto&quot;, sans-serif;
  background: #ffd166;
  padding: 8px 0 0 0;
  margin: 0 auto;
}
  
.video-gallery-container,
.video-gallery-container * {
  box-sizing: border-box;
}
 
.video-gallery-container h2.title {
  text-align: center;
  font-weight: 300;
  text-transform: uppercase;
  font-size: 34px;
  margin-bottom: 24px;
}

.video-gallery-container .video-gallery {
  display: 100%;
  background: #02151e;
  justify-content: center;
  padding: 16px;
  padding-top: 24px;
  gap: 24px;
  color: #fff;
}

.video-gallery h3.video-title {
  line-height: 1.6;
  font-weight: 700;
  font-size: 20px;
  width: 100%;
}

.video-gallery .thumbnail {
  height: 120px;
  cursor: pointer;
  width: 240px;
  
}

.video-gallery .video {
  position: relative;
}

.video-gallery .video:hover .play-icon {
  opacity: 1;
}

.video-gallery .play-icon {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  pointer-events: none;
  opacity: 0;
  transition: opacity 400ms ease;
}

.video-gallery .video .play-icon img {
  height: 50px;
  width: 50px;
}

.video-gallery .all-videos {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.video-gallery .responsive-iframe {
  position: relative;
  height: 0;
  overflow: hidden;
  padding-top: 56.25%;
  padding-bottom: 30px;
}

.video-gallery .responsive-iframe iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
  @media (max-width: 900px) {
  .video-gallery-container {
    width: 100%;
  }
}
  
@media (max-width: 700px) {
  .video-gallery-container .video-gallery {
    flex-direction: column;
  }

  .video-gallery .all-videos {
    display: grid;
    grid-template-columns: 1fr 1fr;
  }

  .video-gallery .thumbnail {
    height: unset;
    width: 100%;
  }
}

@media (max-width: 500px) {
  .video-gallery .all-videos {
    grid-template-columns: 1fr;
  }

  .video-gallery-container {
    max-width: 400px;
  }

  .video-gallery-container h2.title {
    font-size: 24px;
    font-weight: bold;
  }
}
 .BorderColorChangeElement {
  	animation: BorderColorChange 1s ease-out 0s infinite alternate none running;
}
@keyframes BorderColorChange{
  	0%  { border: 10px solid #ffc0cb;}
  	100%  { border: 10px solid #ff69b4;}
}
@keyframes rotateAnim {
    0% { transform: rotate(deg);}
    100% { transform:rotate(360deg);}
}
@keyframes scaler {
  0% {
    transform: scale(1);
  }
  100% {    transform: scale(1.5);
  }
}
.imgAnim691 {
  animation: rotateAnim 10s linear 0s infinite forwards running;
}
.btnAnim691 {
  animation: scaler 1s linear 0s infinite alternate none running;
}
.btnAnim691:hover{
  animation-play-state: paused;
}
.download-button-container {
  width: 90%;
  max-width: 600px;
  background: #eee;
  margin: 24px auto;
  padding: 16px;
  text-align: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  border-radius: 10px;
  box-shadow: inset 0 10px 15px -3px rgba(0, 0, 0, 0.1);
  display: flex;
  flex-direction: column;
  align-items: center;
}

.download-button-container .download-button {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 200px;
  justify-content: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  font-size: 16px;
  font-weight: 300;
  text-transform: uppercase;
  letter-spacing: 2px;
  background: #ef233c;
  border: none;
  padding: 8px;
  cursor: pointer;
  color: #fff;
}

.download-button-container .download-button.active .download-icon {
  animation: bounceAnim 700ms infinite alternate;
}

.download-button-container .download-icon {
  width: 16px;
}

.download-info h3 {
  color: #023047;
  margin-bottom: 12px;
}

.download-info {
  height: 0;
  overflow: hidden;
  transition: all 400ms ease;
}

.download-button-container .download-button.active + .download-info {
  height: 90px;
}

.download-info .download-link {
  font-size: 14px;
  text-transform: uppercase;
  font-weight: 300;
  color: #023047;
  letter-spacing: 4px;
  text-decoration: underline;
  text-underline-offset: 5px;
}

@keyframes bounceAnim {
  to {
    transform: translateY(4px);
  }
}
  

&lt;/style&gt;

                             
                                
&lt;div class=&quot;video-gallery-container&quot;&gt;
&lt;div class=&quot;detail-mod&quot;&gt;
                                &lt;div class=&quot;dm-thumb&quot;&gt;&lt;img alt=&quot;Indian 2 (Hindi)&quot; src=&quot;https://i.postimg.cc/kXCqXv61/Snapshot-8.jpg&quot; title=&quot;Indian 2 (Hindi)&quot; /&gt;&lt;/div&gt;
                                &lt;h3 data-h12-processed=&quot;true&quot;&gt;Indian 2 (Hindi) &lt;/h3&gt;
                                				

                       

                            &lt;div class=&quot;desc&quot;&gt;  &lt;p&gt;Watch Indian 2 (2024) Hindi full movie online, Indian 2 (Hindi) movie download 720p HD quality 300MB and 1GB print A unique family and their experience. Senapathy, an ex-freedom fighter turned vigilante who fights against corruption. Senapathy returns to the country to aid a young man who has been exposing corrupt politicians in the country through videos on the internet.&lt;/p&gt;
														&lt;/div&gt;
                            &lt;div class=&quot;mvic-info&quot;&gt;
                                &lt;div class=&quot;mvici-left&quot;&gt;
                                    &lt;p&gt;&lt;strong&gt;Genres: &lt;/strong&gt;Watch Hindi Movies&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Actors: &lt;/strong&gt;Kamal Haasan, Priya Bhavani Shankar, Rakul Preet Singh&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Director: &lt;/strong&gt;S. Shankar&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Country: &lt;/strong&gt;India&lt;br /&gt;&lt;/p&gt;
                                 &lt;/div&gt;
                                &lt;div class=&quot;mvici-right&quot;&gt;
									                                    &lt;p&gt;&lt;strong&gt;Duration:&lt;/strong&gt;  min&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; &lt;span class=&quot;quality&quot;&gt;CAM&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; 2024&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;IMDb:&lt;/strong&gt; 6.5&lt;/p&gt;

                                                              &lt;p id=&quot;imdb&quot;&gt;&lt;strong&gt;IMDb ID:&lt;/strong&gt; &lt;span id=&quot;imdb_id&quot;&gt;&lt;/span&gt;&lt;/p&gt;    
                                                          &lt;/div&gt;
                                &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;/div&gt;
                            &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;!--keywords--&gt;
                            &lt;div id=&quot;mv-keywords&quot;&gt;
                                &lt;strong class=&quot;mr10&quot;&gt;Keywords:&lt;/strong&gt;
									&lt;h5&gt;Indian 2 (2024) Hindi Movie&lt;/h5&gt;&lt;h5&gt;Indian 2 ©&amp;nbsp;&lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;&lt;/h5&gt;                            &lt;/div&gt;
                        &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                    &lt;/div&gt;
  
  &lt;div class=&quot;pa-main&quot;&gt;
  &lt;div class=&quot;widget-content&quot;&gt;
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...Subscribe our channel for Upcomiiing New movies notification....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;
&lt;/div&gt;
    
    &lt;center&gt; &lt;h3&gt;Indian 2 (Hindi)&lt;/h3&gt;&lt;/center&gt;
    
    &lt;div class=&quot;container2&quot;&gt;
      
        &lt;div class=&quot;box box1&quot;&gt;&lt;/div&gt;
	
          &lt;div class=&quot;box box2&quot;&gt;
          
         &lt;div class=&quot;video-container&quot;&gt;
          
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;https://cdn.asumanaksoy.com/video/e42166c93fb3bbb2644d14e7a64ef89c&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;/div&gt;                
    

    
    &lt;div class=&quot;download-button-container&quot;&gt;
      &lt;button class=&quot;download-button&quot;&gt;Download&lt;span class=&quot;download-icon&quot;&gt;
          &lt;svg class=&quot;h-6 w-6&quot; fill=&quot;none&quot; stroke-width=&quot;2&quot; stroke=&quot;currentColor&quot; viewbox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
            &lt;path d=&quot;M19 14l-7 7m0 0l-7-7m7 7V3&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
          &lt;/path&gt;&lt;/svg&gt;
        &lt;/span&gt;
      &lt;/button&gt;
    

      &lt;div class=&quot;download-info&quot;&gt;
        &lt;h3&gt;Your download link will appear in 5 seconds.&lt;/h3&gt;
      &lt;/div&gt;
    &lt;/div&gt;
 






&lt;script&gt;
const downloadButton = document.querySelector(
  &quot;.download-button-container .download-button&quot;
);
const downloadHeading = document.querySelector(&quot;.download-info h3&quot;);
const downloadInfo = document.querySelector(&quot;.download-info&quot;);

let downloadTimer;
let remainingTime = 5;
let linkDisplayed = false;

const showDownloadLink = () =&gt; {
  if (!linkDisplayed) {
    const downloadLink = document.createElement(&quot;a&quot;);
    downloadLink.href = &quot;https://sspectrumlivetv.blogspot.com/p/your-download-link-here-below_12.html&quot;;
    downloadLink.innerHTML = &quot;Click Here&quot;;
    downloadLink.classList.add(&quot;download-link&quot;);
    downloadInfo.appendChild(downloadLink);
  }
  linkDisplayed = true;
};

downloadButton.addEventListener(&quot;click&quot;, () =&gt; {
  downloadButton.classList.add(&quot;active&quot;);

  downloadTimer = setInterval(() =&gt; {
    remainingTime--;

    if (remainingTime &lt;= 0) {
      clearInterval(downloadTimer);
      showDownloadLink();
      downloadHeading.innerHTML = &quot;Here is the download link.&quot;;
    } else {
      downloadHeading.innerHTML = `Your download link will appear in ${remainingTime} seconds.`;
    }
  }, 1000);
});
&lt;/script&gt;

  &lt;p&gt;Or Direct Download From Above link &lt;/p&gt;


      
  


  

  

  
  &lt;!--/main--&gt;
&lt;center&gt;&lt;!--info line, ad unit name: Footer--&gt;

&lt;script async=&quot;&quot; src=&quot;https://tags.h12-media.com/load2.js&quot;&gt;&lt;/script&gt;&lt;/center&gt;



            &lt;div id=&quot;copyright&quot;&gt;
                &lt;p&gt;&lt;a href=&quot;&quot; id=&quot;logo-footer&quot;&gt;&lt;/a&gt;&lt;/p&gt;
                &lt;p&gt;Copyright © &lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;. All Rights
                    Reserved 2023&lt;/p&gt;
            &lt;/div&gt;
  
&lt;b&gt;We do not host any files on it’s servers. All files or contents hosted on third party websites.
We do not accept responsibility for contents hosted on third party websites.
We just index those links which are already available in internet&lt;/b&gt;


&lt;/div&gt;&lt;/div&gt;

&lt;style&gt;

.codehap {
      display: flex;
      flex-wrap: wrap;
    }

    .codehapBox, .codehap_box {
      box-sizing: border-box;
      width: 100%;
      padding: 10px;
      border: 1px solid #ccc;
    }

    @media (min-width: 600px) {
      .codehapBox {
        width: 50%;
      }
    }
    
.video-container {
    position: relative;
    padding-bottom: 56.25%;
    padding-top: 0px;
    height: 0%;
    overflow: hidden;
}

.video-container iframe {
    position: absolute;
    top:0;
    left: 0%;
    width: 100%;
    height: 100%;
}
.codehapContent{
 
margin:auto;


}

&lt;/style&gt;


	

 
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/3103578355366791694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/07/watch-indian-2-2024-hindi-full-movie.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/3103578355366791694'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/3103578355366791694'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/07/watch-indian-2-2024-hindi-full-movie.html' title='Watch Indian 2 (2024) Hindi full movie online'/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIMNQ2w94KkUznhFIGdVJHW4ZnDAYluH0S-w-Bt03aToyX9CKp05V1gkpTmpa0eWv_E0cz8RAUtspiatXSeuaMPMwVgqnQRTxaM-H4Nuuh06jmb3Kismj3tIk9Uw9by8zXMn4sbQTAHqwMGQ8womS1d9V-2dtjIE6RNs2n-hNnRRZhYOZBf_H50e0SKgk/s72-c/Indian-2-2024-Hindi-Language.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-5653806716473528567</id><published>2024-07-07T13:05:00.000-07:00</published><updated>2024-07-07T13:05:32.949-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bollywood Movie"/><title type='text'>Kill (Hindi) 2024 Hindi Movie</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihghJ6O_hiXUrPCfnGB8VWfGNq9wKgOb5EpwaUE4JqRxt1HYseSfSfkSl_SDGNoiWvMfbNIgB7klV9gxvjB9Gku5lcvZnrGrRYQNuV3pww_Y1DK7FEIqeWYlwOy2wn4AqOK6EXtih2TImImOXFnLNS-VovyJbXYqcMK3liKJwz2EPXVO0Sy0Q8tCtiQzU/s220/Kill-2024-Hindi-Language.png&quot; style=&quot;clear: left; display: block; float: left; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;220&quot; data-original-width=&quot;165&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihghJ6O_hiXUrPCfnGB8VWfGNq9wKgOb5EpwaUE4JqRxt1HYseSfSfkSl_SDGNoiWvMfbNIgB7klV9gxvjB9Gku5lcvZnrGrRYQNuV3pww_Y1DK7FEIqeWYlwOy2wn4AqOK6EXtih2TImImOXFnLNS-VovyJbXYqcMK3liKJwz2EPXVO0Sy0Q8tCtiQzU/s320/Kill-2024-Hindi-Language.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;style&gt;
.video-gallery-container {
  width: 100%;
  font-family: &quot;Roboto&quot;, sans-serif;
  background: #ffd166;
  padding: 8px 0 0 0;
  margin: 0 auto;
}
  
.video-gallery-container,
.video-gallery-container * {
  box-sizing: border-box;
}
 
.video-gallery-container h2.title {
  text-align: center;
  font-weight: 300;
  text-transform: uppercase;
  font-size: 34px;
  margin-bottom: 24px;
}

.video-gallery-container .video-gallery {
  display: 100%;
  background: #02151e;
  justify-content: center;
  padding: 16px;
  padding-top: 24px;
  gap: 24px;
  color: #fff;
}

.video-gallery h3.video-title {
  line-height: 1.6;
  font-weight: 700;
  font-size: 20px;
  width: 100%;
}

.video-gallery .thumbnail {
  height: 120px;
  cursor: pointer;
  width: 240px;
  
}

.video-gallery .video {
  position: relative;
}

.video-gallery .video:hover .play-icon {
  opacity: 1;
}

.video-gallery .play-icon {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  pointer-events: none;
  opacity: 0;
  transition: opacity 400ms ease;
}

.video-gallery .video .play-icon img {
  height: 50px;
  width: 50px;
}

.video-gallery .all-videos {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.video-gallery .responsive-iframe {
  position: relative;
  height: 0;
  overflow: hidden;
  padding-top: 56.25%;
  padding-bottom: 30px;
}

.video-gallery .responsive-iframe iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
  @media (max-width: 900px) {
  .video-gallery-container {
    width: 100%;
  }
}
  
@media (max-width: 700px) {
  .video-gallery-container .video-gallery {
    flex-direction: column;
  }

  .video-gallery .all-videos {
    display: grid;
    grid-template-columns: 1fr 1fr;
  }

  .video-gallery .thumbnail {
    height: unset;
    width: 100%;
  }
}

@media (max-width: 500px) {
  .video-gallery .all-videos {
    grid-template-columns: 1fr;
  }

  .video-gallery-container {
    max-width: 400px;
  }

  .video-gallery-container h2.title {
    font-size: 24px;
    font-weight: bold;
  }
}
 .BorderColorChangeElement {
  	animation: BorderColorChange 1s ease-out 0s infinite alternate none running;
}
@keyframes BorderColorChange{
  	0%  { border: 10px solid #ffc0cb;}
  	100%  { border: 10px solid #ff69b4;}
}
@keyframes rotateAnim {
    0% { transform: rotate(deg);}
    100% { transform:rotate(360deg);}
}
@keyframes scaler {
  0% {
    transform: scale(1);
  }
  100% {    transform: scale(1.5);
  }
}
.imgAnim691 {
  animation: rotateAnim 10s linear 0s infinite forwards running;
}
.btnAnim691 {
  animation: scaler 1s linear 0s infinite alternate none running;
}
.btnAnim691:hover{
  animation-play-state: paused;
}
.download-button-container {
  width: 90%;
  max-width: 600px;
  background: #eee;
  margin: 24px auto;
  padding: 16px;
  text-align: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  border-radius: 10px;
  box-shadow: inset 0 10px 15px -3px rgba(0, 0, 0, 0.1);
  display: flex;
  flex-direction: column;
  align-items: center;
}

.download-button-container .download-button {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 200px;
  justify-content: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  font-size: 16px;
  font-weight: 300;
  text-transform: uppercase;
  letter-spacing: 2px;
  background: #ef233c;
  border: none;
  padding: 8px;
  cursor: pointer;
  color: #fff;
}

.download-button-container .download-button.active .download-icon {
  animation: bounceAnim 700ms infinite alternate;
}

.download-button-container .download-icon {
  width: 16px;
}

.download-info h3 {
  color: #023047;
  margin-bottom: 12px;
}

.download-info {
  height: 0;
  overflow: hidden;
  transition: all 400ms ease;
}

.download-button-container .download-button.active + .download-info {
  height: 90px;
}

.download-info .download-link {
  font-size: 14px;
  text-transform: uppercase;
  font-weight: 300;
  color: #023047;
  letter-spacing: 4px;
  text-decoration: underline;
  text-underline-offset: 5px;
}

@keyframes bounceAnim {
  to {
    transform: translateY(4px);
  }
}
  

&lt;/style&gt;

                             
                                
&lt;div class=&quot;video-gallery-container&quot;&gt;
&lt;div class=&quot;detail-mod&quot;&gt;
                                &lt;div class=&quot;dm-thumb&quot;&gt;&lt;img alt=&quot;Kill (Hindi)&quot; src=&quot;https://i.postimg.cc/7LsMXG0x/07.jpg&quot; title=&quot;Kill (Hindi)&quot; /&gt;&lt;/div&gt;
                                &lt;h3&gt; Kill (Hindi) &lt;/h3&gt;
                       

                            &lt;div class=&quot;desc&quot;&gt;  &lt;p&gt;Watch Kill (2024) Hindi full movie online 0Gomovies, Kill (Hindi) movie download 720p HD quality 300MB and 1GB print A unique family and their experience. During a train trip to New Delhi, a pair of commandos face an army of invading bandits.&lt;/p&gt;
														&lt;/div&gt;
                            &lt;div class=&quot;mvic-info&quot;&gt;
                                &lt;div class=&quot;mvici-left&quot;&gt;
                                    &lt;p&gt;&lt;strong&gt;Genres: &lt;/strong&gt;Watch Hindi Movies&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Actors: &lt;/strong&gt;Lakshya, Raghav Juyal, Tanya Maniktala&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Director: &lt;/strong&gt;Nikhil Nagesh Bhat&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Country: &lt;/strong&gt;India&lt;br /&gt;&lt;/p&gt;
                                 &lt;/div&gt;
                                &lt;div class=&quot;mvici-right&quot;&gt;
									                                    &lt;p&gt;&lt;strong&gt;Duration:&lt;/strong&gt;  min&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; &lt;span class=&quot;quality&quot;&gt;CAM&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; 2024&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;IMDb:&lt;/strong&gt; 7.2&lt;/p&gt;

                                                              &lt;p id=&quot;imdb&quot;&gt;&lt;strong&gt;IMDb ID:&lt;/strong&gt; &lt;span id=&quot;imdb_id&quot;&gt;&lt;/span&gt;&lt;/p&gt;    
                                                          &lt;/div&gt;
                                &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;/div&gt;
                            &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;!--keywords--&gt;
                            &lt;div id=&quot;mv-keywords&quot;&gt;
                                &lt;strong class=&quot;mr10&quot;&gt;Keywords:&lt;/strong&gt;
									&lt;h5&gt;Kill (2024) Hindi Movie&lt;/h5&gt;&lt;h5&gt;Kill&amp;nbsp;&lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;.&lt;/h5&gt;                            &lt;/div&gt;
                        &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                    &lt;/div&gt;  
  &lt;div class=&quot;pa-main&quot;&gt;
  &lt;div class=&quot;widget-content&quot;&gt;
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...Subscribe our channel for Upcomiiing New movies notification....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;
&lt;/div&gt;
    
    &lt;center&gt; &lt;h3&gt;Kill Hindi Movie&lt;/h3&gt;&lt;/center&gt;
    
    &lt;div class=&quot;container2&quot;&gt;
      
        &lt;div class=&quot;box box1&quot;&gt;&lt;/div&gt;
	
          &lt;div class=&quot;box box2&quot;&gt;
          
         &lt;div class=&quot;video-container&quot;&gt;
          
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;https://teamomw6.com/xwwm3yeipegqkov2bs4eamobvivgbwdoy7pr45ofdwwegzce2lk6rtdpreua6wegzce2lkq6iiq5ibq/v.mp4&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;/div&gt;                
    

    
    &lt;div class=&quot;download-button-container&quot;&gt;
      &lt;button class=&quot;download-button&quot;&gt;Download&lt;span class=&quot;download-icon&quot;&gt;
          &lt;svg class=&quot;h-6 w-6&quot; fill=&quot;none&quot; stroke-width=&quot;2&quot; stroke=&quot;currentColor&quot; viewbox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
            &lt;path d=&quot;M19 14l-7 7m0 0l-7-7m7 7V3&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
          &lt;/path&gt;&lt;/svg&gt;
        &lt;/span&gt;
      &lt;/button&gt;
    

      &lt;div class=&quot;download-info&quot;&gt;
        &lt;h3&gt;Your download link will appear in 5 seconds.&lt;/h3&gt;
      &lt;/div&gt;
    &lt;/div&gt;
 






&lt;script&gt;
const downloadButton = document.querySelector(
  &quot;.download-button-container .download-button&quot;
);
const downloadHeading = document.querySelector(&quot;.download-info h3&quot;);
const downloadInfo = document.querySelector(&quot;.download-info&quot;);

let downloadTimer;
let remainingTime = 5;
let linkDisplayed = false;

const showDownloadLink = () =&gt; {
  if (!linkDisplayed) {
    const downloadLink = document.createElement(&quot;a&quot;);
    downloadLink.href = &quot;https://sspectrumlivetv.blogspot.com/p/your-download-link-here-below_7.html&quot;;
    downloadLink.innerHTML = &quot;Click Here&quot;;
    downloadLink.classList.add(&quot;download-link&quot;);
    downloadInfo.appendChild(downloadLink);
  }
  linkDisplayed = true;
};

downloadButton.addEventListener(&quot;click&quot;, () =&gt; {
  downloadButton.classList.add(&quot;active&quot;);

  downloadTimer = setInterval(() =&gt; {
    remainingTime--;

    if (remainingTime &lt;= 0) {
      clearInterval(downloadTimer);
      showDownloadLink();
      downloadHeading.innerHTML = &quot;Here is the download link.&quot;;
    } else {
      downloadHeading.innerHTML = `Your download link will appear in ${remainingTime} seconds.`;
    }
  }, 1000);
});
&lt;/script&gt;

  &lt;p&gt;Or Direct Download From Above link &lt;/p&gt;


      
  


  

  

  
  &lt;!--/main--&gt;
&lt;center&gt;&lt;!--info line, ad unit name: Footer--&gt;

&lt;script async=&quot;&quot; src=&quot;https://tags.h12-media.com/load2.js&quot;&gt;&lt;/script&gt;&lt;/center&gt;



            &lt;div id=&quot;copyright&quot;&gt;
                &lt;p&gt;&lt;a href=&quot;&quot; id=&quot;logo-footer&quot;&gt;&lt;/a&gt;&lt;/p&gt;
                &lt;p&gt;Copyright © &lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;. All Rights
                    Reserved 2023&lt;/p&gt;
            &lt;/div&gt;
  
&lt;b&gt;We do not host any files on it’s servers. All files or contents hosted on third party websites.
We do not accept responsibility for contents hosted on third party websites.
We just index those links which are already available in internet&lt;/b&gt;


&lt;/div&gt;&lt;/div&gt;

&lt;style&gt;

.codehap {
      display: flex;
      flex-wrap: wrap;
    }

    .codehapBox, .codehap_box {
      box-sizing: border-box;
      width: 100%;
      padding: 10px;
      border: 1px solid #ccc;
    }

    @media (min-width: 600px) {
      .codehapBox {
        width: 50%;
      }
    }
    
.video-container {
    position: relative;
    padding-bottom: 56.25%;
    padding-top: 0px;
    height: 0%;
    overflow: hidden;
}

.video-container iframe {
    position: absolute;
    top:0;
    left: 0%;
    width: 100%;
    height: 100%;
}
.codehapContent{
 
margin:auto;


}

&lt;/style&gt;


	

 
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/5653806716473528567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/07/kill-hindi-2024-hindi-movie.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/5653806716473528567'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/5653806716473528567'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/07/kill-hindi-2024-hindi-movie.html' title='Kill (Hindi) 2024 Hindi Movie'/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihghJ6O_hiXUrPCfnGB8VWfGNq9wKgOb5EpwaUE4JqRxt1HYseSfSfkSl_SDGNoiWvMfbNIgB7klV9gxvjB9Gku5lcvZnrGrRYQNuV3pww_Y1DK7FEIqeWYlwOy2wn4AqOK6EXtih2TImImOXFnLNS-VovyJbXYqcMK3liKJwz2EPXVO0Sy0Q8tCtiQzU/s72-c/Kill-2024-Hindi-Language.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-6203731756505512109</id><published>2024-06-28T09:49:00.000-07:00</published><updated>2024-06-28T09:54:50.255-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bollywood Movie"/><title type='text'>Kalki 2898 AD (2024) Hindi Movie</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1TL263C4BnmicdiMnEnVq-WkSO36rEIhuVyYR9WbbaLWoK5a24pTQrBeSRL_23NWKAwOTPAX1csuCHqMOiuNHCDowBaYYinFmpycRpQbXheTMshC28_46aBd1nKwSdCoNxlfvI_E6MhcEz1oqUuiLbPV5dmS_J4OSUmH0DtHzBFJKzuLLwSm4a5kfZqQ/s220/Kalki-2898-AD-2024-Hindi-Language.png&quot; style=&quot;clear: left; display: block; float: left; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;220&quot; data-original-width=&quot;165&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1TL263C4BnmicdiMnEnVq-WkSO36rEIhuVyYR9WbbaLWoK5a24pTQrBeSRL_23NWKAwOTPAX1csuCHqMOiuNHCDowBaYYinFmpycRpQbXheTMshC28_46aBd1nKwSdCoNxlfvI_E6MhcEz1oqUuiLbPV5dmS_J4OSUmH0DtHzBFJKzuLLwSm4a5kfZqQ/s320/Kalki-2898-AD-2024-Hindi-Language.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;style&gt;
.video-gallery-container {
  width: 100%;
  font-family: &quot;Roboto&quot;, sans-serif;
  background: #ffd166;
  padding: 8px 0 0 0;
  margin: 0 auto;
}
  
.video-gallery-container,
.video-gallery-container * {
  box-sizing: border-box;
}
 
.video-gallery-container h2.title {
  text-align: center;
  font-weight: 300;
  text-transform: uppercase;
  font-size: 34px;
  margin-bottom: 24px;
}

.video-gallery-container .video-gallery {
  display: 100%;
  background: #02151e;
  justify-content: center;
  padding: 16px;
  padding-top: 24px;
  gap: 24px;
  color: #fff;
}

.video-gallery h3.video-title {
  line-height: 1.6;
  font-weight: 700;
  font-size: 20px;
  width: 100%;
}

.video-gallery .thumbnail {
  height: 120px;
  cursor: pointer;
  width: 240px;
  
}

.video-gallery .video {
  position: relative;
}

.video-gallery .video:hover .play-icon {
  opacity: 1;
}

.video-gallery .play-icon {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  pointer-events: none;
  opacity: 0;
  transition: opacity 400ms ease;
}

.video-gallery .video .play-icon img {
  height: 50px;
  width: 50px;
}

.video-gallery .all-videos {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.video-gallery .responsive-iframe {
  position: relative;
  height: 0;
  overflow: hidden;
  padding-top: 56.25%;
  padding-bottom: 30px;
}

.video-gallery .responsive-iframe iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
  @media (max-width: 900px) {
  .video-gallery-container {
    width: 100%;
  }
}
  
@media (max-width: 700px) {
  .video-gallery-container .video-gallery {
    flex-direction: column;
  }

  .video-gallery .all-videos {
    display: grid;
    grid-template-columns: 1fr 1fr;
  }

  .video-gallery .thumbnail {
    height: unset;
    width: 100%;
  }
}

@media (max-width: 500px) {
  .video-gallery .all-videos {
    grid-template-columns: 1fr;
  }

  .video-gallery-container {
    max-width: 400px;
  }

  .video-gallery-container h2.title {
    font-size: 24px;
    font-weight: bold;
  }
}
 .BorderColorChangeElement {
  	animation: BorderColorChange 1s ease-out 0s infinite alternate none running;
}
@keyframes BorderColorChange{
  	0%  { border: 10px solid #ffc0cb;}
  	100%  { border: 10px solid #ff69b4;}
}
@keyframes rotateAnim {
    0% { transform: rotate(deg);}
    100% { transform:rotate(360deg);}
}
@keyframes scaler {
  0% {
    transform: scale(1);
  }
  100% {    transform: scale(1.5);
  }
}
.imgAnim691 {
  animation: rotateAnim 10s linear 0s infinite forwards running;
}
.btnAnim691 {
  animation: scaler 1s linear 0s infinite alternate none running;
}
.btnAnim691:hover{
  animation-play-state: paused;
}
.download-button-container {
  width: 90%;
  max-width: 600px;
  background: #eee;
  margin: 24px auto;
  padding: 16px;
  text-align: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  border-radius: 10px;
  box-shadow: inset 0 10px 15px -3px rgba(0, 0, 0, 0.1);
  display: flex;
  flex-direction: column;
  align-items: center;
}

.download-button-container .download-button {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 200px;
  justify-content: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  font-size: 16px;
  font-weight: 300;
  text-transform: uppercase;
  letter-spacing: 2px;
  background: #ef233c;
  border: none;
  padding: 8px;
  cursor: pointer;
  color: #fff;
}

.download-button-container .download-button.active .download-icon {
  animation: bounceAnim 700ms infinite alternate;
}

.download-button-container .download-icon {
  width: 16px;
}

.download-info h3 {
  color: #023047;
  margin-bottom: 12px;
}

.download-info {
  height: 0;
  overflow: hidden;
  transition: all 400ms ease;
}

.download-button-container .download-button.active + .download-info {
  height: 90px;
}

.download-info .download-link {
  font-size: 14px;
  text-transform: uppercase;
  font-weight: 300;
  color: #023047;
  letter-spacing: 4px;
  text-decoration: underline;
  text-underline-offset: 5px;
}

@keyframes bounceAnim {
  to {
    transform: translateY(4px);
  }
}
  

&lt;/style&gt;

                             
                                
&lt;div class=&quot;video-gallery-container&quot;&gt;
&lt;div class=&quot;detail-mod&quot;&gt;
                                &lt;div class=&quot;dm-thumb&quot;&gt;&lt;img alt=&quot;Kalki 2898 AD (Hindi)&quot; src=&quot;https://images.mid-day.com/images/images/2024/jun/kalki-bo_d.jpg&quot; title=&quot;Kalki 2898 AD (Hindi)&quot; /&gt;&lt;/div&gt;
                                &lt;h3&gt;Kalki 2898 AD (Hindi)&lt;/h3&gt;
                                				
                       

                            &lt;div class=&quot;desc&quot;&gt;  &lt;p&gt;Watch &lt;strong&gt;Kalki 2898 AD (2024) Hindi full movie online&lt;/strong&gt;&amp;nbsp;&lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;, &lt;a href=&quot;https://sspectrumlivetv.blogspot.com/p/your-download-link-here-below_28.html&quot;&gt;&lt;strong&gt;Kalki 2898 AD Hindi movie download 720p&lt;/strong&gt;&lt;/a&gt; HD quality 300MB and 1GB at &lt;strong&gt;ogo movies&lt;/strong&gt;. A modern-day avatar of Vishnu, a Hindu god, who is believed to have descended to earth to protect the world from evil forces.&lt;/p&gt;
														&lt;/div&gt;
                            &lt;div class=&quot;mvic-info&quot;&gt;
                                &lt;div class=&quot;mvici-left&quot;&gt;
                                    &lt;p&gt;&lt;strong&gt;Genres: &lt;/strong&gt;Watch Hindi Movies&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Actors: &lt;/strong&gt;Amitabh Bachchan, Kamal Haasan, Prabhas&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Director: &lt;/strong&gt;Nag Ashwin&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Country: &lt;/strong&gt;India&lt;br /&gt;&lt;/p&gt;
                                 &lt;/div&gt;
                                &lt;div class=&quot;mvici-right&quot;&gt;
									                                    &lt;p&gt;&lt;strong&gt;Duration:&lt;/strong&gt;  min&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; &lt;span class=&quot;quality&quot;&gt;CAM&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; 2024&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;IMDb:&lt;/strong&gt; 7.5&lt;/p&gt;

                                                              &lt;p id=&quot;imdb&quot;&gt;&lt;strong&gt;IMDb ID:&lt;/strong&gt; &lt;span id=&quot;imdb_id&quot;&gt;&lt;/span&gt;&lt;/p&gt;    
                                                          &lt;/div&gt;
                                &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;/div&gt;
                            &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;!--keywords--&gt;
                            &lt;div id=&quot;mv-keywords&quot;&gt;
                                &lt;strong class=&quot;mr10&quot;&gt;Keywords:&lt;/strong&gt;
									&lt;h5&gt;Kalki 2898 AD (2024) Hindi Movie&lt;/h5&gt;&lt;h5&gt;Kalki 2898 AD&amp;nbsp;&lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;&lt;/h5&gt;                            &lt;/div&gt;
                        &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                    &lt;/div&gt;  
  
  &lt;div class=&quot;pa-main&quot;&gt;
  &lt;div class=&quot;widget-content&quot;&gt;
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...Subscribe our channel for Upcomiiing New movies notification....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;
&lt;/div&gt;
    
    &lt;center&gt; &lt;h3&gt;Kalki 2898 AD (2024) Hindi Movie&lt;/h3&gt;&lt;/center&gt;
    
    &lt;div class=&quot;container2&quot;&gt;
      
        &lt;div class=&quot;box box1&quot;&gt;&lt;/div&gt;
	
          &lt;div class=&quot;box box2&quot;&gt;
          
         &lt;div class=&quot;video-container&quot;&gt;
          
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;https://teamomw5.com/xwwm3m4lpegqkov2bs4eaooduoarp7ysbdqew2aw5ff3ffthpu3kxcpzv3qqnf3ffthpu3jt4fyrz6a/master.m3u8&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;/div&gt;                
    

    
    &lt;div class=&quot;download-button-container&quot;&gt;
      &lt;button class=&quot;download-button&quot;&gt;Download&lt;span class=&quot;download-icon&quot;&gt;
          &lt;svg class=&quot;h-6 w-6&quot; fill=&quot;none&quot; stroke-width=&quot;2&quot; stroke=&quot;currentColor&quot; viewbox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
            &lt;path d=&quot;M19 14l-7 7m0 0l-7-7m7 7V3&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
          &lt;/path&gt;&lt;/svg&gt;
        &lt;/span&gt;
      &lt;/button&gt;
    

      &lt;div class=&quot;download-info&quot;&gt;
        &lt;h3&gt;Your download link will appear in 5 seconds.&lt;/h3&gt;
      &lt;/div&gt;
    &lt;/div&gt;
 






&lt;script&gt;
const downloadButton = document.querySelector(
  &quot;.download-button-container .download-button&quot;
);
const downloadHeading = document.querySelector(&quot;.download-info h3&quot;);
const downloadInfo = document.querySelector(&quot;.download-info&quot;);

let downloadTimer;
let remainingTime = 5;
let linkDisplayed = false;

const showDownloadLink = () =&gt; {
  if (!linkDisplayed) {
    const downloadLink = document.createElement(&quot;a&quot;);
    downloadLink.href = &quot;https://sspectrumlivetv.blogspot.com/p/your-download-link-here-below_28.html&quot;;
    downloadLink.innerHTML = &quot;Click Here&quot;;
    downloadLink.classList.add(&quot;download-link&quot;);
    downloadInfo.appendChild(downloadLink);
  }
  linkDisplayed = true;
};

downloadButton.addEventListener(&quot;click&quot;, () =&gt; {
  downloadButton.classList.add(&quot;active&quot;);

  downloadTimer = setInterval(() =&gt; {
    remainingTime--;

    if (remainingTime &lt;= 0) {
      clearInterval(downloadTimer);
      showDownloadLink();
      downloadHeading.innerHTML = &quot;Here is the download link.&quot;;
    } else {
      downloadHeading.innerHTML = `Your download link will appear in ${remainingTime} seconds.`;
    }
  }, 1000);
});
&lt;/script&gt;

  &lt;p&gt;Or Direct Download From Above link &lt;/p&gt;


      
  


  

  

  
  &lt;!--/main--&gt;
&lt;center&gt;&lt;!--info line, ad unit name: Footer--&gt;

&lt;script async=&quot;&quot; src=&quot;https://tags.h12-media.com/load2.js&quot;&gt;&lt;/script&gt;&lt;/center&gt;



            &lt;div id=&quot;copyright&quot;&gt;
                &lt;p&gt;&lt;a href=&quot;&quot; id=&quot;logo-footer&quot;&gt;&lt;/a&gt;&lt;/p&gt;
                &lt;p&gt;Copyright © &lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;. All Rights
                    Reserved 2023&lt;/p&gt;
            &lt;/div&gt;
  
&lt;b&gt;We do not host any files on it’s servers. All files or contents hosted on third party websites.
We do not accept responsibility for contents hosted on third party websites.
We just index those links which are already available in internet&lt;/b&gt;


&lt;/div&gt;&lt;/div&gt;

&lt;style&gt;

.codehap {
      display: flex;
      flex-wrap: wrap;
    }

    .codehapBox, .codehap_box {
      box-sizing: border-box;
      width: 100%;
      padding: 10px;
      border: 1px solid #ccc;
    }

    @media (min-width: 600px) {
      .codehapBox {
        width: 50%;
      }
    }
    
.video-container {
    position: relative;
    padding-bottom: 56.25%;
    padding-top: 0px;
    height: 0%;
    overflow: hidden;
}

.video-container iframe {
    position: absolute;
    top:0;
    left: 0%;
    width: 100%;
    height: 100%;
}
.codehapContent{
 
margin:auto;


}

&lt;/style&gt;


	

 
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/6203731756505512109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/06/kalki-2898-ad-2024-hindi-movie.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/6203731756505512109'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/6203731756505512109'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/06/kalki-2898-ad-2024-hindi-movie.html' title='Kalki 2898 AD (2024) Hindi Movie'/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1TL263C4BnmicdiMnEnVq-WkSO36rEIhuVyYR9WbbaLWoK5a24pTQrBeSRL_23NWKAwOTPAX1csuCHqMOiuNHCDowBaYYinFmpycRpQbXheTMshC28_46aBd1nKwSdCoNxlfvI_E6MhcEz1oqUuiLbPV5dmS_J4OSUmH0DtHzBFJKzuLLwSm4a5kfZqQ/s72-c/Kalki-2898-AD-2024-Hindi-Language.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-1688694651161670897</id><published>2024-06-23T06:57:00.000-07:00</published><updated>2024-06-23T08:05:25.465-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Sports TV"/><title type='text'>T20 world Cup 2024 </title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhakWljRryXkt6ejefBqt7aPnsBPnBOtxzeN90nYgxomkE4Lz6HucLY4sCqYP4JMAwsbwwUc9_swUmPth1pW_CYGpaoUfEBlLz47Sh56i4pUDPT8S8-7glo5SXn1k18S2dTs-xg_XW264kiFvPR-s7NmSIYmGoDvTbw8vsRmsWgv6ym_vmC7nbqDIMN9hk/s1312/2024_ICC_Men%27s_T20_World_Cup_logo.svg.webp&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;320&quot; data-original-height=&quot;1312&quot; data-original-width=&quot;1200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhakWljRryXkt6ejefBqt7aPnsBPnBOtxzeN90nYgxomkE4Lz6HucLY4sCqYP4JMAwsbwwUc9_swUmPth1pW_CYGpaoUfEBlLz47Sh56i4pUDPT8S8-7glo5SXn1k18S2dTs-xg_XW264kiFvPR-s7NmSIYmGoDvTbw8vsRmsWgv6ym_vmC7nbqDIMN9hk/s320/2024_ICC_Men%27s_T20_World_Cup_logo.svg.webp&quot;/&gt;&lt;/a&gt;&lt;/div&gt;

&lt;hr&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; height=&quot;520&quot; src=&quot;https://player003.vip/embed2.php?id=willow&amp;q=Willow Cricket&quot; width=&quot;100%&quot;&gt;&lt;/iframe&gt;
</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/1688694651161670897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/06/t20-world-cup-2024_23.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/1688694651161670897'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/1688694651161670897'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/06/t20-world-cup-2024_23.html' title='T20 world Cup 2024 '/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhakWljRryXkt6ejefBqt7aPnsBPnBOtxzeN90nYgxomkE4Lz6HucLY4sCqYP4JMAwsbwwUc9_swUmPth1pW_CYGpaoUfEBlLz47Sh56i4pUDPT8S8-7glo5SXn1k18S2dTs-xg_XW264kiFvPR-s7NmSIYmGoDvTbw8vsRmsWgv6ym_vmC7nbqDIMN9hk/s72-c/2024_ICC_Men%27s_T20_World_Cup_logo.svg.webp" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-664339226078542791</id><published>2024-06-22T06:57:00.000-07:00</published><updated>2024-06-22T21:18:58.096-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bollywood Movie"/><title type='text'>Ishq Vishk Rebound (Hindi) 2024 new bollywood movie</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFhI-cSriGq70BdGAZhTSdWiYh-2YVfIeJ5k2mGKBvEMtBhnEPp2B1vk_HKn2v4ocTjYwLSx9zNJvtCV1sTgLIuG4yd4vY80ttIJOiY-Sz7vZxj4hkSFff_nXrkX9K9TuJypsTCQK8jX4jEB3OEaT45irQsjYw6anMwBivz5bQCzOxixMWMkvJEXR7K2k/s220/Ishq-Vishk-Rebound-2024-Hindi-Language.png&quot; style=&quot;clear: left; display: block; float: left; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;220&quot; data-original-width=&quot;165&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFhI-cSriGq70BdGAZhTSdWiYh-2YVfIeJ5k2mGKBvEMtBhnEPp2B1vk_HKn2v4ocTjYwLSx9zNJvtCV1sTgLIuG4yd4vY80ttIJOiY-Sz7vZxj4hkSFff_nXrkX9K9TuJypsTCQK8jX4jEB3OEaT45irQsjYw6anMwBivz5bQCzOxixMWMkvJEXR7K2k/s320/Ishq-Vishk-Rebound-2024-Hindi-Language.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;style&gt;
.video-gallery-container {
  width: 100%;
  font-family: &quot;Roboto&quot;, sans-serif;
  background: #ffd166;
  padding: 8px 0 0 0;
  margin: 0 auto;
}
  
.video-gallery-container,
.video-gallery-container * {
  box-sizing: border-box;
}
 
.video-gallery-container h2.title {
  text-align: center;
  font-weight: 300;
  text-transform: uppercase;
  font-size: 34px;
  margin-bottom: 24px;
}

.video-gallery-container .video-gallery {
  display: 100%;
  background: #02151e;
  justify-content: center;
  padding: 16px;
  padding-top: 24px;
  gap: 24px;
  color: #fff;
}

.video-gallery h3.video-title {
  line-height: 1.6;
  font-weight: 700;
  font-size: 20px;
  width: 100%;
}

.video-gallery .thumbnail {
  height: 120px;
  cursor: pointer;
  width: 240px;
  
}

.video-gallery .video {
  position: relative;
}

.video-gallery .video:hover .play-icon {
  opacity: 1;
}

.video-gallery .play-icon {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  pointer-events: none;
  opacity: 0;
  transition: opacity 400ms ease;
}

.video-gallery .video .play-icon img {
  height: 50px;
  width: 50px;
}

.video-gallery .all-videos {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.video-gallery .responsive-iframe {
  position: relative;
  height: 0;
  overflow: hidden;
  padding-top: 56.25%;
  padding-bottom: 30px;
}

.video-gallery .responsive-iframe iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
  @media (max-width: 900px) {
  .video-gallery-container {
    width: 100%;
  }
}
  
@media (max-width: 700px) {
  .video-gallery-container .video-gallery {
    flex-direction: column;
  }

  .video-gallery .all-videos {
    display: grid;
    grid-template-columns: 1fr 1fr;
  }

  .video-gallery .thumbnail {
    height: unset;
    width: 100%;
  }
}

@media (max-width: 500px) {
  .video-gallery .all-videos {
    grid-template-columns: 1fr;
  }

  .video-gallery-container {
    max-width: 400px;
  }

  .video-gallery-container h2.title {
    font-size: 24px;
    font-weight: bold;
  }
}
 .BorderColorChangeElement {
  	animation: BorderColorChange 1s ease-out 0s infinite alternate none running;
}
@keyframes BorderColorChange{
  	0%  { border: 10px solid #ffc0cb;}
  	100%  { border: 10px solid #ff69b4;}
}
@keyframes rotateAnim {
    0% { transform: rotate(deg);}
    100% { transform:rotate(360deg);}
}
@keyframes scaler {
  0% {
    transform: scale(1);
  }
  100% {    transform: scale(1.5);
  }
}
.imgAnim691 {
  animation: rotateAnim 10s linear 0s infinite forwards running;
}
.btnAnim691 {
  animation: scaler 1s linear 0s infinite alternate none running;
}
.btnAnim691:hover{
  animation-play-state: paused;
}
.download-button-container {
  width: 90%;
  max-width: 600px;
  background: #eee;
  margin: 24px auto;
  padding: 16px;
  text-align: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  border-radius: 10px;
  box-shadow: inset 0 10px 15px -3px rgba(0, 0, 0, 0.1);
  display: flex;
  flex-direction: column;
  align-items: center;
}

.download-button-container .download-button {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 200px;
  justify-content: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  font-size: 16px;
  font-weight: 300;
  text-transform: uppercase;
  letter-spacing: 2px;
  background: #ef233c;
  border: none;
  padding: 8px;
  cursor: pointer;
  color: #fff;
}

.download-button-container .download-button.active .download-icon {
  animation: bounceAnim 700ms infinite alternate;
}

.download-button-container .download-icon {
  width: 16px;
}

.download-info h3 {
  color: #023047;
  margin-bottom: 12px;
}

.download-info {
  height: 0;
  overflow: hidden;
  transition: all 400ms ease;
}

.download-button-container .download-button.active + .download-info {
  height: 90px;
}

.download-info .download-link {
  font-size: 14px;
  text-transform: uppercase;
  font-weight: 300;
  color: #023047;
  letter-spacing: 4px;
  text-decoration: underline;
  text-underline-offset: 5px;
}

@keyframes bounceAnim {
  to {
    transform: translateY(4px);
  }
}
  

&lt;/style&gt;

                             
                                
&lt;div class=&quot;video-gallery-container&quot;&gt;
&lt;div class=&quot;detail-mod&quot;&gt;
                                &lt;div class=&quot;dm-thumb&quot;&gt;&lt;img alt=&quot;Ishq Vishk Rebound (Hindi)&quot; src=&quot;https://assets-in.bmscdn.com/discovery-catalog/events/et00330412-cykrxblmle-landscape.jpg&quot; title=&quot;Ishq Vishk Rebound (Hindi)&quot; /&gt;&lt;/div&gt;
                                &lt;h3&gt;Ishq Vishk Rebound (Hindi)&lt;/h3&gt;
                                				 
                       

                            &lt;div class=&quot;desc&quot;&gt;  &lt;p&gt;Watch Ishq Vishk Rebound (2024) Hindi full movie online SspectrumLive TV,&lt;br /&gt; Ishq Vishk Rebound (Hindi) movie download 720p HD quality 300MB and 1GB print A unique family and their experience. Follows the lives of four young people who become enmeshed in a web of friendship, love, and self-discovery.&lt;/p&gt;
														&lt;/div&gt;
                            &lt;div class=&quot;mvic-info&quot;&gt;
                                &lt;div class=&quot;mvici-left&quot;&gt;
                                    &lt;p&gt;&lt;strong&gt;Genres: &lt;/strong&gt;Watch Hindi Movies&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Actors: &lt;/strong&gt;Naila Grrewal, Pashmina Roshan, Rohit Saraf&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Director: &lt;/strong&gt;Nipun Dharmadhikari&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Country: &lt;/strong&gt;India&lt;br /&gt;&lt;/p&gt;
                                 &lt;/div&gt;
                                &lt;div class=&quot;mvici-right&quot;&gt;
									                                    &lt;p&gt;&lt;strong&gt;Duration:&lt;/strong&gt;  min&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; &lt;span class=&quot;quality&quot;&gt;CAM&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; 2024&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;IMDb:&lt;/strong&gt; 6.5&lt;/p&gt;

                                                              &lt;p id=&quot;imdb&quot;&gt;&lt;strong&gt;IMDb ID:&lt;/strong&gt; &lt;span id=&quot;imdb_id&quot;&gt;&lt;/span&gt;&lt;/p&gt;    
                                                          &lt;/div&gt;
                                &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;/div&gt;
                            &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;!--keywords--&gt;
                            &lt;div id=&quot;mv-keywords&quot;&gt;
                                &lt;strong class=&quot;mr10&quot;&gt;Keywords:&lt;/strong&gt;
									&lt;h5&gt;Ishq Vishk Rebound (2024) Hindi Movie&lt;/h5&gt;&lt;h5&gt;Ishq Vishk Rebound&amp;nbsp;&lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;.&lt;/h5&gt;                            &lt;/div&gt;
                        &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                    &lt;/div&gt;
  
  
  &lt;div class=&quot;pa-main&quot;&gt;
  &lt;div class=&quot;widget-content&quot;&gt;
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...Subscribe our channel for Upcomiiing New movies notification....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;
&lt;/div&gt;
    
    &lt;center&gt; &lt;h3&gt;Ishq Vishk Rebound (Hindi) 2024&lt;/h3&gt;&lt;/center&gt;
    
    &lt;div class=&quot;container2&quot;&gt;
      
        &lt;div class=&quot;box box1&quot;&gt;&lt;/div&gt;
	
          &lt;div class=&quot;box box2&quot;&gt;
          
         &lt;div class=&quot;video-container&quot;&gt;
          
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;https://teamomw6.com/xwwm3i4kpegqkov2bs4eayodvv3jybg4fk6nlammznufitqgyalgksighhiqfufitqgyalof23cgvvq/master.m3u8&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;/div&gt;                
    

    
    &lt;div class=&quot;download-button-container&quot;&gt;
      &lt;button class=&quot;download-button&quot;&gt;Download&lt;span class=&quot;download-icon&quot;&gt;
          &lt;svg class=&quot;h-6 w-6&quot; fill=&quot;none&quot; stroke-width=&quot;2&quot; stroke=&quot;currentColor&quot; viewbox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
            &lt;path d=&quot;M19 14l-7 7m0 0l-7-7m7 7V3&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
          &lt;/path&gt;&lt;/svg&gt;
        &lt;/span&gt;
      &lt;/button&gt;
    

      &lt;div class=&quot;download-info&quot;&gt;
        &lt;h3&gt;Your download link will appear in 5 seconds.&lt;/h3&gt;
      &lt;/div&gt;
    &lt;/div&gt;
 






&lt;script&gt;
const downloadButton = document.querySelector(
  &quot;.download-button-container .download-button&quot;
);
const downloadHeading = document.querySelector(&quot;.download-info h3&quot;);
const downloadInfo = document.querySelector(&quot;.download-info&quot;);

let downloadTimer;
let remainingTime = 5;
let linkDisplayed = false;

const showDownloadLink = () =&gt; {
  if (!linkDisplayed) {
    const downloadLink = document.createElement(&quot;a&quot;);
    downloadLink.href = &quot;https://sspectrumlivetv.blogspot.com/p/your-download-link-here-below_22.html&quot;;
    downloadLink.innerHTML = &quot;Click Here&quot;;
    downloadLink.classList.add(&quot;download-link&quot;);
    downloadInfo.appendChild(downloadLink);
  }
  linkDisplayed = true;
};

downloadButton.addEventListener(&quot;click&quot;, () =&gt; {
  downloadButton.classList.add(&quot;active&quot;);

  downloadTimer = setInterval(() =&gt; {
    remainingTime--;

    if (remainingTime &lt;= 0) {
      clearInterval(downloadTimer);
      showDownloadLink();
      downloadHeading.innerHTML = &quot;Here is the download link.&quot;;
    } else {
      downloadHeading.innerHTML = `Your download link will appear in ${remainingTime} seconds.`;
    }
  }, 1000);
});
&lt;/script&gt;

  &lt;p&gt;Or Direct Download From Above link &lt;/p&gt;


      
  


  

  

  
  &lt;!--/main--&gt;
&lt;center&gt;&lt;!--info line, ad unit name: Footer--&gt;

&lt;script async=&quot;&quot; src=&quot;https://tags.h12-media.com/load2.js&quot;&gt;&lt;/script&gt;&lt;/center&gt;



            &lt;div id=&quot;copyright&quot;&gt;
                &lt;p&gt;&lt;a href=&quot;&quot; id=&quot;logo-footer&quot;&gt;&lt;/a&gt;&lt;/p&gt;
                &lt;p&gt;Copyright © &lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;. All Rights
                    Reserved 2023&lt;/p&gt;
            &lt;/div&gt;
  
&lt;b&gt;We do not host any files on it’s servers. All files or contents hosted on third party websites.
We do not accept responsibility for contents hosted on third party websites.
We just index those links which are already available in internet&lt;/b&gt;


&lt;/div&gt;&lt;/div&gt;

&lt;style&gt;

.codehap {
      display: flex;
      flex-wrap: wrap;
    }

    .codehapBox, .codehap_box {
      box-sizing: border-box;
      width: 100%;
      padding: 10px;
      border: 1px solid #ccc;
    }

    @media (min-width: 600px) {
      .codehapBox {
        width: 50%;
      }
    }
    
.video-container {
    position: relative;
    padding-bottom: 56.25%;
    padding-top: 0px;
    height: 0%;
    overflow: hidden;
}

.video-container iframe {
    position: absolute;
    top:0;
    left: 0%;
    width: 100%;
    height: 100%;
}
.codehapContent{
 
margin:auto;


}

&lt;/style&gt;


	

 
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/664339226078542791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/06/ishq-vishk-rebound-hindi-2024-new.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/664339226078542791'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/664339226078542791'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/06/ishq-vishk-rebound-hindi-2024-new.html' title='Ishq Vishk Rebound (Hindi) 2024 new bollywood movie'/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFhI-cSriGq70BdGAZhTSdWiYh-2YVfIeJ5k2mGKBvEMtBhnEPp2B1vk_HKn2v4ocTjYwLSx9zNJvtCV1sTgLIuG4yd4vY80ttIJOiY-Sz7vZxj4hkSFff_nXrkX9K9TuJypsTCQK8jX4jEB3OEaT45irQsjYw6anMwBivz5bQCzOxixMWMkvJEXR7K2k/s72-c/Ishq-Vishk-Rebound-2024-Hindi-Language.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-7661061063222949718</id><published>2024-06-17T01:40:00.000-07:00</published><updated>2024-06-17T01:46:54.677-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bollywood Movie"/><category scheme="http://www.blogger.com/atom/ns#" term="South Dubbed"/><title type='text'>Blink (Hindi) 2024 new south movie</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMR5mvY6nE8P6nFNie86ocvHzc7cKGSYhJeAM_zvZVd4kb0Julp75-vBLKmcH913-ZOm4qgvhTyUaJuQHDR07wXOri2XgpO0SLDlgTq4F8pktDSM2Uh9SLH7ZkrR8Rsiy2U0n-r3XHIojK3hrMww3u1-4MGZr5b5hPTst3mpuxO1KfQ68VDKWp3qlX1Gk/s220/Blink-2024-Hindi-Language.png&quot; style=&quot;clear: left; display: block; float: left; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;220&quot; data-original-width=&quot;165&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMR5mvY6nE8P6nFNie86ocvHzc7cKGSYhJeAM_zvZVd4kb0Julp75-vBLKmcH913-ZOm4qgvhTyUaJuQHDR07wXOri2XgpO0SLDlgTq4F8pktDSM2Uh9SLH7ZkrR8Rsiy2U0n-r3XHIojK3hrMww3u1-4MGZr5b5hPTst3mpuxO1KfQ68VDKWp3qlX1Gk/s320/Blink-2024-Hindi-Language.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;style&gt;
.video-gallery-container {
  width: 100%;
  font-family: &quot;Roboto&quot;, sans-serif;
  background: #ffd166;
  padding: 8px 0 0 0;
  margin: 0 auto;
}
  
.video-gallery-container,
.video-gallery-container * {
  box-sizing: border-box;
}
 
.video-gallery-container h2.title {
  text-align: center;
  font-weight: 300;
  text-transform: uppercase;
  font-size: 34px;
  margin-bottom: 24px;
}

.video-gallery-container .video-gallery {
  display: 100%;
  background: #02151e;
  justify-content: center;
  padding: 16px;
  padding-top: 24px;
  gap: 24px;
  color: #fff;
}

.video-gallery h3.video-title {
  line-height: 1.6;
  font-weight: 700;
  font-size: 20px;
  width: 100%;
}

.video-gallery .thumbnail {
  height: 120px;
  cursor: pointer;
  width: 240px;
  
}

.video-gallery .video {
  position: relative;
}

.video-gallery .video:hover .play-icon {
  opacity: 1;
}

.video-gallery .play-icon {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  pointer-events: none;
  opacity: 0;
  transition: opacity 400ms ease;
}

.video-gallery .video .play-icon img {
  height: 50px;
  width: 50px;
}

.video-gallery .all-videos {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.video-gallery .responsive-iframe {
  position: relative;
  height: 0;
  overflow: hidden;
  padding-top: 56.25%;
  padding-bottom: 30px;
}

.video-gallery .responsive-iframe iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
  @media (max-width: 900px) {
  .video-gallery-container {
    width: 100%;
  }
}
  
@media (max-width: 700px) {
  .video-gallery-container .video-gallery {
    flex-direction: column;
  }

  .video-gallery .all-videos {
    display: grid;
    grid-template-columns: 1fr 1fr;
  }

  .video-gallery .thumbnail {
    height: unset;
    width: 100%;
  }
}

@media (max-width: 500px) {
  .video-gallery .all-videos {
    grid-template-columns: 1fr;
  }

  .video-gallery-container {
    max-width: 400px;
  }

  .video-gallery-container h2.title {
    font-size: 24px;
    font-weight: bold;
  }
}
 .BorderColorChangeElement {
  	animation: BorderColorChange 1s ease-out 0s infinite alternate none running;
}
@keyframes BorderColorChange{
  	0%  { border: 10px solid #ffc0cb;}
  	100%  { border: 10px solid #ff69b4;}
}
@keyframes rotateAnim {
    0% { transform: rotate(deg);}
    100% { transform:rotate(360deg);}
}
@keyframes scaler {
  0% {
    transform: scale(1);
  }
  100% {    transform: scale(1.5);
  }
}
.imgAnim691 {
  animation: rotateAnim 10s linear 0s infinite forwards running;
}
.btnAnim691 {
  animation: scaler 1s linear 0s infinite alternate none running;
}
.btnAnim691:hover{
  animation-play-state: paused;
}
.download-button-container {
  width: 90%;
  max-width: 600px;
  background: #eee;
  margin: 24px auto;
  padding: 16px;
  text-align: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  border-radius: 10px;
  box-shadow: inset 0 10px 15px -3px rgba(0, 0, 0, 0.1);
  display: flex;
  flex-direction: column;
  align-items: center;
}

.download-button-container .download-button {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 200px;
  justify-content: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  font-size: 16px;
  font-weight: 300;
  text-transform: uppercase;
  letter-spacing: 2px;
  background: #ef233c;
  border: none;
  padding: 8px;
  cursor: pointer;
  color: #fff;
}

.download-button-container .download-button.active .download-icon {
  animation: bounceAnim 700ms infinite alternate;
}

.download-button-container .download-icon {
  width: 16px;
}

.download-info h3 {
  color: #023047;
  margin-bottom: 12px;
}

.download-info {
  height: 0;
  overflow: hidden;
  transition: all 400ms ease;
}

.download-button-container .download-button.active + .download-info {
  height: 90px;
}

.download-info .download-link {
  font-size: 14px;
  text-transform: uppercase;
  font-weight: 300;
  color: #023047;
  letter-spacing: 4px;
  text-decoration: underline;
  text-underline-offset: 5px;
}

@keyframes bounceAnim {
  to {
    transform: translateY(4px);
  }
}
  

&lt;/style&gt;

                             
                                
&lt;div class=&quot;video-gallery-container&quot;&gt;
&lt;div class=&quot;detail-mod&quot;&gt;
                                &lt;div class=&quot;dm-thumb&quot;&gt;&lt;img alt=&quot;Blink (Hindi)&quot; src=&quot;https://i.ytimg.com/vi/rjykTuzJ634/maxresdefault.jpg&quot; title=&quot;Blink (Hindi)&quot; /&gt;&lt;/div&gt;
                                &lt;h3&gt;Blink (Hindi) &lt;/h3&gt;
                                				

                       

                            &lt;div class=&quot;desc&quot;&gt;  &lt;p&gt;Watch Blink (2024) Hindi full movie online SspectrumLive TV,&lt;br /&gt; Blink (Hindi) movie download 720p HD quality 300MB and 1GB print A unique family and their experience. Apoorva hides his failed MA from his mother in Bengaluru. Working odd jobs and relying on Swapna, his ability to control blinking becomes a curse when an old man says his father lives.&lt;/p&gt;
														&lt;/div&gt;
                            &lt;div class=&quot;mvic-info&quot;&gt;
                                &lt;div class=&quot;mvici-left&quot;&gt;
                                    &lt;p&gt;&lt;strong&gt;Genres: &lt;/strong&gt;Watch Hindi Movies&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Actors: &lt;/strong&gt;Chaithra J Achar, Ravi aneka, Suresh Anagalli&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Director: &lt;/strong&gt;Bengaluru Srinidhi&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Country: &lt;/strong&gt;India&lt;br /&gt;&lt;/p&gt;
                                 &lt;/div&gt;
                                &lt;div class=&quot;mvici-right&quot;&gt;
									                                    &lt;p&gt;&lt;strong&gt;Duration:&lt;/strong&gt;  min&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; &lt;span class=&quot;quality&quot;&gt;CAM&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; 2024&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;IMDb:&lt;/strong&gt; 7.9&lt;/p&gt;

                                                              &lt;p id=&quot;imdb&quot;&gt;&lt;strong&gt;IMDb ID:&lt;/strong&gt; &lt;span id=&quot;imdb_id&quot;&gt;&lt;/span&gt;&lt;/p&gt;    
                                                          &lt;/div&gt;
                                &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;/div&gt;
                            &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;!--keywords--&gt;
                            &lt;div id=&quot;mv-keywords&quot;&gt;
                                &lt;strong class=&quot;mr10&quot;&gt;Keywords:&lt;/strong&gt;
									&lt;h5&gt;Blink (2024) Hindi Movie&lt;/h5&gt;&lt;h5&gt;Blink&amp;nbsp;&lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;&lt;/h5&gt;                            &lt;/div&gt;
                        &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                    &lt;/div&gt;  
  
  &lt;div class=&quot;pa-main&quot;&gt;
  &lt;div class=&quot;widget-content&quot;&gt;
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...Subscribe our channel for Upcomiiing New movies notification....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;
&lt;/div&gt;
    
    &lt;center&gt; &lt;h3&gt;Blink (Hindi) 2024 &lt;/h3&gt;&lt;/center&gt;
    
    &lt;div class=&quot;container2&quot;&gt;
      
        &lt;div class=&quot;box box1&quot;&gt;&lt;/div&gt;
	
          &lt;div class=&quot;box box2&quot;&gt;
          
         &lt;div class=&quot;video-container&quot;&gt;
          
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;https://teamomw6.com/xwwm2r4vpegqkov2bs4eapgcvfno5mhmxdwvn2bavqmuhsnpy5xojbrysfvaymuhsnpy5xaaa3fmmna/master.m3u8&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;/div&gt;                
    

    
    &lt;div class=&quot;download-button-container&quot;&gt;
      &lt;button class=&quot;download-button&quot;&gt;Download&lt;span class=&quot;download-icon&quot;&gt;
          &lt;svg class=&quot;h-6 w-6&quot; fill=&quot;none&quot; stroke-width=&quot;2&quot; stroke=&quot;currentColor&quot; viewbox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
            &lt;path d=&quot;M19 14l-7 7m0 0l-7-7m7 7V3&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
          &lt;/path&gt;&lt;/svg&gt;
        &lt;/span&gt;
      &lt;/button&gt;
    

      &lt;div class=&quot;download-info&quot;&gt;
        &lt;h3&gt;Your download link will appear in 5 seconds.&lt;/h3&gt;
      &lt;/div&gt;
    &lt;/div&gt;
 






&lt;script&gt;
const downloadButton = document.querySelector(
  &quot;.download-button-container .download-button&quot;
);
const downloadHeading = document.querySelector(&quot;.download-info h3&quot;);
const downloadInfo = document.querySelector(&quot;.download-info&quot;);

let downloadTimer;
let remainingTime = 5;
let linkDisplayed = false;

const showDownloadLink = () =&gt; {
  if (!linkDisplayed) {
    const downloadLink = document.createElement(&quot;a&quot;);
    downloadLink.href = &quot;https://sspectrumlivetv.blogspot.com/p/your-download-link-here-below_37.html&quot;;
    downloadLink.innerHTML = &quot;Click Here&quot;;
    downloadLink.classList.add(&quot;download-link&quot;);
    downloadInfo.appendChild(downloadLink);
  }
  linkDisplayed = true;
};

downloadButton.addEventListener(&quot;click&quot;, () =&gt; {
  downloadButton.classList.add(&quot;active&quot;);

  downloadTimer = setInterval(() =&gt; {
    remainingTime--;

    if (remainingTime &lt;= 0) {
      clearInterval(downloadTimer);
      showDownloadLink();
      downloadHeading.innerHTML = &quot;Here is the download link.&quot;;
    } else {
      downloadHeading.innerHTML = `Your download link will appear in ${remainingTime} seconds.`;
    }
  }, 1000);
});
&lt;/script&gt;

  &lt;p&gt;Or Direct Download From Above link &lt;/p&gt;


      
  


  

  

  
  &lt;!--/main--&gt;
&lt;center&gt;&lt;!--info line, ad unit name: Footer--&gt;

&lt;script async=&quot;&quot; src=&quot;https://tags.h12-media.com/load2.js&quot;&gt;&lt;/script&gt;&lt;/center&gt;



            &lt;div id=&quot;copyright&quot;&gt;
                &lt;p&gt;&lt;a href=&quot;&quot; id=&quot;logo-footer&quot;&gt;&lt;/a&gt;&lt;/p&gt;
                &lt;p&gt;Copyright © &lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;. All Rights
                    Reserved 2023&lt;/p&gt;
            &lt;/div&gt;
  
&lt;b&gt;We do not host any files on it’s servers. All files or contents hosted on third party websites.
We do not accept responsibility for contents hosted on third party websites.
We just index those links which are already available in internet&lt;/b&gt;


&lt;/div&gt;&lt;/div&gt;

&lt;style&gt;

.codehap {
      display: flex;
      flex-wrap: wrap;
    }

    .codehapBox, .codehap_box {
      box-sizing: border-box;
      width: 100%;
      padding: 10px;
      border: 1px solid #ccc;
    }

    @media (min-width: 600px) {
      .codehapBox {
        width: 50%;
      }
    }
    
.video-container {
    position: relative;
    padding-bottom: 56.25%;
    padding-top: 0px;
    height: 0%;
    overflow: hidden;
}

.video-container iframe {
    position: absolute;
    top:0;
    left: 0%;
    width: 100%;
    height: 100%;
}
.codehapContent{
 
margin:auto;


}

&lt;/style&gt;


	

 
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/7661061063222949718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/06/blink-hindi-2024-new-south-movie.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/7661061063222949718'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/7661061063222949718'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/06/blink-hindi-2024-new-south-movie.html' title='Blink (Hindi) 2024 new south movie'/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMR5mvY6nE8P6nFNie86ocvHzc7cKGSYhJeAM_zvZVd4kb0Julp75-vBLKmcH913-ZOm4qgvhTyUaJuQHDR07wXOri2XgpO0SLDlgTq4F8pktDSM2Uh9SLH7ZkrR8Rsiy2U0n-r3XHIojK3hrMww3u1-4MGZr5b5hPTst3mpuxO1KfQ68VDKWp3qlX1Gk/s72-c/Blink-2024-Hindi-Language.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-7746393238118744243</id><published>2024-06-17T00:48:00.000-07:00</published><updated>2024-06-17T00:48:04.319-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bollywood Movie"/><title type='text'>Munjya (Hindi) 2024 new bollywood movie</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfOVJpilmAUoe_dlri1pipDIcGOFO36oOQln7bhRD8ARQChppAP4zUgegcS0lMUst9GCqsuzXwNHBq1T3R0cSaRCTzmKlV5eUOn79bbqoWsRMhEhuaDsXmhS9Vr9i9vQ-p-J9Qc2IjwzVkbfr1XRIukdlM1eOg0y1PtsM5dL43vxZ8ZVfUiRSHihIxUqg/s220/Munjya-2024-Hindi-Language.png&quot; style=&quot;clear: left; display: block; float: left; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;220&quot; data-original-width=&quot;165&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfOVJpilmAUoe_dlri1pipDIcGOFO36oOQln7bhRD8ARQChppAP4zUgegcS0lMUst9GCqsuzXwNHBq1T3R0cSaRCTzmKlV5eUOn79bbqoWsRMhEhuaDsXmhS9Vr9i9vQ-p-J9Qc2IjwzVkbfr1XRIukdlM1eOg0y1PtsM5dL43vxZ8ZVfUiRSHihIxUqg/s320/Munjya-2024-Hindi-Language.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;style&gt;
.video-gallery-container {
  width: 100%;
  font-family: &quot;Roboto&quot;, sans-serif;
  background: #ffd166;
  padding: 8px 0 0 0;
  margin: 0 auto;
}
  
.video-gallery-container,
.video-gallery-container * {
  box-sizing: border-box;
}
 
.video-gallery-container h2.title {
  text-align: center;
  font-weight: 300;
  text-transform: uppercase;
  font-size: 34px;
  margin-bottom: 24px;
}

.video-gallery-container .video-gallery {
  display: 100%;
  background: #02151e;
  justify-content: center;
  padding: 16px;
  padding-top: 24px;
  gap: 24px;
  color: #fff;
}

.video-gallery h3.video-title {
  line-height: 1.6;
  font-weight: 700;
  font-size: 20px;
  width: 100%;
}

.video-gallery .thumbnail {
  height: 120px;
  cursor: pointer;
  width: 240px;
  
}

.video-gallery .video {
  position: relative;
}

.video-gallery .video:hover .play-icon {
  opacity: 1;
}

.video-gallery .play-icon {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  pointer-events: none;
  opacity: 0;
  transition: opacity 400ms ease;
}

.video-gallery .video .play-icon img {
  height: 50px;
  width: 50px;
}

.video-gallery .all-videos {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.video-gallery .responsive-iframe {
  position: relative;
  height: 0;
  overflow: hidden;
  padding-top: 56.25%;
  padding-bottom: 30px;
}

.video-gallery .responsive-iframe iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
  @media (max-width: 900px) {
  .video-gallery-container {
    width: 100%;
  }
}
  
@media (max-width: 700px) {
  .video-gallery-container .video-gallery {
    flex-direction: column;
  }

  .video-gallery .all-videos {
    display: grid;
    grid-template-columns: 1fr 1fr;
  }

  .video-gallery .thumbnail {
    height: unset;
    width: 100%;
  }
}

@media (max-width: 500px) {
  .video-gallery .all-videos {
    grid-template-columns: 1fr;
  }

  .video-gallery-container {
    max-width: 400px;
  }

  .video-gallery-container h2.title {
    font-size: 24px;
    font-weight: bold;
  }
}
 .BorderColorChangeElement {
  	animation: BorderColorChange 1s ease-out 0s infinite alternate none running;
}
@keyframes BorderColorChange{
  	0%  { border: 10px solid #ffc0cb;}
  	100%  { border: 10px solid #ff69b4;}
}
@keyframes rotateAnim {
    0% { transform: rotate(deg);}
    100% { transform:rotate(360deg);}
}
@keyframes scaler {
  0% {
    transform: scale(1);
  }
  100% {    transform: scale(1.5);
  }
}
.imgAnim691 {
  animation: rotateAnim 10s linear 0s infinite forwards running;
}
.btnAnim691 {
  animation: scaler 1s linear 0s infinite alternate none running;
}
.btnAnim691:hover{
  animation-play-state: paused;
}
.download-button-container {
  width: 90%;
  max-width: 600px;
  background: #eee;
  margin: 24px auto;
  padding: 16px;
  text-align: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  border-radius: 10px;
  box-shadow: inset 0 10px 15px -3px rgba(0, 0, 0, 0.1);
  display: flex;
  flex-direction: column;
  align-items: center;
}

.download-button-container .download-button {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 200px;
  justify-content: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  font-size: 16px;
  font-weight: 300;
  text-transform: uppercase;
  letter-spacing: 2px;
  background: #ef233c;
  border: none;
  padding: 8px;
  cursor: pointer;
  color: #fff;
}

.download-button-container .download-button.active .download-icon {
  animation: bounceAnim 700ms infinite alternate;
}

.download-button-container .download-icon {
  width: 16px;
}

.download-info h3 {
  color: #023047;
  margin-bottom: 12px;
}

.download-info {
  height: 0;
  overflow: hidden;
  transition: all 400ms ease;
}

.download-button-container .download-button.active + .download-info {
  height: 90px;
}

.download-info .download-link {
  font-size: 14px;
  text-transform: uppercase;
  font-weight: 300;
  color: #023047;
  letter-spacing: 4px;
  text-decoration: underline;
  text-underline-offset: 5px;
}

@keyframes bounceAnim {
  to {
    transform: translateY(4px);
  }
}
  

&lt;/style&gt;

                             
                                
&lt;div class=&quot;video-gallery-container&quot;&gt;
&lt;div class=&quot;detail-mod&quot;&gt;
                                &lt;div class=&quot;dm-thumb&quot;&gt;&lt;img alt=&quot;Munjya (Hindi)&quot; src=&quot;https://akm-img-a-in.tosshub.com/aajtak/images/story/202406/6662ade2996cb-munjya-film-trailer-24291560-16x9.jpg&quot; title=&quot;Munjya (Hindi)&quot; /&gt;&lt;/div&gt;
                                &lt;h3&gt;Munjya (Hindi) &lt;/h3&gt;
                       

                            &lt;div class=&quot;desc&quot;&gt;  &lt;p&gt;Watch Munjya (2024) Hindi full movie online SspectrumLive TV,&lt;br /&gt; Munjya (Hindi) movie download 720p HD quality 300MB and 1GB print A unique family and their experience. Makers of Stree bring to you Munjya, the perfect blend of comedy and horror to beat the summer heat for Gen Z, kids, and the whole family.&lt;/p&gt;
														&lt;/div&gt;
                            &lt;div class=&quot;mvic-info&quot;&gt;
                                &lt;div class=&quot;mvici-left&quot;&gt;
                                    &lt;p&gt;&lt;strong&gt;Genres: &lt;/strong&gt;Watch Hindi Movies&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Actors: &lt;/strong&gt;Abhay Verma, Mona Singh, Sharvari Wagh&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Director: &lt;/strong&gt;Aditya Sarpotdar&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Country: &lt;/strong&gt;India&lt;br /&gt;&lt;/p&gt;
                                 &lt;/div&gt;
                                &lt;div class=&quot;mvici-right&quot;&gt;
									                                    &lt;p&gt;&lt;strong&gt;Duration:&lt;/strong&gt;  min&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; &lt;span class=&quot;quality&quot;&gt;HDTS&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; 2024&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;IMDb:&lt;/strong&gt; 6.8&lt;/p&gt;

                                                              &lt;p id=&quot;imdb&quot;&gt;&lt;strong&gt;IMDb ID:&lt;/strong&gt; &lt;span id=&quot;imdb_id&quot;&gt;&lt;/span&gt;&lt;/p&gt;    
                                                          &lt;/div&gt;
                                &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;/div&gt;
                            &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;!--keywords--&gt;
                            &lt;div id=&quot;mv-keywords&quot;&gt;
                                &lt;strong class=&quot;mr10&quot;&gt;Keywords:&lt;/strong&gt;
									&lt;h5&gt;Munjya (2024) Hindi Movie&lt;/h5&gt;&lt;h5&gt;Munjya&amp;nbsp;&amp;nbsp;&lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;&lt;/h5&gt;                            &lt;/div&gt;
                        &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                    &lt;/div&gt;
  
  
  &lt;div class=&quot;pa-main&quot;&gt;
  &lt;div class=&quot;widget-content&quot;&gt;
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...Subscribe our channel for Upcomiiing New movies notification....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;
&lt;/div&gt;
    
    &lt;center&gt; &lt;h3&gt;Munjya (Hindi) 2024 &lt;/h3&gt;&lt;/center&gt;
    
    &lt;div class=&quot;container2&quot;&gt;
      
        &lt;div class=&quot;box box1&quot;&gt;&lt;/div&gt;
	
          &lt;div class=&quot;box box2&quot;&gt;
          
         &lt;div class=&quot;video-container&quot;&gt;
          
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;https://teamomw5.com/xwwm3iuxpegqkov2bs4eapw5v6m6kmvnpklilpgvcuzdf5btv2qfaptddoea4zdf5btv2qe4mbqclma/master.m3u8&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;/div&gt;                
    

    
    &lt;div class=&quot;download-button-container&quot;&gt;
      &lt;button class=&quot;download-button&quot;&gt;Download&lt;span class=&quot;download-icon&quot;&gt;
          &lt;svg class=&quot;h-6 w-6&quot; fill=&quot;none&quot; stroke-width=&quot;2&quot; stroke=&quot;currentColor&quot; viewbox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
            &lt;path d=&quot;M19 14l-7 7m0 0l-7-7m7 7V3&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
          &lt;/path&gt;&lt;/svg&gt;
        &lt;/span&gt;
      &lt;/button&gt;
    

      &lt;div class=&quot;download-info&quot;&gt;
        &lt;h3&gt;Your download link will appear in 5 seconds.&lt;/h3&gt;
      &lt;/div&gt;
    &lt;/div&gt;
 






&lt;script&gt;
const downloadButton = document.querySelector(
  &quot;.download-button-container .download-button&quot;
);
const downloadHeading = document.querySelector(&quot;.download-info h3&quot;);
const downloadInfo = document.querySelector(&quot;.download-info&quot;);

let downloadTimer;
let remainingTime = 5;
let linkDisplayed = false;

const showDownloadLink = () =&gt; {
  if (!linkDisplayed) {
    const downloadLink = document.createElement(&quot;a&quot;);
    downloadLink.href = &quot;https://sspectrumlivetv.blogspot.com/p/your-download-link-here-below_17.html&quot;;
    downloadLink.innerHTML = &quot;Click Here&quot;;
    downloadLink.classList.add(&quot;download-link&quot;);
    downloadInfo.appendChild(downloadLink);
  }
  linkDisplayed = true;
};

downloadButton.addEventListener(&quot;click&quot;, () =&gt; {
  downloadButton.classList.add(&quot;active&quot;);

  downloadTimer = setInterval(() =&gt; {
    remainingTime--;

    if (remainingTime &lt;= 0) {
      clearInterval(downloadTimer);
      showDownloadLink();
      downloadHeading.innerHTML = &quot;Here is the download link.&quot;;
    } else {
      downloadHeading.innerHTML = `Your download link will appear in ${remainingTime} seconds.`;
    }
  }, 1000);
});
&lt;/script&gt;

  &lt;p&gt;Or Direct Download From Above link &lt;/p&gt;


      
  


  

  

  
  &lt;!--/main--&gt;
&lt;center&gt;&lt;!--info line, ad unit name: Footer--&gt;

&lt;script async=&quot;&quot; src=&quot;https://tags.h12-media.com/load2.js&quot;&gt;&lt;/script&gt;&lt;/center&gt;



            &lt;div id=&quot;copyright&quot;&gt;
                &lt;p&gt;&lt;a href=&quot;&quot; id=&quot;logo-footer&quot;&gt;&lt;/a&gt;&lt;/p&gt;
                &lt;p&gt;Copyright © &lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;. All Rights
                    Reserved 2023&lt;/p&gt;
            &lt;/div&gt;
  
&lt;b&gt;We do not host any files on it’s servers. All files or contents hosted on third party websites.
We do not accept responsibility for contents hosted on third party websites.
We just index those links which are already available in internet&lt;/b&gt;


&lt;/div&gt;&lt;/div&gt;

&lt;style&gt;

.codehap {
      display: flex;
      flex-wrap: wrap;
    }

    .codehapBox, .codehap_box {
      box-sizing: border-box;
      width: 100%;
      padding: 10px;
      border: 1px solid #ccc;
    }

    @media (min-width: 600px) {
      .codehapBox {
        width: 50%;
      }
    }
    
.video-container {
    position: relative;
    padding-bottom: 56.25%;
    padding-top: 0px;
    height: 0%;
    overflow: hidden;
}

.video-container iframe {
    position: absolute;
    top:0;
    left: 0%;
    width: 100%;
    height: 100%;
}
.codehapContent{
 
margin:auto;


}

&lt;/style&gt;


	

 
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/7746393238118744243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/06/munjya-hindi-2024-new-bollywood-movie.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/7746393238118744243'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/7746393238118744243'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/06/munjya-hindi-2024-new-bollywood-movie.html' title='Munjya (Hindi) 2024 new bollywood movie'/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfOVJpilmAUoe_dlri1pipDIcGOFO36oOQln7bhRD8ARQChppAP4zUgegcS0lMUst9GCqsuzXwNHBq1T3R0cSaRCTzmKlV5eUOn79bbqoWsRMhEhuaDsXmhS9Vr9i9vQ-p-J9Qc2IjwzVkbfr1XRIukdlM1eOg0y1PtsM5dL43vxZ8ZVfUiRSHihIxUqg/s72-c/Munjya-2024-Hindi-Language.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-8732929058034116613</id><published>2024-06-16T22:40:00.000-07:00</published><updated>2024-06-16T22:40:41.473-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Marathi Movies"/><title type='text'>Mylek (Marathi) 2024 </title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQiMqILjisInOKwaIajKzHNxNiEyHtVjrcC5myAJVLZRBr3YXPKSBvbGlb_ttlF3usXIOr5hLmXiYC0zfL9T91Boges_Vm4bDnrN5-GSdIJO73UmjUJxd5nVmSGpV1YwX86wgqwRW0NJfdvJbWHPXL21sK0pzXb0vdJypylz2vZ3SUqFotAVE_R96iosc/s220/Mylek-2024-Marathi-Language.png&quot; style=&quot;clear: left; display: block; float: left; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;220&quot; data-original-width=&quot;165&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQiMqILjisInOKwaIajKzHNxNiEyHtVjrcC5myAJVLZRBr3YXPKSBvbGlb_ttlF3usXIOr5hLmXiYC0zfL9T91Boges_Vm4bDnrN5-GSdIJO73UmjUJxd5nVmSGpV1YwX86wgqwRW0NJfdvJbWHPXL21sK0pzXb0vdJypylz2vZ3SUqFotAVE_R96iosc/s320/Mylek-2024-Marathi-Language.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;style&gt;
.video-gallery-container {
  width: 100%;
  font-family: &quot;Roboto&quot;, sans-serif;
  background: #ffd166;
  padding: 8px 0 0 0;
  margin: 0 auto;
}
  
.video-gallery-container,
.video-gallery-container * {
  box-sizing: border-box;
}
 
.video-gallery-container h2.title {
  text-align: center;
  font-weight: 300;
  text-transform: uppercase;
  font-size: 34px;
  margin-bottom: 24px;
}

.video-gallery-container .video-gallery {
  display: 100%;
  background: #02151e;
  justify-content: center;
  padding: 16px;
  padding-top: 24px;
  gap: 24px;
  color: #fff;
}

.video-gallery h3.video-title {
  line-height: 1.6;
  font-weight: 700;
  font-size: 20px;
  width: 100%;
}

.video-gallery .thumbnail {
  height: 120px;
  cursor: pointer;
  width: 240px;
  
}

.video-gallery .video {
  position: relative;
}

.video-gallery .video:hover .play-icon {
  opacity: 1;
}

.video-gallery .play-icon {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  pointer-events: none;
  opacity: 0;
  transition: opacity 400ms ease;
}

.video-gallery .video .play-icon img {
  height: 50px;
  width: 50px;
}

.video-gallery .all-videos {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.video-gallery .responsive-iframe {
  position: relative;
  height: 0;
  overflow: hidden;
  padding-top: 56.25%;
  padding-bottom: 30px;
}

.video-gallery .responsive-iframe iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
  @media (max-width: 900px) {
  .video-gallery-container {
    width: 100%;
  }
}
  
@media (max-width: 700px) {
  .video-gallery-container .video-gallery {
    flex-direction: column;
  }

  .video-gallery .all-videos {
    display: grid;
    grid-template-columns: 1fr 1fr;
  }

  .video-gallery .thumbnail {
    height: unset;
    width: 100%;
  }
}

@media (max-width: 500px) {
  .video-gallery .all-videos {
    grid-template-columns: 1fr;
  }

  .video-gallery-container {
    max-width: 400px;
  }

  .video-gallery-container h2.title {
    font-size: 24px;
    font-weight: bold;
  }
}
 .BorderColorChangeElement {
  	animation: BorderColorChange 1s ease-out 0s infinite alternate none running;
}
@keyframes BorderColorChange{
  	0%  { border: 10px solid #ffc0cb;}
  	100%  { border: 10px solid #ff69b4;}
}
@keyframes rotateAnim {
    0% { transform: rotate(deg);}
    100% { transform:rotate(360deg);}
}
@keyframes scaler {
  0% {
    transform: scale(1);
  }
  100% {    transform: scale(1.5);
  }
}
.imgAnim691 {
  animation: rotateAnim 10s linear 0s infinite forwards running;
}
.btnAnim691 {
  animation: scaler 1s linear 0s infinite alternate none running;
}
.btnAnim691:hover{
  animation-play-state: paused;
}
.download-button-container {
  width: 90%;
  max-width: 600px;
  background: #eee;
  margin: 24px auto;
  padding: 16px;
  text-align: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  border-radius: 10px;
  box-shadow: inset 0 10px 15px -3px rgba(0, 0, 0, 0.1);
  display: flex;
  flex-direction: column;
  align-items: center;
}

.download-button-container .download-button {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 200px;
  justify-content: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  font-size: 16px;
  font-weight: 300;
  text-transform: uppercase;
  letter-spacing: 2px;
  background: #ef233c;
  border: none;
  padding: 8px;
  cursor: pointer;
  color: #fff;
}

.download-button-container .download-button.active .download-icon {
  animation: bounceAnim 700ms infinite alternate;
}

.download-button-container .download-icon {
  width: 16px;
}

.download-info h3 {
  color: #023047;
  margin-bottom: 12px;
}

.download-info {
  height: 0;
  overflow: hidden;
  transition: all 400ms ease;
}

.download-button-container .download-button.active + .download-info {
  height: 90px;
}

.download-info .download-link {
  font-size: 14px;
  text-transform: uppercase;
  font-weight: 300;
  color: #023047;
  letter-spacing: 4px;
  text-decoration: underline;
  text-underline-offset: 5px;
}

@keyframes bounceAnim {
  to {
    transform: translateY(4px);
  }
}
  

&lt;/style&gt;

                             
                                
&lt;div class=&quot;video-gallery-container&quot;&gt;
&lt;div class=&quot;detail-mod&quot;&gt;
                                &lt;div class=&quot;dm-thumb&quot;&gt;&lt;img alt=&quot;Mylek (Marathi)&quot; src=&quot;https://static.toiimg.com/thumb/msid-109690359,width-1280,resizemode-4/109690359.jpg&quot; title=&quot;Mylek (Marathi)&quot; /&gt;&lt;/div&gt;
                                &lt;h3&gt;Mylek (Marathi) &lt;/h3&gt;
                                				
 
                       

                            &lt;div class=&quot;desc&quot;&gt;  &lt;p&gt;Watch Mylek (2024) Marathi full movie online SspectrumLive TV,&lt;br /&gt; Mylek (Marathi) movie download 720p HD quality 300MB and 1GB print A unique family and their experience. A young single mother struggling to balance her career and personal life navigates a loving but challenging relationship with her strong willed and intrepid teenage daughter as she hits puberty.&lt;/p&gt;
														&lt;/div&gt;
                            &lt;div class=&quot;mvic-info&quot;&gt;
                                &lt;div class=&quot;mvici-left&quot;&gt;
                                    &lt;p&gt;&lt;strong&gt;Genres: &lt;/strong&gt;Marathi&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Actors: &lt;/strong&gt;Sanayaah Anand, Sonali Khare, Umesh Kamat&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Director: &lt;/strong&gt;Priyanka Tanwar&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Country: &lt;/strong&gt;India&lt;br /&gt;&lt;/p&gt;
                                 &lt;/div&gt;
                                &lt;div class=&quot;mvici-right&quot;&gt;
									                                    &lt;p&gt;&lt;strong&gt;Duration:&lt;/strong&gt;  min&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; &lt;span class=&quot;quality&quot;&gt;HD&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; 2024&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;IMDb:&lt;/strong&gt; 8.3&lt;/p&gt;

                                                              &lt;p id=&quot;imdb&quot;&gt;&lt;strong&gt;IMDb ID:&lt;/strong&gt; &lt;span id=&quot;imdb_id&quot;&gt;&lt;/span&gt;&lt;/p&gt;    
                                                          &lt;/div&gt;
                                &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;/div&gt;
                            &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;!--keywords--&gt;
                            &lt;div id=&quot;mv-keywords&quot;&gt;
                                &lt;strong class=&quot;mr10&quot;&gt;Keywords:&lt;/strong&gt;
									&lt;h5&gt;Mylek (2024) Marathi Movie&lt;/h5&gt;&lt;h5&gt;Mylek SspectrumLive TV&lt;/h5&gt;                            &lt;/div&gt;
                        &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                    &lt;/div&gt;  
  &lt;div class=&quot;pa-main&quot;&gt;
  &lt;div class=&quot;widget-content&quot;&gt;
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...Subscribe our channel for Upcomiiing New movies notification....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;
&lt;/div&gt;
    
    &lt;center&gt; &lt;h3&gt;Mylek (Marathi) 2024 &lt;/h3&gt;&lt;/center&gt;
    
    &lt;div class=&quot;container2&quot;&gt;
      
        &lt;div class=&quot;box box1&quot;&gt;&lt;/div&gt;
	
          &lt;div class=&quot;box box2&quot;&gt;
          
         &lt;div class=&quot;video-container&quot;&gt;
          
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;https://teamomw5.com/xwwm2suupegqkov2bs4eapmz7tvmj5k24udmtzbrgain7u6lkmhdtidjb6maiin7u6lkmhcrza3dhja/master.m3u8&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;/div&gt;                
    

    
    &lt;div class=&quot;download-button-container&quot;&gt;
      &lt;button class=&quot;download-button&quot;&gt;Download&lt;span class=&quot;download-icon&quot;&gt;
          &lt;svg class=&quot;h-6 w-6&quot; fill=&quot;none&quot; stroke-width=&quot;2&quot; stroke=&quot;currentColor&quot; viewbox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
            &lt;path d=&quot;M19 14l-7 7m0 0l-7-7m7 7V3&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
          &lt;/path&gt;&lt;/svg&gt;
        &lt;/span&gt;
      &lt;/button&gt;
    

      &lt;div class=&quot;download-info&quot;&gt;
        &lt;h3&gt;Your download link will appear in 5 seconds.&lt;/h3&gt;
      &lt;/div&gt;
    &lt;/div&gt;
 






&lt;script&gt;
const downloadButton = document.querySelector(
  &quot;.download-button-container .download-button&quot;
);
const downloadHeading = document.querySelector(&quot;.download-info h3&quot;);
const downloadInfo = document.querySelector(&quot;.download-info&quot;);

let downloadTimer;
let remainingTime = 5;
let linkDisplayed = false;

const showDownloadLink = () =&gt; {
  if (!linkDisplayed) {
    const downloadLink = document.createElement(&quot;a&quot;);
    downloadLink.href = &quot;https://sspectrumlivetv.blogspot.com/p/your-download-link-here-below.html&quot;;
    downloadLink.innerHTML = &quot;Click Here&quot;;
    downloadLink.classList.add(&quot;download-link&quot;);
    downloadInfo.appendChild(downloadLink);
  }
  linkDisplayed = true;
};

downloadButton.addEventListener(&quot;click&quot;, () =&gt; {
  downloadButton.classList.add(&quot;active&quot;);

  downloadTimer = setInterval(() =&gt; {
    remainingTime--;

    if (remainingTime &lt;= 0) {
      clearInterval(downloadTimer);
      showDownloadLink();
      downloadHeading.innerHTML = &quot;Here is the download link.&quot;;
    } else {
      downloadHeading.innerHTML = `Your download link will appear in ${remainingTime} seconds.`;
    }
  }, 1000);
});
&lt;/script&gt;

  &lt;p&gt;Or Direct Download From Above link &lt;/p&gt;


      
  


  

  

  
  &lt;!--/main--&gt;
&lt;center&gt;&lt;!--info line, ad unit name: Footer--&gt;

&lt;script async=&quot;&quot; src=&quot;https://tags.h12-media.com/load2.js&quot;&gt;&lt;/script&gt;&lt;/center&gt;



            &lt;div id=&quot;copyright&quot;&gt;
                &lt;p&gt;&lt;a href=&quot;&quot; id=&quot;logo-footer&quot;&gt;&lt;/a&gt;&lt;/p&gt;
                &lt;p&gt;Copyright © &lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;. All Rights
                    Reserved 2023&lt;/p&gt;
            &lt;/div&gt;
  
&lt;b&gt;We do not host any files on it’s servers. All files or contents hosted on third party websites.
We do not accept responsibility for contents hosted on third party websites.
We just index those links which are already available in internet&lt;/b&gt;


&lt;/div&gt;&lt;/div&gt;

&lt;style&gt;

.codehap {
      display: flex;
      flex-wrap: wrap;
    }

    .codehapBox, .codehap_box {
      box-sizing: border-box;
      width: 100%;
      padding: 10px;
      border: 1px solid #ccc;
    }

    @media (min-width: 600px) {
      .codehapBox {
        width: 50%;
      }
    }
    
.video-container {
    position: relative;
    padding-bottom: 56.25%;
    padding-top: 0px;
    height: 0%;
    overflow: hidden;
}

.video-container iframe {
    position: absolute;
    top:0;
    left: 0%;
    width: 100%;
    height: 100%;
}
.codehapContent{
 
margin:auto;


}

&lt;/style&gt;


	

 
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/8732929058034116613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/06/mylek-marathi-2024.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/8732929058034116613'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/8732929058034116613'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/06/mylek-marathi-2024.html' title='Mylek (Marathi) 2024 '/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQiMqILjisInOKwaIajKzHNxNiEyHtVjrcC5myAJVLZRBr3YXPKSBvbGlb_ttlF3usXIOr5hLmXiYC0zfL9T91Boges_Vm4bDnrN5-GSdIJO73UmjUJxd5nVmSGpV1YwX86wgqwRW0NJfdvJbWHPXL21sK0pzXb0vdJypylz2vZ3SUqFotAVE_R96iosc/s72-c/Mylek-2024-Marathi-Language.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-5496202894947244132</id><published>2024-06-09T03:50:00.000-07:00</published><updated>2024-06-09T07:21:02.223-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Sports TV"/><title type='text'>T20 world Cup 2024 </title><content type='html'>&lt;style&gt;
 @keyframes plyr-progress {
    to {
        background-position: 25px 0;
        background-position: var(--plyr-progress-loading-size,25px) 0
    }
}

@keyframes plyr-popup {
    0% {
        opacity: .5;
        transform: translateY(10px)
    }

    to {
        opacity: 1;
        transform: translateY(0)
    }
}

@keyframes plyr-fade-in {
    0% {
        opacity: 0
    }

    to {
        opacity: 1
    }
}

.plyr {
    -moz-osx-font-smoothing: grayscale;
    -webkit-font-smoothing: antialiased;
    align-items: center;
    direction: ltr;
    display: flex;
    flex-direction: column;
    font-family: inherit;
    font-family: var(--plyr-font-family,inherit);
    font-variant-numeric: tabular-nums;
    font-weight: 400;
    font-weight: var(--plyr-font-weight-regular,400);
    line-height: 1.7;
    line-height: var(--plyr-line-height,1.7);
    max-width: 100%;
    min-width: 200px;
    position: relative;
    text-shadow: none;
    transition: box-shadow .3s ease;
    z-index: 0
}

.plyr audio,.plyr iframe,.plyr video {
    display: block;
    height: 100%;
    width: 100%
}

.plyr button {
    font: inherit;
    line-height: inherit;
    width: auto
}

.plyr:focus {
    outline: 0
}

.plyr--full-ui {
    box-sizing: border-box
}

.plyr--full-ui *,.plyr--full-ui :after,.plyr--full-ui :before {
    box-sizing: inherit
}

.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui input,.plyr--full-ui label {
    touch-action: manipulation
}

.plyr__badge {
    background: #4a5464;
    background: var(--plyr-badge-background,#4a5464);
    border-radius: 2px;
    border-radius: var(--plyr-badge-border-radius,2px);
    color: #fff;
    color: var(--plyr-badge-text-color,#fff);
    font-size: 9px;
    font-size: var(--plyr-font-size-badge,9px);
    line-height: 1;
    padding: 3px 4px
}

.plyr--full-ui ::-webkit-media-text-track-container {
    display: none
}

.plyr__captions {
    animation: plyr-fade-in .3s ease;
    bottom: 0;
    display: none;
    font-size: 13px;
    font-size: var(--plyr-font-size-small,13px);
    left: 0;
    padding: 10px;
    padding: var(--plyr-control-spacing,10px);
    position: absolute;
    text-align: center;
    transition: transform .4s ease-in-out;
    width: 100%
}

.plyr__captions span:empty {
    display: none
}

@media(min-width: 480px) {
    .plyr__captions {
        font-size:15px;
        font-size: var(--plyr-font-size-base,15px);
        padding: 20px;
        padding: calc(var(--plyr-control-spacing,10px)*2)
    }
}

@media(min-width: 768px) {
    .plyr__captions {
        font-size:18px;
        font-size: var(--plyr-font-size-large,18px)
    }
}

.plyr--captions-active .plyr__captions {
    display: block
}

.plyr:not(.plyr--hide-controls) .plyr__controls:not(:empty)~.plyr__captions {
    transform: translateY(-40px);
    transform: translateY(calc(var(--plyr-control-spacing,10px)*-4))
}

.plyr__caption {
    background: rgba(0,0,0,.8);
    background: var(--plyr-captions-background,rgba(0,0,0,.8));
    border-radius: 2px;
    -webkit-box-decoration-break: clone;
    box-decoration-break: clone;
    color: #fff;
    color: var(--plyr-captions-text-color,#fff);
    line-height: 185%;
    padding: .2em .5em;
    white-space: pre-wrap
}

.plyr__caption div {
    display: inline
}

.plyr__control {
    background: 0 0;
    border: 0;
    border-radius: 3px;
    border-radius: var(--plyr-control-radius,3px);
    color: inherit;
    cursor: pointer;
    flex-shrink: 0;
    overflow: visible;
    padding: 7px;
    padding: calc(var(--plyr-control-spacing,10px)*.7);
    position: relative;
    transition: all .3s ease
}

.plyr__control svg {
    fill: currentColor;
    display: block;
    height: 18px;
    height: var(--plyr-control-icon-size,18px);
    pointer-events: none;
    width: 18px;
    width: var(--plyr-control-icon-size,18px)
}

.plyr__control:focus {
    outline: 0
}

.plyr__control.plyr__tab-focus {
    outline-color: #00b3ff;
    outline-color: var(--plyr-tab-focus-color,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));
    outline-offset: 2px;
    outline-style: dotted;
    outline-width: 3px
}

a.plyr__control {
    text-decoration: none
}

.plyr__control.plyr__control--pressed .icon--not-pressed,.plyr__control.plyr__control--pressed .label--not-pressed,.plyr__control:not(.plyr__control--pressed) .icon--pressed,.plyr__control:not(.plyr__control--pressed) .label--pressed,a.plyr__control:after,a.plyr__control:before {
    display: none
}

.plyr--full-ui ::-webkit-media-controls {
    display: none
}

.plyr__controls {
    align-items: center;
    display: flex;
    justify-content: flex-end;
    text-align: center
}

.plyr__controls .plyr__progress__container {
    flex: 1;
    min-width: 0
}

.plyr__controls .plyr__controls__item {
    margin-left: 2.5px;
    margin-left: calc(var(--plyr-control-spacing,10px)/4)
}

.plyr__controls .plyr__controls__item:first-child {
    margin-left: 0;
    margin-right: auto
}

.plyr__controls .plyr__controls__item.plyr__progress__container {
    padding-left: 2.5px;
    padding-left: calc(var(--plyr-control-spacing,10px)/4)
}

.plyr__controls .plyr__controls__item.plyr__time {
    padding: 0 5px;
    padding: 0 calc(var(--plyr-control-spacing,10px)/2)
}

.plyr__controls .plyr__controls__item.plyr__progress__container:first-child,.plyr__controls .plyr__controls__item.plyr__time+.plyr__time,.plyr__controls .plyr__controls__item.plyr__time:first-child {
    padding-left: 0
}

.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip],.plyr__controls:empty {
    display: none
}

.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip] {
    display: inline-block
}

.plyr__menu {
    display: flex;
    position: relative
}

.plyr__menu .plyr__control svg {
    transition: transform .3s ease
}

.plyr__menu .plyr__control[aria-expanded=true] svg {
    transform: rotate(90deg)
}

.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip {
    display: none
}

.plyr__menu__container {
    animation: plyr-popup .2s ease;
    background: hsla(0,0%,100%,.9);
    background: var(--plyr-menu-background,hsla(0,0%,100%,.9));
    border-radius: 4px;
    bottom: 100%;
    box-shadow: 0 1px 2px rgba(0,0,0,.15);
    box-shadow: var(--plyr-menu-shadow,0 1px 2px rgba(0,0,0,.15));
    color: #4a5464;
    color: var(--plyr-menu-color,#4a5464);
    font-size: 15px;
    font-size: var(--plyr-font-size-base,15px);
    margin-bottom: 10px;
    position: absolute;
    right: -3px;
    text-align: left;
    white-space: nowrap;
    z-index: 3
}

.plyr__menu__container&gt;div {
    overflow: hidden;
    transition: height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)
}

.plyr__menu__container:after {
    border: 4px solid transparent;
    border-top: var(--plyr-menu-arrow-size,4px) solid hsla(0,0%,100%,.9);
    border-width: var(--plyr-menu-arrow-size,4px);
    content: &quot;&quot;;
    height: 0;
    position: absolute;
    right: 14px;
    right: calc(var(--plyr-control-icon-size,18px)/2 + var(--plyr-control-spacing,10px)*.7 - var(--plyr-menu-arrow-size,4px)/2);
    top: 100%;
    width: 0
}

.plyr__menu__container [role=menu] {
    padding: 7px;
    padding: calc(var(--plyr-control-spacing,10px)*.7)
}

.plyr__menu__container [role=menuitem],.plyr__menu__container [role=menuitemradio] {
    margin-top: 2px
}

.plyr__menu__container [role=menuitem]:first-child,.plyr__menu__container [role=menuitemradio]:first-child {
    margin-top: 0
}

.plyr__menu__container .plyr__control {
    align-items: center;
    color: #4a5464;
    color: var(--plyr-menu-color,#4a5464);
    display: flex;
    font-size: 13px;
    font-size: var(--plyr-font-size-menu,var(--plyr-font-size-small,13px));
    padding: 4.66667px 10.5px;
    padding: calc(var(--plyr-control-spacing,10px)*.7/1.5) calc(var(--plyr-control-spacing,10px)*.7*1.5);
    -webkit-user-select: none;
    user-select: none;
    width: 100%
}

.plyr__menu__container .plyr__control&gt;span {
    align-items: inherit;
    display: flex;
    width: 100%
}

.plyr__menu__container .plyr__control:after {
    border: 4px solid transparent;
    border: var(--plyr-menu-item-arrow-size,4px) solid transparent;
    content: &quot;&quot;;
    position: absolute;
    top: 50%;
    transform: translateY(-50%)
}

.plyr__menu__container .plyr__control--forward {
    padding-right: 28px;
    padding-right: calc(var(--plyr-control-spacing,10px)*.7*4)
}

.plyr__menu__container .plyr__control--forward:after {
    border-left-color: #728197;
    border-left-color: var(--plyr-menu-arrow-color,#728197);
    right: 6.5px;
    right: calc(var(--plyr-control-spacing,10px)*.7*1.5 - var(--plyr-menu-item-arrow-size,4px))
}

.plyr__menu__container .plyr__control--forward.plyr__tab-focus:after,.plyr__menu__container .plyr__control--forward:hover:after {
    border-left-color: initial
}

.plyr__menu__container .plyr__control--back {
    font-weight: 400;
    font-weight: var(--plyr-font-weight-regular,400);
    margin: 7px;
    margin: calc(var(--plyr-control-spacing,10px)*.7);
    margin-bottom: 3.5px;
    margin-bottom: calc(var(--plyr-control-spacing,10px)*.7/2);
    padding-left: 28px;
    padding-left: calc(var(--plyr-control-spacing,10px)*.7*4);
    position: relative;
    width: calc(100% - 14px);
    width: calc(100% - var(--plyr-control-spacing,10px)*.7*2)
}

.plyr__menu__container .plyr__control--back:after {
    border-right-color: #728197;
    border-right-color: var(--plyr-menu-arrow-color,#728197);
    left: 6.5px;
    left: calc(var(--plyr-control-spacing,10px)*.7*1.5 - var(--plyr-menu-item-arrow-size,4px))
}

.plyr__menu__container .plyr__control--back:before {
    background: #dcdfe5;
    background: var(--plyr-menu-back-border-color,#dcdfe5);
    box-shadow: 0 1px 0 #fff;
    box-shadow: 0 1px 0 var(--plyr-menu-back-border-shadow-color,#fff);
    content: &quot;&quot;;
    height: 1px;
    left: 0;
    margin-top: 3.5px;
    margin-top: calc(var(--plyr-control-spacing,10px)*.7/2);
    overflow: hidden;
    position: absolute;
    right: 0;
    top: 100%
}

.plyr__menu__container .plyr__control--back.plyr__tab-focus:after,.plyr__menu__container .plyr__control--back:hover:after {
    border-right-color: initial
}

.plyr__menu__container .plyr__control[role=menuitemradio] {
    padding-left: 7px;
    padding-left: calc(var(--plyr-control-spacing,10px)*.7)
}

.plyr__menu__container .plyr__control[role=menuitemradio]:after,.plyr__menu__container .plyr__control[role=menuitemradio]:before {
    border-radius: 100%
}

.plyr__menu__container .plyr__control[role=menuitemradio]:before {
    background: rgba(0,0,0,.1);
    content: &quot;&quot;;
    display: block;
    flex-shrink: 0;
    height: 16px;
    margin-right: 10px;
    margin-right: var(--plyr-control-spacing,10px);
    transition: all .3s ease;
    width: 16px
}

.plyr__menu__container .plyr__control[role=menuitemradio]:after {
    background: #fff;
    border: 0;
    height: 6px;
    left: 12px;
    opacity: 0;
    top: 50%;
    transform: translateY(-50%) scale(0);
    transition: transform .3s ease,opacity .3s ease;
    width: 6px
}

.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]:before {
    background: #00b3ff;
    background: var(--plyr-control-toggle-checked-background,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)))
}

.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]:after {
    opacity: 1;
    transform: translateY(-50%) scale(1)
}

.plyr__menu__container .plyr__control[role=menuitemradio].plyr__tab-focus:before,.plyr__menu__container .plyr__control[role=menuitemradio]:hover:before {
    background: rgba(35,40,47,.1)
}

.plyr__menu__container .plyr__menu__value {
    align-items: center;
    display: flex;
    margin-left: auto;
    margin-right: calc(-7px - -2);
    margin-right: calc(var(--plyr-control-spacing,10px)*.7*-1 - -2);
    overflow: hidden;
    padding-left: 24.5px;
    padding-left: calc(var(--plyr-control-spacing,10px)*.7*3.5);
    pointer-events: none
}

.plyr--full-ui input[type=range] {
    -webkit-appearance: none;
    background: 0 0;
    border: 0;
    border-radius: 26px;
    border-radius: calc(var(--plyr-range-thumb-height,13px)*2);
    color: #00b3ff;
    color: var(--plyr-range-fill-background,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));
    display: block;
    height: 19px;
    height: calc(var(--plyr-range-thumb-active-shadow-width,3px)*2 + var(--plyr-range-thumb-height,13px));
    margin: 0;
    min-width: 0;
    padding: 0;
    transition: box-shadow .3s ease;
    width: 100%
}

.plyr--full-ui input[type=range]::-webkit-slider-runnable-track {
    background: 0 0;
    background-image: linear-gradient(90deg,currentColor 0,transparent 0);
    background-image: linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0));
    border: 0;
    border-radius: 2.5px;
    border-radius: calc(var(--plyr-range-track-height,5px)/2);
    height: 5px;
    height: var(--plyr-range-track-height,5px);
    -webkit-transition: box-shadow .3s ease;
    transition: box-shadow .3s ease;
    -webkit-user-select: none;
    user-select: none
}

.plyr--full-ui input[type=range]::-webkit-slider-thumb {
    -webkit-appearance: none;
    background: #fff;
    background: var(--plyr-range-thumb-background,#fff);
    border: 0;
    border-radius: 100%;
    box-shadow: 0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2);
    box-shadow: var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2));
    height: 13px;
    height: var(--plyr-range-thumb-height,13px);
    margin-top: -4px;
    margin-top: calc(var(--plyr-range-thumb-height,13px)/2*-1 - var(--plyr-range-track-height,5px)/2*-1);
    position: relative;
    -webkit-transition: all .2s ease;
    transition: all .2s ease;
    width: 13px;
    width: var(--plyr-range-thumb-height,13px)
}

.plyr--full-ui input[type=range]::-moz-range-track {
    background: 0 0;
    border: 0;
    border-radius: 2.5px;
    border-radius: calc(var(--plyr-range-track-height,5px)/2);
    height: 5px;
    height: var(--plyr-range-track-height,5px);
    -moz-transition: box-shadow .3s ease;
    transition: box-shadow .3s ease;
    user-select: none
}

.plyr--full-ui input[type=range]::-moz-range-thumb {
    background: #fff;
    background: var(--plyr-range-thumb-background,#fff);
    border: 0;
    border-radius: 100%;
    box-shadow: 0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2);
    box-shadow: var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2));
    height: 13px;
    height: var(--plyr-range-thumb-height,13px);
    position: relative;
    -moz-transition: all .2s ease;
    transition: all .2s ease;
    width: 13px;
    width: var(--plyr-range-thumb-height,13px)
}

.plyr--full-ui input[type=range]::-moz-range-progress {
    background: currentColor;
    border-radius: 2.5px;
    border-radius: calc(var(--plyr-range-track-height,5px)/2);
    height: 5px;
    height: var(--plyr-range-track-height,5px)
}

.plyr--full-ui input[type=range]::-ms-track {
    color: transparent
}

.plyr--full-ui input[type=range]::-ms-fill-upper,.plyr--full-ui input[type=range]::-ms-track {
    background: 0 0;
    border: 0;
    border-radius: 2.5px;
    border-radius: calc(var(--plyr-range-track-height,5px)/2);
    height: 5px;
    height: var(--plyr-range-track-height,5px);
    -ms-transition: box-shadow .3s ease;
    transition: box-shadow .3s ease;
    user-select: none
}

.plyr--full-ui input[type=range]::-ms-fill-lower {
    background: 0 0;
    background: currentColor;
    border: 0;
    border-radius: 2.5px;
    border-radius: calc(var(--plyr-range-track-height,5px)/2);
    height: 5px;
    height: var(--plyr-range-track-height,5px);
    -ms-transition: box-shadow .3s ease;
    transition: box-shadow .3s ease;
    user-select: none
}

.plyr--full-ui input[type=range]::-ms-thumb {
    background: #fff;
    background: var(--plyr-range-thumb-background,#fff);
    border: 0;
    border-radius: 100%;
    box-shadow: 0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2);
    box-shadow: var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2));
    height: 13px;
    height: var(--plyr-range-thumb-height,13px);
    margin-top: 0;
    position: relative;
    -ms-transition: all .2s ease;
    transition: all .2s ease;
    width: 13px;
    width: var(--plyr-range-thumb-height,13px)
}

.plyr--full-ui input[type=range]::-ms-tooltip {
    display: none
}

.plyr--full-ui input[type=range]:focus {
    outline: 0
}

.plyr--full-ui input[type=range]::-moz-focus-outer {
    border: 0
}

.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track {
    outline-color: #00b3ff;
    outline-color: var(--plyr-tab-focus-color,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));
    outline-offset: 2px;
    outline-style: dotted;
    outline-width: 3px
}

.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track {
    outline-color: #00b3ff;
    outline-color: var(--plyr-tab-focus-color,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));
    outline-offset: 2px;
    outline-style: dotted;
    outline-width: 3px
}

.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track {
    outline-color: #00b3ff;
    outline-color: var(--plyr-tab-focus-color,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));
    outline-offset: 2px;
    outline-style: dotted;
    outline-width: 3px
}

.plyr__poster {
    background-color: #000;
    background-color: var(--plyr-video-background,var(--plyr-video-background,#000));
    background-position: 50% 50%;
    background-repeat: no-repeat;
    background-size: contain;
    height: 100%;
    left: 0;
    opacity: 0;
    position: absolute;
    top: 0;
    transition: opacity .2s ease;
    width: 100%;
    z-index: 1
}

.plyr--stopped.plyr__poster-enabled .plyr__poster {
    opacity: 1
}

.plyr--youtube.plyr--paused.plyr__poster-enabled:not(.plyr--stopped) .plyr__poster {
    display: none
}

.plyr__time {
    font-size: 13px;
    font-size: var(--plyr-font-size-time,var(--plyr-font-size-small,13px))
}

.plyr__time+.plyr__time:before {
    content: &quot;\2044&quot;;
    margin-right: 10px;
    margin-right: var(--plyr-control-spacing,10px)
}

@media(max-width: 767px) {
    .plyr__time+.plyr__time {
        display:none
    }
}

.plyr__tooltip {
    background: hsla(0,0%,100%,.9);
    background: var(--plyr-tooltip-background,hsla(0,0%,100%,.9));
    border-radius: 3px;
    border-radius: var(--plyr-tooltip-radius,3px);
    bottom: 100%;
    box-shadow: 0 1px 2px rgba(0,0,0,.15);
    box-shadow: var(--plyr-tooltip-shadow,0 1px 2px rgba(0,0,0,.15));
    color: #4a5464;
    color: var(--plyr-tooltip-color,#4a5464);
    font-size: 13px;
    font-size: var(--plyr-font-size-small,13px);
    font-weight: 400;
    font-weight: var(--plyr-font-weight-regular,400);
    left: 50%;
    line-height: 1.3;
    margin-bottom: 10px;
    margin-bottom: calc(var(--plyr-control-spacing,10px)/2*2);
    opacity: 0;
    padding: 5px 7.5px;
    padding: calc(var(--plyr-control-spacing,10px)/2) calc(var(--plyr-control-spacing,10px)/2*1.5);
    pointer-events: none;
    position: absolute;
    transform: translate(-50%,10px) scale(.8);
    transform-origin: 50% 100%;
    transition: transform .2s ease .1s,opacity .2s ease .1s;
    white-space: nowrap;
    z-index: 2
}

.plyr__tooltip:before {
    border-left: 4px solid transparent;
    border-left: var(--plyr-tooltip-arrow-size,4px) solid transparent;
    border-right: 4px solid transparent;
    border-right: var(--plyr-tooltip-arrow-size,4px) solid transparent;
    border-top: 4px solid hsla(0,0%,100%,.9);
    border-top: var(--plyr-tooltip-arrow-size,4px) solid var(--plyr-tooltip-background,hsla(0,0%,100%,.9));
    bottom: -4px;
    bottom: calc(var(--plyr-tooltip-arrow-size,4px)*-1);
    content: &quot;&quot;;
    height: 0;
    left: 50%;
    position: absolute;
    transform: translateX(-50%);
    width: 0;
    z-index: 2
}

.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible {
    opacity: 1;
    transform: translate(-50%) scale(1)
}

.plyr .plyr__control:hover .plyr__tooltip {
    z-index: 3
}

.plyr__controls&gt;.plyr__control:first-child+.plyr__control .plyr__tooltip,.plyr__controls&gt;.plyr__control:first-child .plyr__tooltip {
    left: 0;
    transform: translateY(10px) scale(.8);
    transform-origin: 0 100%
}

.plyr__controls&gt;.plyr__control:first-child+.plyr__control .plyr__tooltip:before,.plyr__controls&gt;.plyr__control:first-child .plyr__tooltip:before {
    left: 16px;
    left: calc(var(--plyr-control-icon-size,18px)/2 + var(--plyr-control-spacing,10px)*.7)
}

.plyr__controls&gt;.plyr__control:last-child .plyr__tooltip {
    left: auto;
    right: 0;
    transform: translateY(10px) scale(.8);
    transform-origin: 100% 100%
}

.plyr__controls&gt;.plyr__control:last-child .plyr__tooltip:before {
    left: auto;
    right: 16px;
    right: calc(var(--plyr-control-icon-size,18px)/2 + var(--plyr-control-spacing,10px)*.7);
    transform: translateX(50%)
}

.plyr__controls&gt;.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls&gt;.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls&gt;.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls&gt;.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls&gt;.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls&gt;.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls&gt;.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls&gt;.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls&gt;.plyr__control:last-child:hover .plyr__tooltip {
    transform: translate(0) scale(1)
}

.plyr__progress {
    left: 6.5px;
    left: calc(var(--plyr-range-thumb-height,13px)*.5);
    margin-right: 13px;
    margin-right: var(--plyr-range-thumb-height,13px);
    position: relative
}

.plyr__progress__buffer,.plyr__progress input[type=range] {
    margin-left: -6.5px;
    margin-left: calc(var(--plyr-range-thumb-height,13px)*-.5);
    margin-right: -6.5px;
    margin-right: calc(var(--plyr-range-thumb-height,13px)*-.5);
    width: calc(100% + 13px);
    width: calc(100% + var(--plyr-range-thumb-height,13px))
}

.plyr__progress input[type=range] {
    position: relative;
    z-index: 2
}

.plyr__progress .plyr__tooltip {
    font-size: 13px;
    font-size: var(--plyr-font-size-time,var(--plyr-font-size-small,13px));
    left: 0
}

.plyr__progress__buffer {
    -webkit-appearance: none;
    background: 0 0;
    border: 0;
    border-radius: 100px;
    height: 5px;
    height: var(--plyr-range-track-height,5px);
    left: 0;
    margin-top: -2.5px;
    margin-top: calc(var(--plyr-range-track-height,5px)/2*-1);
    padding: 0;
    position: absolute;
    top: 50%
}

.plyr__progress__buffer::-webkit-progress-bar {
    background: 0 0
}

.plyr__progress__buffer::-webkit-progress-value {
    background: currentColor;
    border-radius: 100px;
    min-width: 5px;
    min-width: var(--plyr-range-track-height,5px);
    -webkit-transition: width .2s ease;
    transition: width .2s ease
}

.plyr__progress__buffer::-moz-progress-bar {
    background: currentColor;
    border-radius: 100px;
    min-width: 5px;
    min-width: var(--plyr-range-track-height,5px);
    -moz-transition: width .2s ease;
    transition: width .2s ease
}

.plyr__progress__buffer::-ms-fill {
    border-radius: 100px;
    -ms-transition: width .2s ease;
    transition: width .2s ease
}

.plyr--loading .plyr__progress__buffer {
    animation: plyr-progress 1s linear infinite;
    background-image: linear-gradient(-45deg,rgba(35,40,47,.6) 25%,transparent 0,transparent 50%,rgba(35,40,47,.6) 0,rgba(35,40,47,.6) 75%,transparent 0,transparent);
    background-image: linear-gradient(-45deg,var(--plyr-progress-loading-background,rgba(35,40,47,.6)) 25%,transparent 25%,transparent 50%,var(--plyr-progress-loading-background,rgba(35,40,47,.6)) 50%,var(--plyr-progress-loading-background,rgba(35,40,47,.6)) 75%,transparent 75%,transparent);
    background-repeat: repeat-x;
    background-size: 25px 25px;
    background-size: var(--plyr-progress-loading-size,25px) var(--plyr-progress-loading-size,25px);
    color: transparent
}

.plyr--video.plyr--loading .plyr__progress__buffer {
    background-color: hsla(0,0%,100%,.25);
    background-color: var(--plyr-video-progress-buffered-background,hsla(0,0%,100%,.25))
}

.plyr--audio.plyr--loading .plyr__progress__buffer {
    background-color: rgba(193,200,209,.6);
    background-color: var(--plyr-audio-progress-buffered-background,rgba(193,200,209,.6))
}

.plyr__volume {
    align-items: center;
    display: flex;
    max-width: 110px;
    min-width: 80px;
    position: relative;
    width: 20%
}

.plyr__volume input[type=range] {
    margin-left: 5px;
    margin-left: calc(var(--plyr-control-spacing,10px)/2);
    margin-right: 5px;
    margin-right: calc(var(--plyr-control-spacing,10px)/2);
    position: relative;
    z-index: 2
}

.plyr--is-ios .plyr__volume {
    min-width: 0;
    width: auto
}

.plyr--audio {
    display: block
}

.plyr--audio .plyr__controls {
    background: #fff;
    background: var(--plyr-audio-controls-background,#fff);
    border-radius: inherit;
    color: #4a5464;
    color: var(--plyr-audio-control-color,#4a5464);
    padding: 10px;
    padding: var(--plyr-control-spacing,10px)
}

.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true] {
    background: #00b3ff;
    background: var(--plyr-audio-control-background-hover,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));
    color: #fff;
    color: var(--plyr-audio-control-color-hover,#fff)
}

.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track {
    background-color: rgba(193,200,209,.6);
    background-color: var(--plyr-audio-range-track-background,var(--plyr-audio-progress-buffered-background,rgba(193,200,209,.6)))
}

.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track {
    background-color: rgba(193,200,209,.6);
    background-color: var(--plyr-audio-range-track-background,var(--plyr-audio-progress-buffered-background,rgba(193,200,209,.6)))
}

.plyr--full-ui.plyr--audio input[type=range]::-ms-track {
    background-color: rgba(193,200,209,.6);
    background-color: var(--plyr-audio-range-track-background,var(--plyr-audio-progress-buffered-background,rgba(193,200,209,.6)))
}

.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb {
    box-shadow: 0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2),0 0 0 3px rgba(35,40,47,.1);
    box-shadow: var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2)),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,rgba(35,40,47,.1))
}

.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb {
    box-shadow: 0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2),0 0 0 3px rgba(35,40,47,.1);
    box-shadow: var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2)),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,rgba(35,40,47,.1))
}

.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb {
    box-shadow: 0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2),0 0 0 3px rgba(35,40,47,.1);
    box-shadow: var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2)),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,rgba(35,40,47,.1))
}

.plyr--audio .plyr__progress__buffer {
    color: rgba(193,200,209,.6);
    color: var(--plyr-audio-progress-buffered-background,rgba(193,200,209,.6))
}

.plyr--video {
    background: #000;
    background: var(--plyr-video-background,var(--plyr-video-background,#000));
    overflow: hidden
}

.plyr--video.plyr--menu-open {
    overflow: visible
}

.plyr__video-wrapper {
    background: #000;
    background: var(--plyr-video-background,var(--plyr-video-background,#000));
    margin: auto;
    overflow: hidden;
    position: relative;
    width: 100%
}

.plyr__video-embed,.plyr__video-wrapper--fixed-ratio {
    aspect-ratio: 16/9
}

@supports not (aspect-ratio: 16/9) {
    .plyr__video-embed,.plyr__video-wrapper--fixed-ratio {
        height:0;
        padding-bottom: 56.25%;
        position: relative
    }
}

.plyr__video-embed iframe,.plyr__video-wrapper--fixed-ratio video {
    border: 0;
    height: 100%;
    left: 0;
    position: absolute;
    top: 0;
    width: 100%
}

.plyr--full-ui .plyr__video-embed&gt;.plyr__video-embed__container {
    padding-bottom: 240%;
    position: relative;
    transform: translateY(-38.28125%)
}

.plyr--video .plyr__controls {
    background: linear-gradient(transparent,rgba(0,0,0,.75));
    background: var(--plyr-video-controls-background,linear-gradient(transparent,rgba(0,0,0,.75)));
    border-bottom-left-radius: inherit;
    border-bottom-right-radius: inherit;
    bottom: 0;
    color: #fff;
    color: var(--plyr-video-control-color,#fff);
    left: 0;
    padding: 5px;
    padding: calc(var(--plyr-control-spacing,10px)/2);
    padding-top: 20px;
    padding-top: calc(var(--plyr-control-spacing,10px)*2);
    position: absolute;
    right: 0;
    transition: opacity .4s ease-in-out,transform .4s ease-in-out;
    z-index: 3
}

@media(min-width: 480px) {
    .plyr--video .plyr__controls {
        padding:10px;
        padding: var(--plyr-control-spacing,10px);
        padding-top: 35px;
        padding-top: calc(var(--plyr-control-spacing,10px)*3.5)
    }
}

.plyr--video.plyr--hide-controls .plyr__controls {
    opacity: 0;
    pointer-events: none;
    transform: translateY(100%)
}

.plyr--video .plyr__control.plyr__tab-focus,.plyr--video .plyr__control:hover,.plyr--video .plyr__control[aria-expanded=true] {
    background: #00b3ff;
    background: var(--plyr-video-control-background-hover,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));
    color: #fff;
    color: var(--plyr-video-control-color-hover,#fff)
}

.plyr__control--overlaid {
    background: #00b3ff;
    background: var(--plyr-video-control-background-hover,var(--plyr-color-main,var(--plyr-color-main,#00b3ff)));
    border: 0;
    border-radius: 100%;
    color: #fff;
    color: var(--plyr-video-control-color,#fff);
    display: none;
    left: 50%;
    opacity: .9;
    padding: 15px;
    padding: calc(var(--plyr-control-spacing,10px)*1.5);
    position: absolute;
    top: 50%;
    transform: translate(-50%,-50%);
    transition: .3s;
    z-index: 2
}

.plyr__control--overlaid svg {
    left: 2px;
    position: relative
}

.plyr__control--overlaid:focus,.plyr__control--overlaid:hover {
    opacity: 1
}

.plyr--playing .plyr__control--overlaid {
    opacity: 0;
    visibility: hidden
}

.plyr--full-ui.plyr--video .plyr__control--overlaid {
    display: block
}

.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track {
    background-color: hsla(0,0%,100%,.25);
    background-color: var(--plyr-video-range-track-background,var(--plyr-video-progress-buffered-background,hsla(0,0%,100%,.25)))
}

.plyr--full-ui.plyr--video input[type=range]::-moz-range-track {
    background-color: hsla(0,0%,100%,.25);
    background-color: var(--plyr-video-range-track-background,var(--plyr-video-progress-buffered-background,hsla(0,0%,100%,.25)))
}

.plyr--full-ui.plyr--video input[type=range]::-ms-track {
    background-color: hsla(0,0%,100%,.25);
    background-color: var(--plyr-video-range-track-background,var(--plyr-video-progress-buffered-background,hsla(0,0%,100%,.25)))
}

.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb {
    box-shadow: 0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2),0 0 0 3px hsla(0,0%,100%,.5);
    box-shadow: var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2)),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,hsla(0,0%,100%,.5))
}

.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb {
    box-shadow: 0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2),0 0 0 3px hsla(0,0%,100%,.5);
    box-shadow: var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2)),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,hsla(0,0%,100%,.5))
}

.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb {
    box-shadow: 0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2),0 0 0 3px hsla(0,0%,100%,.5);
    box-shadow: var(--plyr-range-thumb-shadow,0 1px 1px rgba(35,40,47,.15),0 0 0 1px rgba(35,40,47,.2)),0 0 0 var(--plyr-range-thumb-active-shadow-width,3px) var(--plyr-audio-range-thumb-active-shadow-color,hsla(0,0%,100%,.5))
}

.plyr--video .plyr__progress__buffer {
    color: hsla(0,0%,100%,.25);
    color: var(--plyr-video-progress-buffered-background,hsla(0,0%,100%,.25))
}

.plyr:fullscreen {
    background: #000;
    border-radius: 0!important;
    height: 100%;
    margin: 0;
    width: 100%
}

.plyr:fullscreen video {
    height: 100%
}

.plyr:fullscreen .plyr__control .icon--exit-fullscreen {
    display: block
}

.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg {
    display: none
}

.plyr:fullscreen.plyr--hide-controls {
    cursor: none
}

@media(min-width: 1024px) {
    .plyr:-webkit-full-screen .plyr__captions {
        font-size:21px;
        font-size: var(--plyr-font-size-xlarge,21px)
    }

    .plyr:fullscreen .plyr__captions {
        font-size: 21px;
        font-size: var(--plyr-font-size-xlarge,21px)
    }
}

.plyr:-webkit-full-screen {
    background: #000;
    border-radius: 0!important;
    height: 100%;
    margin: 0;
    width: 100%
}

.plyr:-webkit-full-screen video {
    height: 100%
}

.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen {
    display: block
}

.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg {
    display: none
}

.plyr:-webkit-full-screen.plyr--hide-controls {
    cursor: none
}

@media(min-width: 1024px) {
    .plyr:-webkit-full-screen .plyr__captions {
        font-size:21px;
        font-size: var(--plyr-font-size-xlarge,21px)
    }
}

.plyr:-moz-full-screen {
    background: #000;
    border-radius: 0!important;
    height: 100%;
    margin: 0;
    width: 100%
}

.plyr:-moz-full-screen video {
    height: 100%
}

.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen {
    display: block
}

.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg {
    display: none
}

.plyr:-moz-full-screen.plyr--hide-controls {
    cursor: none
}

@media(min-width: 1024px) {
    .plyr:-moz-full-screen .plyr__captions {
        font-size:21px;
        font-size: var(--plyr-font-size-xlarge,21px)
    }
}

.plyr:-ms-fullscreen {
    background: #000;
    border-radius: 0!important;
    height: 100%;
    margin: 0;
    width: 100%
}

.plyr:-ms-fullscreen video {
    height: 100%
}

.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen {
    display: block
}

.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg {
    display: none
}

.plyr:-ms-fullscreen.plyr--hide-controls {
    cursor: none
}

@media(min-width: 1024px) {
    .plyr:-ms-fullscreen .plyr__captions {
        font-size:21px;
        font-size: var(--plyr-font-size-xlarge,21px)
    }
}

.plyr--fullscreen-fallback {
    background: #000;
    border-radius: 0!important;
    bottom: 0;
    display: block;
    height: 100%;
    left: 0;
    margin: 0;
    position: fixed;
    right: 0;
    top: 0;
    width: 100%;
    z-index: 10000000
}

.plyr--fullscreen-fallback video {
    height: 100%
}

.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen {
    display: block
}

.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg {
    display: none
}

.plyr--fullscreen-fallback.plyr--hide-controls {
    cursor: none
}

@media(min-width: 1024px) {
    .plyr--fullscreen-fallback .plyr__captions {
        font-size:21px;
        font-size: var(--plyr-font-size-xlarge,21px)
    }
}

.plyr__ads {
    border-radius: inherit;
    bottom: 0;
    cursor: pointer;
    left: 0;
    overflow: hidden;
    position: absolute;
    right: 0;
    top: 0;
    z-index: -1
}

.plyr__ads&gt;div,.plyr__ads&gt;div iframe {
    height: 100%;
    position: absolute;
    width: 100%
}

.plyr__ads:after {
    background: #23282f;
    border-radius: 2px;
    bottom: 10px;
    bottom: var(--plyr-control-spacing,10px);
    color: #fff;
    content: attr(data-badge-text);
    font-size: 11px;
    padding: 2px 6px;
    pointer-events: none;
    position: absolute;
    right: 10px;
    right: var(--plyr-control-spacing,10px);
    z-index: 3
}

.plyr__ads:after:empty {
    display: none
}

.plyr__cues {
    background: currentColor;
    display: block;
    height: 5px;
    height: var(--plyr-range-track-height,5px);
    left: 0;
    margin: -var(--plyr-range-track-height,5px)/2 0 0;
    opacity: .8;
    position: absolute;
    top: 50%;
    width: 3px;
    z-index: 3
}

.plyr__preview-thumb {
    background-color: hsla(0,0%,100%,.9);
    background-color: var(--plyr-tooltip-background,hsla(0,0%,100%,.9));
    border-radius: 3px;
    bottom: 100%;
    box-shadow: 0 1px 2px rgba(0,0,0,.15);
    box-shadow: var(--plyr-tooltip-shadow,0 1px 2px rgba(0,0,0,.15));
    margin-bottom: 10px;
    margin-bottom: calc(var(--plyr-control-spacing,10px)/2*2);
    opacity: 0;
    padding: 3px;
    padding: var(--plyr-tooltip-radius,3px);
    pointer-events: none;
    position: absolute;
    transform: translateY(10px) scale(.8);
    transform-origin: 50% 100%;
    transition: transform .2s ease .1s,opacity .2s ease .1s;
    z-index: 2
}

.plyr__preview-thumb--is-shown {
    opacity: 1;
    transform: translate(0) scale(1)
}

.plyr__preview-thumb:before {
    border-left: 4px solid transparent;
    border-left: var(--plyr-tooltip-arrow-size,4px) solid transparent;
    border-right: 4px solid transparent;
    border-right: var(--plyr-tooltip-arrow-size,4px) solid transparent;
    border-top: 4px solid hsla(0,0%,100%,.9);
    border-top: var(--plyr-tooltip-arrow-size,4px) solid var(--plyr-tooltip-background,hsla(0,0%,100%,.9));
    bottom: -4px;
    bottom: calc(var(--plyr-tooltip-arrow-size,4px)*-1);
    content: &quot;&quot;;
    height: 0;
    left: 50%;
    position: absolute;
    transform: translateX(-50%);
    width: 0;
    z-index: 2
}

.plyr__preview-thumb__image-container {
    background: #c1c8d1;
    border-radius: 2px;
    border-radius: calc(var(--plyr-tooltip-radius,3px) - 1px);
    overflow: hidden;
    position: relative;
    z-index: 0
}

.plyr__preview-thumb__image-container img {
    height: 100%;
    left: 0;
    max-height: none;
    max-width: none;
    position: absolute;
    top: 0;
    width: 100%
}

.plyr__preview-thumb__time-container {
    bottom: 6px;
    left: 0;
    position: absolute;
    right: 0;
    white-space: nowrap;
    z-index: 3
}

.plyr__preview-thumb__time-container span {
    background-color: rgba(0,0,0,.55);
    border-radius: 2px;
    border-radius: calc(var(--plyr-tooltip-radius,3px) - 1px);
    color: #fff;
    font-size: 13px;
    font-size: var(--plyr-font-size-time,var(--plyr-font-size-small,13px));
    padding: 3px 6px
}

.plyr__preview-scrubbing {
    bottom: 0;
    filter: blur(1px);
    height: 100%;
    left: 0;
    margin: auto;
    opacity: 0;
    overflow: hidden;
    pointer-events: none;
    position: absolute;
    right: 0;
    top: 0;
    transition: opacity .3s ease;
    width: 100%;
    z-index: 1
}

.plyr__preview-scrubbing--is-shown {
    opacity: 1
}

.plyr__preview-scrubbing img {
    height: 100%;
    left: 0;
    max-height: none;
    max-width: none;
    -o-object-fit: contain;
    object-fit: contain;
    position: absolute;
    top: 0;
    width: 100%
}

.plyr--no-transition {
    transition: none!important
}

.plyr__sr-only {
    clip: rect(1px,1px,1px,1px);
    border: 0!important;
    height: 1px!important;
    overflow: hidden;
    padding: 0!important;
    position: absolute!important;
    width: 1px!important
}

.plyr [hidden] {
    display: none!important
}


&lt;/style&gt;


&lt;div uk-height-match=&quot;target: &gt; .h_match&quot;&gt;
                &lt;div class=&quot;content_sec live_sec h_match&quot; style=&quot;min-height: 376px;&quot;&gt;
                    &lt;section class=&quot;player_sec&quot;&gt;

&lt;!-- iPLSTREAM EMBED Start --&gt;	
&lt;script src=&quot;https://cdn.jsdelivr.net/npm/hls.js@latest&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://cdn.plyr.io/3.6.8/plyr.polyfilled.js&quot;&gt;&lt;/script&gt;
            &lt;div class=&quot;plyr__video-wrapper&quot;&gt;&lt;video preload=&quot;metadata&quot; poster=&quot;https://i.imgur.com/8YlhP6o.jpg&quot; id=&quot;player&quot; class=&quot;plyr&quot; data-poster=&quot;https://i.imgur.com/8YlhP6o.jpg&quot; src=&quot;blob:https://s2.24cwc.com/2bf1499d-dffd-4aa2-94d8-bd73cfa041c0&quot;&gt;
                              &lt;div class=&quot;plyr__poster&quot; style=&quot;background-image: url(&amp;quot;https://i.imgur.com/8YlhP6o.jpg&amp;quot;);&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;plyr__captions&quot;&gt;&lt;/div&gt;&lt;button type=&quot;button&quot; class=&quot;plyr__control plyr__control--overlaid&quot; data-plyr=&quot;play&quot; aria-label=&quot;Play&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot;&gt;&lt;use xlink:href=&quot;#plyr-play&quot;&gt;&lt;/use&gt;&lt;/svg&gt;&lt;span class=&quot;plyr__sr-only&quot;&gt;Play&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;
                             &lt;script&gt;document.addEventListener(&#39;DOMContentLoaded&#39;, () =&gt; {
  const source = &#39;https://st61.24cwc.com/hls/token/2aymysimwymvby6obhkhgd8fy79k8/stream.m3u8&#39;;
  const video = document.querySelector(&#39;video&#39;);

  // For more options see: https://github.com/sampotts/plyr/#options
  // captions.update is required for captions to work with hls.js
  const player = new Plyr(video, { captions: { active: true, update: true, language: &#39;en&#39; } });

  if (!Hls.isSupported()) {
    video.src = source;
  } else {
    // For more Hls.js options, see https://github.com/dailymotion/hls.js
    const hls = new Hls();
    hls.loadSource(source);
    hls.attachMedia(video);
    window.hls = hls;

    // Handle changing captions
    player.on(&#39;languagechange&#39;, () =&gt; {
      // Caption support is still flaky. See: https://github.com/sampotts/plyr/issues/994
      setTimeout(() =&gt; hls.subtitleTrack = player.currentTrack, 50);
    });
  }

  // Expose player so it can be used from the console
  window.player = player;
});&lt;/script&gt;
&lt;style&gt;
.ifframe {
  position: relative;
  width: 100%;
  overflow: hidden;
  padding-top: 56.25%; /* 16:9 Aspect Ratio */
}

.responsive-iframe {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  width: 100%;
  height: 100%;
  border: none;
}
&lt;/style&gt;
                      &lt;script&gt;
                      !function t(e) {
    var r, i;
    r = this,
    i = function() {
        &quot;use strict&quot;;
        function r(t, e) {
            var r = Object.keys(t);
            if (Object.getOwnPropertySymbols) {
                var i = Object.getOwnPropertySymbols(t);
                e &amp;&amp; (i = i.filter((function(e) {
                    return Object.getOwnPropertyDescriptor(t, e).enumerable
                }
                ))),
                r.push.apply(r, i)
            }
            return r
        }
        function i(t) {
            for (var e = 1; e &lt; arguments.length; e++) {
                var i = null != arguments[e] ? arguments[e] : {};
                e % 2 ? r(Object(i), !0).forEach((function(e) {
                    var r, a, s;
                    r = t,
                    a = e,
                    s = i[e],
                    (a = n(a))in r ? Object.defineProperty(r, a, {
                        value: s,
                        enumerable: !0,
                        configurable: !0,
                        writable: !0
                    }) : r[a] = s
                }
                )) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(i)) : r(Object(i)).forEach((function(e) {
                    Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(i, e))
                }
                ))
            }
            return t
        }
        function n(t) {
            var e = function(t, e) {
                if (&quot;object&quot; != typeof t || !t)
                    return t;
                var r = t[Symbol.toPrimitive];
                if (void 0 !== r) {
                    var i = r.call(t, e || &quot;default&quot;);
                    if (&quot;object&quot; != typeof i)
                        return i;
                    throw new TypeError(&quot;@@toPrimitive must return a primitive value.&quot;)
                }
                return (&quot;string&quot; === e ? String : Number)(t)
            }(t, &quot;string&quot;);
            return &quot;symbol&quot; == typeof e ? e : String(e)
        }
        function a(t, e) {
            for (var r = 0; r &lt; e.length; r++) {
                var i = e[r];
                i.enumerable = i.enumerable || !1,
                i.configurable = !0,
                &quot;value&quot;in i &amp;&amp; (i.writable = !0),
                Object.defineProperty(t, n(i.key), i)
            }
        }
        function s(t, e, r) {
            return e &amp;&amp; a(t.prototype, e),
            r &amp;&amp; a(t, r),
            Object.defineProperty(t, &quot;prototype&quot;, {
                writable: !1
            }),
            t
        }
        function o() {
            return o = Object.assign ? Object.assign.bind() : function(t) {
                for (var e = 1; e &lt; arguments.length; e++) {
                    var r = arguments[e];
                    for (var i in r)
                        Object.prototype.hasOwnProperty.call(r, i) &amp;&amp; (t[i] = r[i])
                }
                return t
            }
            ,
            o.apply(this, arguments)
        }
        function l(t, e) {
            t.prototype = Object.create(e.prototype),
            t.prototype.constructor = t,
            h(t, e)
        }
        function u(t) {
            return u = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(t) {
                return t.__proto__ || Object.getPrototypeOf(t)
            }
            ,
            u(t)
        }
        function h(t, e) {
            return h = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(t, e) {
                return t.__proto__ = e,
                t
            }
            ,
            h(t, e)
        }
        function d(t, e, r) {
            return d = function() {
                if (&quot;undefined&quot; == typeof Reflect || !Reflect.construct)
                    return !1;
                if (Reflect.construct.sham)
                    return !1;
                if (&quot;function&quot; == typeof Proxy)
                    return !0;
                try {
                    return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], (function() {}
                    ))),
                    !0
                } catch (t) {
                    return !1
                }
            }() ? Reflect.construct.bind() : function(t, e, r) {
                var i = [null];
                i.push.apply(i, e);
                var n = new (Function.bind.apply(t, i));
                return r &amp;&amp; h(n, r.prototype),
                n
            }
            ,
            d.apply(null, arguments)
        }
        function c(t) {
            var e = &quot;function&quot; == typeof Map ? new Map : void 0;
            return c = function(t) {
                if (null === t || !function(t) {
                    try {
                        return -1 !== Function.toString.call(t).indexOf(&quot;[native code]&quot;)
                    } catch (e) {
                        return &quot;function&quot; == typeof t
                    }
                }(t))
                    return t;
                if (&quot;function&quot; != typeof t)
                    throw new TypeError(&quot;Super expression must either be null or a function&quot;);
                if (void 0 !== e) {
                    if (e.has(t))
                        return e.get(t);
                    e.set(t, r)
                }
                function r() {
                    return d(t, arguments, u(this).constructor)
                }
                return r.prototype = Object.create(t.prototype, {
                    constructor: {
                        value: r,
                        enumerable: !1,
                        writable: !0,
                        configurable: !0
                    }
                }),
                h(r, t)
            }
            ,
            c(t)
        }
        function f(t, e) {
            (null == e || e &gt; t.length) &amp;&amp; (e = t.length);
            for (var r = 0, i = new Array(e); r &lt; e; r++)
                i[r] = t[r];
            return i
        }
        function g(t, e) {
            var r = &quot;undefined&quot; != typeof Symbol &amp;&amp; t[Symbol.iterator] || t[&quot;@@iterator&quot;];
            if (r)
                return (r = r.call(t)).next.bind(r);
            if (Array.isArray(t) || (r = function(t, e) {
                if (t) {
                    if (&quot;string&quot; == typeof t)
                        return f(t, e);
                    var r = Object.prototype.toString.call(t).slice(8, -1);
                    return &quot;Object&quot; === r &amp;&amp; t.constructor &amp;&amp; (r = t.constructor.name),
                    &quot;Map&quot; === r || &quot;Set&quot; === r ? Array.from(t) : &quot;Arguments&quot; === r || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r) ? f(t, e) : void 0
                }
            }(t)) || e &amp;&amp; t &amp;&amp; &quot;number&quot; == typeof t.length) {
                r &amp;&amp; (t = r);
                var i = 0;
                return function() {
                    return i &gt;= t.length ? {
                        done: !0
                    } : {
                        done: !1,
                        value: t[i++]
                    }
                }
            }
            throw new TypeError(&quot;Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.&quot;)
        }
        function v(t) {
            return t &amp;&amp; t.__esModule &amp;&amp; Object.prototype.hasOwnProperty.call(t, &quot;default&quot;) ? t.default : t
        }
        var m = {
            exports: {}
        };
        !function(t, e) {
            var r, i, n, a, s;
            r = /^(?=((?:[a-zA-Z0-9+\-.]+:)?))\1(?=((?:\/\/[^\/?#]*)?))\2(?=((?:(?:[^?#\/]*\/)*[^;?#\/]*)?))\3((?:;[^?#]*)?)(\?[^#]*)?(#[^]*)?$/,
            i = /^(?=([^\/?#]*))\1([^]*)$/,
            n = /(?:\/|^)\.(?=\/)/g,
            a = /(?:\/|^)\.\.\/(?!\.\.\/)[^\/]*(?=\/)/g,
            s = {
                buildAbsoluteURL: function(t, e, r) {
                    if (r = r || {},
                    t = t.trim(),
                    !(e = e.trim())) {
                        if (!r.alwaysNormalize)
                            return t;
                        var n = s.parseURL(t);
                        if (!n)
                            throw new Error(&quot;Error trying to parse base URL.&quot;);
                        return n.path = s.normalizePath(n.path),
                        s.buildURLFromParts(n)
                    }
                    var a = s.parseURL(e);
                    if (!a)
                        throw new Error(&quot;Error trying to parse relative URL.&quot;);
                    if (a.scheme)
                        return r.alwaysNormalize ? (a.path = s.normalizePath(a.path),
                        s.buildURLFromParts(a)) : e;
                    var o = s.parseURL(t);
                    if (!o)
                        throw new Error(&quot;Error trying to parse base URL.&quot;);
                    if (!o.netLoc &amp;&amp; o.path &amp;&amp; &quot;/&quot; !== o.path[0]) {
                        var l = i.exec(o.path);
                        o.netLoc = l[1],
                        o.path = l[2]
                    }
                    o.netLoc &amp;&amp; !o.path &amp;&amp; (o.path = &quot;/&quot;);
                    var u = {
                        scheme: o.scheme,
                        netLoc: a.netLoc,
                        path: null,
                        params: a.params,
                        query: a.query,
                        fragment: a.fragment
                    };
                    if (!a.netLoc &amp;&amp; (u.netLoc = o.netLoc,
                    &quot;/&quot; !== a.path[0]))
                        if (a.path) {
                            var h = o.path
                              , d = h.substring(0, h.lastIndexOf(&quot;/&quot;) + 1) + a.path;
                            u.path = s.normalizePath(d)
                        } else
                            u.path = o.path,
                            a.params || (u.params = o.params,
                            a.query || (u.query = o.query));
                    return null === u.path &amp;&amp; (u.path = r.alwaysNormalize ? s.normalizePath(a.path) : a.path),
                    s.buildURLFromParts(u)
                },
                parseURL: function(t) {
                    var e = r.exec(t);
                    return e ? {
                        scheme: e[1] || &quot;&quot;,
                        netLoc: e[2] || &quot;&quot;,
                        path: e[3] || &quot;&quot;,
                        params: e[4] || &quot;&quot;,
                        query: e[5] || &quot;&quot;,
                        fragment: e[6] || &quot;&quot;
                    } : null
                },
                normalizePath: function(t) {
                    for (t = t.split(&quot;&quot;).reverse().join(&quot;&quot;).replace(n, &quot;&quot;); t.length !== (t = t.replace(a, &quot;&quot;)).length; )
                        ;
                    return t.split(&quot;&quot;).reverse().join(&quot;&quot;)
                },
                buildURLFromParts: function(t) {
                    return t.scheme + t.netLoc + t.path + t.params + t.query + t.fragment
                }
            },
            t.exports = s
        }(m);
        var p = m.exports
          , y = Number.isFinite || function(t) {
            return &quot;number&quot; == typeof t &amp;&amp; isFinite(t)
        }
          , E = Number.isSafeInteger || function(t) {
            return &quot;number&quot; == typeof t &amp;&amp; Math.abs(t) &lt;= T
        }
          , T = Number.MAX_SAFE_INTEGER || 9007199254740991
          , S = function(t) {
            return t.MEDIA_ATTACHING = &quot;hlsMediaAttaching&quot;,
            t.MEDIA_ATTACHED = &quot;hlsMediaAttached&quot;,
            t.MEDIA_DETACHING = &quot;hlsMediaDetaching&quot;,
            t.MEDIA_DETACHED = &quot;hlsMediaDetached&quot;,
            t.BUFFER_RESET = &quot;hlsBufferReset&quot;,
            t.BUFFER_CODECS = &quot;hlsBufferCodecs&quot;,
            t.BUFFER_CREATED = &quot;hlsBufferCreated&quot;,
            t.BUFFER_APPENDING = &quot;hlsBufferAppending&quot;,
            t.BUFFER_APPENDED = &quot;hlsBufferAppended&quot;,
            t.BUFFER_EOS = &quot;hlsBufferEos&quot;,
            t.BUFFER_FLUSHING = &quot;hlsBufferFlushing&quot;,
            t.BUFFER_FLUSHED = &quot;hlsBufferFlushed&quot;,
            t.MANIFEST_LOADING = &quot;hlsManifestLoading&quot;,
            t.MANIFEST_LOADED = &quot;hlsManifestLoaded&quot;,
            t.MANIFEST_PARSED = &quot;hlsManifestParsed&quot;,
            t.LEVEL_SWITCHING = &quot;hlsLevelSwitching&quot;,
            t.LEVEL_SWITCHED = &quot;hlsLevelSwitched&quot;,
            t.LEVEL_LOADING = &quot;hlsLevelLoading&quot;,
            t.LEVEL_LOADED = &quot;hlsLevelLoaded&quot;,
            t.LEVEL_UPDATED = &quot;hlsLevelUpdated&quot;,
            t.LEVEL_PTS_UPDATED = &quot;hlsLevelPtsUpdated&quot;,
            t.LEVELS_UPDATED = &quot;hlsLevelsUpdated&quot;,
            t.AUDIO_TRACKS_UPDATED = &quot;hlsAudioTracksUpdated&quot;,
            t.AUDIO_TRACK_SWITCHING = &quot;hlsAudioTrackSwitching&quot;,
            t.AUDIO_TRACK_SWITCHED = &quot;hlsAudioTrackSwitched&quot;,
            t.AUDIO_TRACK_LOADING = &quot;hlsAudioTrackLoading&quot;,
            t.AUDIO_TRACK_LOADED = &quot;hlsAudioTrackLoaded&quot;,
            t.SUBTITLE_TRACKS_UPDATED = &quot;hlsSubtitleTracksUpdated&quot;,
            t.SUBTITLE_TRACKS_CLEARED = &quot;hlsSubtitleTracksCleared&quot;,
            t.SUBTITLE_TRACK_SWITCH = &quot;hlsSubtitleTrackSwitch&quot;,
            t.SUBTITLE_TRACK_LOADING = &quot;hlsSubtitleTrackLoading&quot;,
            t.SUBTITLE_TRACK_LOADED = &quot;hlsSubtitleTrackLoaded&quot;,
            t.SUBTITLE_FRAG_PROCESSED = &quot;hlsSubtitleFragProcessed&quot;,
            t.CUES_PARSED = &quot;hlsCuesParsed&quot;,
            t.NON_NATIVE_TEXT_TRACKS_FOUND = &quot;hlsNonNativeTextTracksFound&quot;,
            t.INIT_PTS_FOUND = &quot;hlsInitPtsFound&quot;,
            t.FRAG_LOADING = &quot;hlsFragLoading&quot;,
            t.FRAG_LOAD_EMERGENCY_ABORTED = &quot;hlsFragLoadEmergencyAborted&quot;,
            t.FRAG_LOADED = &quot;hlsFragLoaded&quot;,
            t.FRAG_DECRYPTED = &quot;hlsFragDecrypted&quot;,
            t.FRAG_PARSING_INIT_SEGMENT = &quot;hlsFragParsingInitSegment&quot;,
            t.FRAG_PARSING_USERDATA = &quot;hlsFragParsingUserdata&quot;,
            t.FRAG_PARSING_METADATA = &quot;hlsFragParsingMetadata&quot;,
            t.FRAG_PARSED = &quot;hlsFragParsed&quot;,
            t.FRAG_BUFFERED = &quot;hlsFragBuffered&quot;,
            t.FRAG_CHANGED = &quot;hlsFragChanged&quot;,
            t.FPS_DROP = &quot;hlsFpsDrop&quot;,
            t.FPS_DROP_LEVEL_CAPPING = &quot;hlsFpsDropLevelCapping&quot;,
            t.MAX_AUTO_LEVEL_UPDATED = &quot;hlsMaxAutoLevelUpdated&quot;,
            t.ERROR = &quot;hlsError&quot;,
            t.DESTROYING = &quot;hlsDestroying&quot;,
            t.KEY_LOADING = &quot;hlsKeyLoading&quot;,
            t.KEY_LOADED = &quot;hlsKeyLoaded&quot;,
            t.LIVE_BACK_BUFFER_REACHED = &quot;hlsLiveBackBufferReached&quot;,
            t.BACK_BUFFER_REACHED = &quot;hlsBackBufferReached&quot;,
            t.STEERING_MANIFEST_LOADED = &quot;hlsSteeringManifestLoaded&quot;,
            t
        }({})
          , L = function(t) {
            return t.NETWORK_ERROR = &quot;networkError&quot;,
            t.MEDIA_ERROR = &quot;mediaError&quot;,
            t.KEY_SYSTEM_ERROR = &quot;keySystemError&quot;,
            t.MUX_ERROR = &quot;muxError&quot;,
            t.OTHER_ERROR = &quot;otherError&quot;,
            t
        }({})
          , A = function(t) {
            return t.KEY_SYSTEM_NO_KEYS = &quot;keySystemNoKeys&quot;,
            t.KEY_SYSTEM_NO_ACCESS = &quot;keySystemNoAccess&quot;,
            t.KEY_SYSTEM_NO_SESSION = &quot;keySystemNoSession&quot;,
            t.KEY_SYSTEM_NO_CONFIGURED_LICENSE = &quot;keySystemNoConfiguredLicense&quot;,
            t.KEY_SYSTEM_LICENSE_REQUEST_FAILED = &quot;keySystemLicenseRequestFailed&quot;,
            t.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED = &quot;keySystemServerCertificateRequestFailed&quot;,
            t.KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED = &quot;keySystemServerCertificateUpdateFailed&quot;,
            t.KEY_SYSTEM_SESSION_UPDATE_FAILED = &quot;keySystemSessionUpdateFailed&quot;,
            t.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED = &quot;keySystemStatusOutputRestricted&quot;,
            t.KEY_SYSTEM_STATUS_INTERNAL_ERROR = &quot;keySystemStatusInternalError&quot;,
            t.MANIFEST_LOAD_ERROR = &quot;manifestLoadError&quot;,
            t.MANIFEST_LOAD_TIMEOUT = &quot;manifestLoadTimeOut&quot;,
            t.MANIFEST_PARSING_ERROR = &quot;manifestParsingError&quot;,
            t.MANIFEST_INCOMPATIBLE_CODECS_ERROR = &quot;manifestIncompatibleCodecsError&quot;,
            t.LEVEL_EMPTY_ERROR = &quot;levelEmptyError&quot;,
            t.LEVEL_LOAD_ERROR = &quot;levelLoadError&quot;,
            t.LEVEL_LOAD_TIMEOUT = &quot;levelLoadTimeOut&quot;,
            t.LEVEL_PARSING_ERROR = &quot;levelParsingError&quot;,
            t.LEVEL_SWITCH_ERROR = &quot;levelSwitchError&quot;,
            t.AUDIO_TRACK_LOAD_ERROR = &quot;audioTrackLoadError&quot;,
            t.AUDIO_TRACK_LOAD_TIMEOUT = &quot;audioTrackLoadTimeOut&quot;,
            t.SUBTITLE_LOAD_ERROR = &quot;subtitleTrackLoadError&quot;,
            t.SUBTITLE_TRACK_LOAD_TIMEOUT = &quot;subtitleTrackLoadTimeOut&quot;,
            t.FRAG_LOAD_ERROR = &quot;fragLoadError&quot;,
            t.FRAG_LOAD_TIMEOUT = &quot;fragLoadTimeOut&quot;,
            t.FRAG_DECRYPT_ERROR = &quot;fragDecryptError&quot;,
            t.FRAG_PARSING_ERROR = &quot;fragParsingError&quot;,
            t.FRAG_GAP = &quot;fragGap&quot;,
            t.REMUX_ALLOC_ERROR = &quot;remuxAllocError&quot;,
            t.KEY_LOAD_ERROR = &quot;keyLoadError&quot;,
            t.KEY_LOAD_TIMEOUT = &quot;keyLoadTimeOut&quot;,
            t.BUFFER_ADD_CODEC_ERROR = &quot;bufferAddCodecError&quot;,
            t.BUFFER_INCOMPATIBLE_CODECS_ERROR = &quot;bufferIncompatibleCodecsError&quot;,
            t.BUFFER_APPEND_ERROR = &quot;bufferAppendError&quot;,
            t.BUFFER_APPENDING_ERROR = &quot;bufferAppendingError&quot;,
            t.BUFFER_STALLED_ERROR = &quot;bufferStalledError&quot;,
            t.BUFFER_FULL_ERROR = &quot;bufferFullError&quot;,
            t.BUFFER_SEEK_OVER_HOLE = &quot;bufferSeekOverHole&quot;,
            t.BUFFER_NUDGE_ON_STALL = &quot;bufferNudgeOnStall&quot;,
            t.INTERNAL_EXCEPTION = &quot;internalException&quot;,
            t.INTERNAL_ABORTED = &quot;aborted&quot;,
            t.UNKNOWN = &quot;unknown&quot;,
            t
        }({})
          , R = function() {}
          , k = {
            trace: R,
            debug: R,
            log: R,
            warn: R,
            info: R,
            error: R
        }
          , b = k;
        function D(t) {
            for (var e = arguments.length, r = new Array(e &gt; 1 ? e - 1 : 0), i = 1; i &lt; e; i++)
                r[i - 1] = arguments[i];
            r.forEach((function(e) {
                b[e] = t[e] ? t[e].bind(t) : function(t) {
                    var e = self.console[t];
                    return e ? e.bind(self.console, &quot;[&quot; + t + &quot;] &gt;&quot;) : R
                }(e)
            }
            ))
        }
        function I(t, e) {
            if (&quot;object&quot; == typeof console &amp;&amp; !0 === t || &quot;object&quot; == typeof t) {
                D(t, &quot;debug&quot;, &quot;log&quot;, &quot;info&quot;, &quot;warn&quot;, &quot;error&quot;);
                try {
                    b.log(&#39;Debug logs enabled for &quot;&#39; + e + &#39;&quot; in hls.js version 1.5.11&#39;)
                } catch (t) {
                    b = k
                }
            } else
                b = k
        }
        var w = b
          , C = /^(\d+)x(\d+)$/
          , _ = /(.+?)=(&quot;.*?&quot;|.*?)(?:,|$)/g
          , x = function() {
            function t(e) {
                &quot;string&quot; == typeof e &amp;&amp; (e = t.parseAttrList(e)),
                o(this, e)
            }
            var e = t.prototype;
            return e.decimalInteger = function(t) {
                var e = parseInt(this[t], 10);
                return e &gt; Number.MAX_SAFE_INTEGER ? 1 / 0 : e
            }
            ,
            e.hexadecimalInteger = function(t) {
                if (this[t]) {
                    var e = (this[t] || &quot;0x&quot;).slice(2);
                    e = (1 &amp; e.length ? &quot;0&quot; : &quot;&quot;) + e;
                    for (var r = new Uint8Array(e.length / 2), i = 0; i &lt; e.length / 2; i++)
                        r[i] = parseInt(e.slice(2 * i, 2 * i + 2), 16);
                    return r
                }
                return null
            }
            ,
            e.hexadecimalIntegerAsNumber = function(t) {
                var e = parseInt(this[t], 16);
                return e &gt; Number.MAX_SAFE_INTEGER ? 1 / 0 : e
            }
            ,
            e.decimalFloatingPoint = function(t) {
                return parseFloat(this[t])
            }
            ,
            e.optionalFloat = function(t, e) {
                var r = this[t];
                return r ? parseFloat(r) : e
            }
            ,
            e.enumeratedString = function(t) {
                return this[t]
            }
            ,
            e.bool = function(t) {
                return &quot;YES&quot; === this[t]
            }
            ,
            e.decimalResolution = function(t) {
                var e = C.exec(this[t]);
                if (null !== e)
                    return {
                        width: parseInt(e[1], 10),
                        height: parseInt(e[2], 10)
                    }
            }
            ,
            t.parseAttrList = function(t) {
                var e, r = {};
                for (_.lastIndex = 0; null !== (e = _.exec(t)); ) {
                    var i = e[2];
                    0 === i.indexOf(&#39;&quot;&#39;) &amp;&amp; i.lastIndexOf(&#39;&quot;&#39;) === i.length - 1 &amp;&amp; (i = i.slice(1, -1)),
                    r[e[1].trim()] = i
                }
                return r
            }
            ,
            s(t, [{
                key: &quot;clientAttrs&quot;,
                get: function() {
                    return Object.keys(this).filter((function(t) {
                        return &quot;X-&quot; === t.substring(0, 2)
                    }
                    ))
                }
            }]),
            t
        }();
        function P(t) {
            return &quot;SCTE35-OUT&quot; === t || &quot;SCTE35-IN&quot; === t
        }
        var F = function() {
            function t(t, e) {
                if (this.attr = void 0,
                this._startDate = void 0,
                this._endDate = void 0,
                this._badValueForSameId = void 0,
                e) {
                    var r = e.attr;
                    for (var i in r)
                        if (Object.prototype.hasOwnProperty.call(t, i) &amp;&amp; t[i] !== r[i]) {
                            w.warn(&#39;DATERANGE tag attribute: &quot;&#39; + i + &#39;&quot; does not match for tags with ID: &quot;&#39; + t.ID + &#39;&quot;&#39;),
                            this._badValueForSameId = i;
                            break
                        }
                    t = o(new x({}), r, t)
                }
                if (this.attr = t,
                this._startDate = new Date(t[&quot;START-DATE&quot;]),
                &quot;END-DATE&quot;in this.attr) {
                    var n = new Date(this.attr[&quot;END-DATE&quot;]);
                    y(n.getTime()) &amp;&amp; (this._endDate = n)
                }
            }
            return s(t, [{
                key: &quot;id&quot;,
                get: function() {
                    return this.attr.ID
                }
            }, {
                key: &quot;class&quot;,
                get: function() {
                    return this.attr.CLASS
                }
            }, {
                key: &quot;startDate&quot;,
                get: function() {
                    return this._startDate
                }
            }, {
                key: &quot;endDate&quot;,
                get: function() {
                    if (this._endDate)
                        return this._endDate;
                    var t = this.duration;
                    return null !== t ? new Date(this._startDate.getTime() + 1e3 * t) : null
                }
            }, {
                key: &quot;duration&quot;,
                get: function() {
                    if (&quot;DURATION&quot;in this.attr) {
                        var t = this.attr.decimalFloatingPoint(&quot;DURATION&quot;);
                        if (y(t))
                            return t
                    } else if (this._endDate)
                        return (this._endDate.getTime() - this._startDate.getTime()) / 1e3;
                    return null
                }
            }, {
                key: &quot;plannedDuration&quot;,
                get: function() {
                    return &quot;PLANNED-DURATION&quot;in this.attr ? this.attr.decimalFloatingPoint(&quot;PLANNED-DURATION&quot;) : null
                }
            }, {
                key: &quot;endOnNext&quot;,
                get: function() {
                    return this.attr.bool(&quot;END-ON-NEXT&quot;)
                }
            }, {
                key: &quot;isValid&quot;,
                get: function() {
                    return !!this.id &amp;&amp; !this._badValueForSameId &amp;&amp; y(this.startDate.getTime()) &amp;&amp; (null === this.duration || this.duration &gt;= 0) &amp;&amp; (!this.endOnNext || !!this.class)
                }
            }]),
            t
        }()
          , M = function() {
            this.aborted = !1,
            this.loaded = 0,
            this.retry = 0,
            this.total = 0,
            this.chunkCount = 0,
            this.bwEstimate = 0,
            this.loading = {
                start: 0,
                first: 0,
                end: 0
            },
            this.parsing = {
                start: 0,
                end: 0
            },
            this.buffering = {
                start: 0,
                first: 0,
                end: 0
            }
        }
          , O = &quot;audio&quot;
          , N = &quot;video&quot;
          , U = &quot;audiovideo&quot;
          , B = function() {
            function t(t) {
                var e;
                this._byteRange = null,
                this._url = null,
                this.baseurl = void 0,
                this.relurl = void 0,
                this.elementaryStreams = ((e = {})[O] = null,
                e[N] = null,
                e[U] = null,
                e),
                this.baseurl = t
            }
            return t.prototype.setByteRange = function(t, e) {
                var r, i = t.split(&quot;@&quot;, 2);
                r = 1 === i.length ? (null == e ? void 0 : e.byteRangeEndOffset) || 0 : parseInt(i[1]),
                this._byteRange = [r, parseInt(i[0]) + r]
            }
            ,
            s(t, [{
                key: &quot;byteRange&quot;,
                get: function() {
                    return this._byteRange ? this._byteRange : []
                }
            }, {
                key: &quot;byteRangeStartOffset&quot;,
                get: function() {
                    return this.byteRange[0]
                }
            }, {
                key: &quot;byteRangeEndOffset&quot;,
                get: function() {
                    return this.byteRange[1]
                }
            }, {
                key: &quot;url&quot;,
                get: function() {
                    return !this._url &amp;&amp; this.baseurl &amp;&amp; this.relurl &amp;&amp; (this._url = p.buildAbsoluteURL(this.baseurl, this.relurl, {
                        alwaysNormalize: !0
                    })),
                    this._url || &quot;&quot;
                },
                set: function(t) {
                    this._url = t
                }
            }]),
            t
        }()
          , G = function(t) {
            function e(e, r) {
                var i;
                return (i = t.call(this, r) || this)._decryptdata = null,
                i.rawProgramDateTime = null,
                i.programDateTime = null,
                i.tagList = [],
                i.duration = 0,
                i.sn = 0,
                i.levelkeys = void 0,
                i.type = void 0,
                i.loader = null,
                i.keyLoader = null,
                i.level = -1,
                i.cc = 0,
                i.startPTS = void 0,
                i.endPTS = void 0,
                i.startDTS = void 0,
                i.endDTS = void 0,
                i.start = 0,
                i.deltaPTS = void 0,
                i.maxStartPTS = void 0,
                i.minEndPTS = void 0,
                i.stats = new M,
                i.data = void 0,
                i.bitrateTest = !1,
                i.title = null,
                i.initSegment = null,
                i.endList = void 0,
                i.gap = void 0,
                i.urlId = 0,
                i.type = e,
                i
            }
            l(e, t);
            var r = e.prototype;
            return r.setKeyFormat = function(t) {
                if (this.levelkeys) {
                    var e = this.levelkeys[t];
                    e &amp;&amp; !this._decryptdata &amp;&amp; (this._decryptdata = e.getDecryptData(this.sn))
                }
            }
            ,
            r.abortRequests = function() {
                var t, e;
                null == (t = this.loader) || t.abort(),
                null == (e = this.keyLoader) || e.abort()
            }
            ,
            r.setElementaryStreamInfo = function(t, e, r, i, n, a) {
                void 0 === a &amp;&amp; (a = !1);
                var s = this.elementaryStreams
                  , o = s[t];
                o ? (o.startPTS = Math.min(o.startPTS, e),
                o.endPTS = Math.max(o.endPTS, r),
                o.startDTS = Math.min(o.startDTS, i),
                o.endDTS = Math.max(o.endDTS, n)) : s[t] = {
                    startPTS: e,
                    endPTS: r,
                    startDTS: i,
                    endDTS: n,
                    partial: a
                }
            }
            ,
            r.clearElementaryStreamInfo = function() {
                var t = this.elementaryStreams;
                t[O] = null,
                t[N] = null,
                t[U] = null
            }
            ,
            s(e, [{
                key: &quot;decryptdata&quot;,
                get: function() {
                    if (!this.levelkeys &amp;&amp; !this._decryptdata)
                        return null;
                    if (!this._decryptdata &amp;&amp; this.levelkeys &amp;&amp; !this.levelkeys.NONE) {
                        var t = this.levelkeys.identity;
                        if (t)
                            this._decryptdata = t.getDecryptData(this.sn);
                        else {
                            var e = Object.keys(this.levelkeys);
                            if (1 === e.length)
                                return this._decryptdata = this.levelkeys[e[0]].getDecryptData(this.sn)
                        }
                    }
                    return this._decryptdata
                }
            }, {
                key: &quot;end&quot;,
                get: function() {
                    return this.start + this.duration
                }
            }, {
                key: &quot;endProgramDateTime&quot;,
                get: function() {
                    if (null === this.programDateTime)
                        return null;
                    if (!y(this.programDateTime))
                        return null;
                    var t = y(this.duration) ? this.duration : 0;
                    return this.programDateTime + 1e3 * t
                }
            }, {
                key: &quot;encrypted&quot;,
                get: function() {
                    var t;
                    if (null != (t = this._decryptdata) &amp;&amp; t.encrypted)
                        return !0;
                    if (this.levelkeys) {
                        var e = Object.keys(this.levelkeys)
                          , r = e.length;
                        if (r &gt; 1 || 1 === r &amp;&amp; this.levelkeys[e[0]].encrypted)
                            return !0
                    }
                    return !1
                }
            }]),
            e
        }(B)
          , K = function(t) {
            function e(e, r, i, n, a) {
                var s;
                (s = t.call(this, i) || this).fragOffset = 0,
                s.duration = 0,
                s.gap = !1,
                s.independent = !1,
                s.relurl = void 0,
                s.fragment = void 0,
                s.index = void 0,
                s.stats = new M,
                s.duration = e.decimalFloatingPoint(&quot;DURATION&quot;),
                s.gap = e.bool(&quot;GAP&quot;),
                s.independent = e.bool(&quot;INDEPENDENT&quot;),
                s.relurl = e.enumeratedString(&quot;URI&quot;),
                s.fragment = r,
                s.index = n;
                var o = e.enumeratedString(&quot;BYTERANGE&quot;);
                return o &amp;&amp; s.setByteRange(o, a),
                a &amp;&amp; (s.fragOffset = a.fragOffset + a.duration),
                s
            }
            return l(e, t),
            s(e, [{
                key: &quot;start&quot;,
                get: function() {
                    return this.fragment.start + this.fragOffset
                }
            }, {
                key: &quot;end&quot;,
                get: function() {
                    return this.start + this.duration
                }
            }, {
                key: &quot;loaded&quot;,
                get: function() {
                    var t = this.elementaryStreams;
                    return !!(t.audio || t.video || t.audiovideo)
                }
            }]),
            e
        }(B)
          , H = function() {
            function t(t) {
                this.PTSKnown = !1,
                this.alignedSliding = !1,
                this.averagetargetduration = void 0,
                this.endCC = 0,
                this.endSN = 0,
                this.fragments = void 0,
                this.fragmentHint = void 0,
                this.partList = null,
                this.dateRanges = void 0,
                this.live = !0,
                this.ageHeader = 0,
                this.advancedDateTime = void 0,
                this.updated = !0,
                this.advanced = !0,
                this.availabilityDelay = void 0,
                this.misses = 0,
                this.startCC = 0,
                this.startSN = 0,
                this.startTimeOffset = null,
                this.targetduration = 0,
                this.totalduration = 0,
                this.type = null,
                this.url = void 0,
                this.m3u8 = &quot;&quot;,
                this.version = null,
                this.canBlockReload = !1,
                this.canSkipUntil = 0,
                this.canSkipDateRanges = !1,
                this.skippedSegments = 0,
                this.recentlyRemovedDateranges = void 0,
                this.partHoldBack = 0,
                this.holdBack = 0,
                this.partTarget = 0,
                this.preloadHint = void 0,
                this.renditionReports = void 0,
                this.tuneInGoal = 0,
                this.deltaUpdateFailed = void 0,
                this.driftStartTime = 0,
                this.driftEndTime = 0,
                this.driftStart = 0,
                this.driftEnd = 0,
                this.encryptedFragments = void 0,
                this.playlistParsingError = null,
                this.variableList = null,
                this.hasVariableRefs = !1,
                this.fragments = [],
                this.encryptedFragments = [],
                this.dateRanges = {},
                this.url = t
            }
            return t.prototype.reloaded = function(t) {
                if (!t)
                    return this.advanced = !0,
                    void (this.updated = !0);
                var e = this.lastPartSn - t.lastPartSn
                  , r = this.lastPartIndex - t.lastPartIndex;
                this.updated = this.endSN !== t.endSN || !!r || !!e || !this.live,
                this.advanced = this.endSN &gt; t.endSN || e &gt; 0 || 0 === e &amp;&amp; r &gt; 0,
                this.updated || this.advanced ? this.misses = Math.floor(.6 * t.misses) : this.misses = t.misses + 1,
                this.availabilityDelay = t.availabilityDelay
            }
            ,
            s(t, [{
                key: &quot;hasProgramDateTime&quot;,
                get: function() {
                    return !!this.fragments.length &amp;&amp; y(this.fragments[this.fragments.length - 1].programDateTime)
                }
            }, {
                key: &quot;levelTargetDuration&quot;,
                get: function() {
                    return this.averagetargetduration || this.targetduration || 10
                }
            }, {
                key: &quot;drift&quot;,
                get: function() {
                    var t = this.driftEndTime - this.driftStartTime;
                    return t &gt; 0 ? 1e3 * (this.driftEnd - this.driftStart) / t : 1
                }
            }, {
                key: &quot;edge&quot;,
                get: function() {
                    return this.partEnd || this.fragmentEnd
                }
            }, {
                key: &quot;partEnd&quot;,
                get: function() {
                    var t;
                    return null != (t = this.partList) &amp;&amp; t.length ? this.partList[this.partList.length - 1].end : this.fragmentEnd
                }
            }, {
                key: &quot;fragmentEnd&quot;,
                get: function() {
                    var t;
                    return null != (t = this.fragments) &amp;&amp; t.length ? this.fragments[this.fragments.length - 1].end : 0
                }
            }, {
                key: &quot;age&quot;,
                get: function() {
                    return this.advancedDateTime ? Math.max(Date.now() - this.advancedDateTime, 0) / 1e3 : 0
                }
            }, {
                key: &quot;lastPartIndex&quot;,
                get: function() {
                    var t;
                    return null != (t = this.partList) &amp;&amp; t.length ? this.partList[this.partList.length - 1].index : -1
                }
            }, {
                key: &quot;lastPartSn&quot;,
                get: function() {
                    var t;
                    return null != (t = this.partList) &amp;&amp; t.length ? this.partList[this.partList.length - 1].fragment.sn : this.endSN
                }
            }]),
            t
        }();
        function V(t) {
            return Uint8Array.from(atob(t), (function(t) {
                return t.charCodeAt(0)
            }
            ))
        }
        function Y(t) {
            var e, r, i = t.split(&quot;:&quot;), n = null;
            if (&quot;data&quot; === i[0] &amp;&amp; 2 === i.length) {
                var a = i[1].split(&quot;;&quot;)
                  , s = a[a.length - 1].split(&quot;,&quot;);
                if (2 === s.length) {
                    var o = &quot;base64&quot; === s[0]
                      , l = s[1];
                    o ? (a.splice(-1, 1),
                    n = V(l)) : (e = W(l).subarray(0, 16),
                    (r = new Uint8Array(16)).set(e, 16 - e.length),
                    n = r)
                }
            }
            return n
        }
        function W(t) {
            return Uint8Array.from(unescape(encodeURIComponent(t)), (function(t) {
                return t.charCodeAt(0)
            }
            ))
        }
        var j = &quot;undefined&quot; != typeof self ? self : void 0
          , q = {
            CLEARKEY: &quot;org.w3.clearkey&quot;,
            FAIRPLAY: &quot;com.apple.fps&quot;,
            PLAYREADY: &quot;com.microsoft.playready&quot;,
            WIDEVINE: &quot;com.widevine.alpha&quot;
        }
          , X = &quot;org.w3.clearkey&quot;
          , z = &quot;com.apple.streamingkeydelivery&quot;
          , Q = &quot;com.microsoft.playready&quot;
          , J = &quot;urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed&quot;;
        function $(t) {
            switch (t) {
            case z:
                return q.FAIRPLAY;
            case Q:
                return q.PLAYREADY;
            case J:
                return q.WIDEVINE;
            case X:
                return q.CLEARKEY
            }
        }
        var Z = &quot;edef8ba979d64acea3c827dcd51d21ed&quot;;
        function tt(t) {
            switch (t) {
            case q.FAIRPLAY:
                return z;
            case q.PLAYREADY:
                return Q;
            case q.WIDEVINE:
                return J;
            case q.CLEARKEY:
                return X
            }
        }
        function et(t) {
            var e = t.drmSystems
              , r = t.widevineLicenseUrl
              , i = e ? [q.FAIRPLAY, q.WIDEVINE, q.PLAYREADY, q.CLEARKEY].filter((function(t) {
                return !!e[t]
            }
            )) : [];
            return !i[q.WIDEVINE] &amp;&amp; r &amp;&amp; i.push(q.WIDEVINE),
            i
        }
        var rt, it = null != j &amp;&amp; null != (rt = j.navigator) &amp;&amp; rt.requestMediaKeySystemAccess ? self.navigator.requestMediaKeySystemAccess.bind(self.navigator) : null;
        function nt(t, e, r) {
            return Uint8Array.prototype.slice ? t.slice(e, r) : new Uint8Array(Array.prototype.slice.call(t, e, r))
        }
        var at, st = function(t, e) {
            return e + 10 &lt;= t.length &amp;&amp; 73 === t[e] &amp;&amp; 68 === t[e + 1] &amp;&amp; 51 === t[e + 2] &amp;&amp; t[e + 3] &lt; 255 &amp;&amp; t[e + 4] &lt; 255 &amp;&amp; t[e + 6] &lt; 128 &amp;&amp; t[e + 7] &lt; 128 &amp;&amp; t[e + 8] &lt; 128 &amp;&amp; t[e + 9] &lt; 128
        }, ot = function(t, e) {
            return e + 10 &lt;= t.length &amp;&amp; 51 === t[e] &amp;&amp; 68 === t[e + 1] &amp;&amp; 73 === t[e + 2] &amp;&amp; t[e + 3] &lt; 255 &amp;&amp; t[e + 4] &lt; 255 &amp;&amp; t[e + 6] &lt; 128 &amp;&amp; t[e + 7] &lt; 128 &amp;&amp; t[e + 8] &lt; 128 &amp;&amp; t[e + 9] &lt; 128
        }, lt = function(t, e) {
            for (var r = e, i = 0; st(t, e); )
                i += 10,
                i += ut(t, e + 6),
                ot(t, e + 10) &amp;&amp; (i += 10),
                e += i;
            if (i &gt; 0)
                return t.subarray(r, r + i)
        }, ut = function(t, e) {
            var r = 0;
            return r = (127 &amp; t[e]) &lt;&lt; 21,
            r |= (127 &amp; t[e + 1]) &lt;&lt; 14,
            r |= (127 &amp; t[e + 2]) &lt;&lt; 7,
            r |= 127 &amp; t[e + 3]
        }, ht = function(t, e) {
            return st(t, e) &amp;&amp; ut(t, e + 6) + 10 &lt;= t.length - e
        }, dt = function(t) {
            for (var e = gt(t), r = 0; r &lt; e.length; r++) {
                var i = e[r];
                if (ct(i))
                    return Et(i)
            }
        }, ct = function(t) {
            return t &amp;&amp; &quot;PRIV&quot; === t.key &amp;&amp; &quot;com.apple.streaming.transportStreamTimestamp&quot; === t.info
        }, ft = function(t) {
            var e = String.fromCharCode(t[0], t[1], t[2], t[3])
              , r = ut(t, 4);
            return {
                type: e,
                size: r,
                data: t.subarray(10, 10 + r)
            }
        }, gt = function(t) {
            for (var e = 0, r = []; st(t, e); ) {
                for (var i = ut(t, e + 6), n = (e += 10) + i; e + 8 &lt; n; ) {
                    var a = ft(t.subarray(e))
                      , s = vt(a);
                    s &amp;&amp; r.push(s),
                    e += a.size + 10
                }
                ot(t, e) &amp;&amp; (e += 10)
            }
            return r
        }, vt = function(t) {
            return &quot;PRIV&quot; === t.type ? mt(t) : &quot;W&quot; === t.type[0] ? yt(t) : pt(t)
        }, mt = function(t) {
            if (!(t.size &lt; 2)) {
                var e = Tt(t.data, !0)
                  , r = new Uint8Array(t.data.subarray(e.length + 1));
                return {
                    key: t.type,
                    info: e,
                    data: r.buffer
                }
            }
        }, pt = function(t) {
            if (!(t.size &lt; 2)) {
                if (&quot;TXXX&quot; === t.type) {
                    var e = 1
                      , r = Tt(t.data.subarray(e), !0);
                    e += r.length + 1;
                    var i = Tt(t.data.subarray(e));
                    return {
                        key: t.type,
                        info: r,
                        data: i
                    }
                }
                var n = Tt(t.data.subarray(1));
                return {
                    key: t.type,
                    data: n
                }
            }
        }, yt = function(t) {
            if (&quot;WXXX&quot; === t.type) {
                if (t.size &lt; 2)
                    return;
                var e = 1
                  , r = Tt(t.data.subarray(e), !0);
                e += r.length + 1;
                var i = Tt(t.data.subarray(e));
                return {
                    key: t.type,
                    info: r,
                    data: i
                }
            }
            var n = Tt(t.data);
            return {
                key: t.type,
                data: n
            }
        }, Et = function(t) {
            if (8 === t.data.byteLength) {
                var e = new Uint8Array(t.data)
                  , r = 1 &amp; e[3]
                  , i = (e[4] &lt;&lt; 23) + (e[5] &lt;&lt; 15) + (e[6] &lt;&lt; 7) + e[7];
                return i /= 45,
                r &amp;&amp; (i += 47721858.84),
                Math.round(i)
            }
        }, Tt = function(t, e) {
            void 0 === e &amp;&amp; (e = !1);
            var r = St();
            if (r) {
                var i = r.decode(t);
                if (e) {
                    var n = i.indexOf(&quot;\0&quot;);
                    return -1 !== n ? i.substring(0, n) : i
                }
                return i.replace(/\0/g, &quot;&quot;)
            }
            for (var a, s, o, l = t.length, u = &quot;&quot;, h = 0; h &lt; l; ) {
                if (0 === (a = t[h++]) &amp;&amp; e)
                    return u;
                if (0 !== a &amp;&amp; 3 !== a)
                    switch (a &gt;&gt; 4) {
                    case 0:
                    case 1:
                    case 2:
                    case 3:
                    case 4:
                    case 5:
                    case 6:
                    case 7:
                        u += String.fromCharCode(a);
                        break;
                    case 12:
                    case 13:
                        s = t[h++],
                        u += String.fromCharCode((31 &amp; a) &lt;&lt; 6 | 63 &amp; s);
                        break;
                    case 14:
                        s = t[h++],
                        o = t[h++],
                        u += String.fromCharCode((15 &amp; a) &lt;&lt; 12 | (63 &amp; s) &lt;&lt; 6 | (63 &amp; o) &lt;&lt; 0)
                    }
            }
            return u
        };
        function St() {
            if (!navigator.userAgent.includes(&quot;PlayStation 4&quot;))
                return at || void 0 === self.TextDecoder || (at = new self.TextDecoder(&quot;utf-8&quot;)),
                at
        }
        var Lt = function(t) {
            for (var e = &quot;&quot;, r = 0; r &lt; t.length; r++) {
                var i = t[r].toString(16);
                i.length &lt; 2 &amp;&amp; (i = &quot;0&quot; + i),
                e += i
            }
            return e
        }
          , At = Math.pow(2, 32) - 1
          , Rt = [].push
          , kt = {
            video: 1,
            audio: 2,
            id3: 3,
            text: 4
        };
        function bt(t) {
            return String.fromCharCode.apply(null, t)
        }
        function Dt(t, e) {
            var r = t[e] &lt;&lt; 8 | t[e + 1];
            return r &lt; 0 ? 65536 + r : r
        }
        function It(t, e) {
            var r = Ct(t, e);
            return r &lt; 0 ? 4294967296 + r : r
        }
        function wt(t, e) {
            var r = It(t, e);
            return r *= Math.pow(2, 32),
            r += It(t, e + 4)
        }
        function Ct(t, e) {
            return t[e] &lt;&lt; 24 | t[e + 1] &lt;&lt; 16 | t[e + 2] &lt;&lt; 8 | t[e + 3]
        }
        function _t(t, e, r) {
            t[e] = r &gt;&gt; 24,
            t[e + 1] = r &gt;&gt; 16 &amp; 255,
            t[e + 2] = r &gt;&gt; 8 &amp; 255,
            t[e + 3] = 255 &amp; r
        }
        function xt(t, e) {
            var r = [];
            if (!e.length)
                return r;
            for (var i = t.byteLength, n = 0; n &lt; i; ) {
                var a = It(t, n)
                  , s = a &gt; 1 ? n + a : i;
                if (bt(t.subarray(n + 4, n + 8)) === e[0])
                    if (1 === e.length)
                        r.push(t.subarray(n + 8, s));
                    else {
                        var o = xt(t.subarray(n + 8, s), e.slice(1));
                        o.length &amp;&amp; Rt.apply(r, o)
                    }
                n = s
            }
            return r
        }
        function Pt(t) {
            var e = []
              , r = t[0]
              , i = 8
              , n = It(t, i);
            i += 4;
            var a = 0
              , s = 0;
            0 === r ? (a = It(t, i),
            s = It(t, i + 4),
            i += 8) : (a = wt(t, i),
            s = wt(t, i + 8),
            i += 16),
            i += 2;
            var o = t.length + s
              , l = Dt(t, i);
            i += 2;
            for (var u = 0; u &lt; l; u++) {
                var h = i
                  , d = It(t, h);
                h += 4;
                var c = 2147483647 &amp; d;
                if (1 == (2147483648 &amp; d) &gt;&gt;&gt; 31)
                    return w.warn(&quot;SIDX has hierarchical references (not supported)&quot;),
                    null;
                var f = It(t, h);
                h += 4,
                e.push({
                    referenceSize: c,
                    subsegmentDuration: f,
                    info: {
                        duration: f / n,
                        start: o,
                        end: o + c - 1
                    }
                }),
                o += c,
                i = h += 4
            }
            return {
                earliestPresentationTime: a,
                timescale: n,
                version: r,
                referencesCount: l,
                references: e
            }
        }
        function Ft(t) {
            for (var e = [], r = xt(t, [&quot;moov&quot;, &quot;trak&quot;]), n = 0; n &lt; r.length; n++) {
                var a = r[n]
                  , s = xt(a, [&quot;tkhd&quot;])[0];
                if (s) {
                    var o = s[0]
                      , l = It(s, 0 === o ? 12 : 20)
                      , u = xt(a, [&quot;mdia&quot;, &quot;mdhd&quot;])[0];
                    if (u) {
                        var h = It(u, 0 === (o = u[0]) ? 12 : 20)
                          , d = xt(a, [&quot;mdia&quot;, &quot;hdlr&quot;])[0];
                        if (d) {
                            var c = bt(d.subarray(8, 12))
                              , f = {
                                soun: O,
                                vide: N
                            }[c];
                            if (f) {
                                var g = Mt(xt(a, [&quot;mdia&quot;, &quot;minf&quot;, &quot;stbl&quot;, &quot;stsd&quot;])[0]);
                                e[l] = {
                                    timescale: h,
                                    type: f
                                },
                                e[f] = i({
                                    timescale: h,
                                    id: l
                                }, g)
                            }
                        }
                    }
                }
            }
            return xt(t, [&quot;moov&quot;, &quot;mvex&quot;, &quot;trex&quot;]).forEach((function(t) {
                var r = It(t, 4)
                  , i = e[r];
                i &amp;&amp; (i.default = {
                    duration: It(t, 12),
                    flags: It(t, 20)
                })
            }
            )),
            e
        }
        function Mt(t) {
            var e = t.subarray(8)
              , r = e.subarray(86)
              , i = bt(e.subarray(4, 8))
              , n = i
              , a = &quot;enca&quot; === i || &quot;encv&quot; === i;
            if (a) {
                var s = xt(e, [i])[0];
                xt(s.subarray(&quot;enca&quot; === i ? 28 : 78), [&quot;sinf&quot;]).forEach((function(t) {
                    var e = xt(t, [&quot;schm&quot;])[0];
                    if (e) {
                        var r = bt(e.subarray(4, 8));
                        if (&quot;cbcs&quot; === r || &quot;cenc&quot; === r) {
                            var i = xt(t, [&quot;frma&quot;])[0];
                            i &amp;&amp; (n = bt(i))
                        }
                    }
                }
                ))
            }
            switch (n) {
            case &quot;avc1&quot;:
            case &quot;avc2&quot;:
            case &quot;avc3&quot;:
            case &quot;avc4&quot;:
                var o = xt(r, [&quot;avcC&quot;])[0];
                n += &quot;.&quot; + Nt(o[1]) + Nt(o[2]) + Nt(o[3]);
                break;
            case &quot;mp4a&quot;:
                var l = xt(e, [i])[0]
                  , u = xt(l.subarray(28), [&quot;esds&quot;])[0];
                if (u &amp;&amp; u.length &gt; 12) {
                    var h = 4;
                    if (3 !== u[h++])
                        break;
                    h = Ot(u, h),
                    h += 2;
                    var d = u[h++];
                    if (128 &amp; d &amp;&amp; (h += 2),
                    64 &amp; d &amp;&amp; (h += u[h++]),
                    4 !== u[h++])
                        break;
                    h = Ot(u, h);
                    var c = u[h++];
                    if (64 !== c)
                        break;
                    if (n += &quot;.&quot; + Nt(c),
                    h += 12,
                    5 !== u[h++])
                        break;
                    h = Ot(u, h);
                    var f = u[h++]
                      , g = (248 &amp; f) &gt;&gt; 3;
                    31 === g &amp;&amp; (g += 1 + ((7 &amp; f) &lt;&lt; 3) + ((224 &amp; u[h]) &gt;&gt; 5)),
                    n += &quot;.&quot; + g
                }
                break;
            case &quot;hvc1&quot;:
            case &quot;hev1&quot;:
                var v = xt(r, [&quot;hvcC&quot;])[0]
                  , m = v[1]
                  , p = [&quot;&quot;, &quot;A&quot;, &quot;B&quot;, &quot;C&quot;][m &gt;&gt; 6]
                  , y = 31 &amp; m
                  , E = It(v, 2)
                  , T = (32 &amp; m) &gt;&gt; 5 ? &quot;H&quot; : &quot;L&quot;
                  , S = v[12]
                  , L = v.subarray(6, 12);
                n += &quot;.&quot; + p + y,
                n += &quot;.&quot; + E.toString(16).toUpperCase(),
                n += &quot;.&quot; + T + S;
                for (var A = &quot;&quot;, R = L.length; R--; ) {
                    var k = L[R];
                    (k || A) &amp;&amp; (A = &quot;.&quot; + k.toString(16).toUpperCase() + A)
                }
                n += A;
                break;
            case &quot;dvh1&quot;:
            case &quot;dvhe&quot;:
                var b = xt(r, [&quot;dvcC&quot;])[0]
                  , D = b[2] &gt;&gt; 1 &amp; 127
                  , I = b[2] &lt;&lt; 5 &amp; 32 | b[3] &gt;&gt; 3 &amp; 31;
                n += &quot;.&quot; + Ut(D) + &quot;.&quot; + Ut(I);
                break;
            case &quot;vp09&quot;:
                var w = xt(r, [&quot;vpcC&quot;])[0]
                  , C = w[4]
                  , _ = w[5]
                  , x = w[6] &gt;&gt; 4 &amp; 15;
                n += &quot;.&quot; + Ut(C) + &quot;.&quot; + Ut(_) + &quot;.&quot; + Ut(x);
                break;
            case &quot;av01&quot;:
                var P = xt(r, [&quot;av1C&quot;])[0]
                  , F = P[1] &gt;&gt;&gt; 5
                  , M = 31 &amp; P[1]
                  , O = P[2] &gt;&gt;&gt; 7 ? &quot;H&quot; : &quot;M&quot;
                  , N = (64 &amp; P[2]) &gt;&gt; 6
                  , U = (32 &amp; P[2]) &gt;&gt; 5
                  , B = 2 === F &amp;&amp; N ? U ? 12 : 10 : N ? 10 : 8
                  , G = (16 &amp; P[2]) &gt;&gt; 4
                  , K = (8 &amp; P[2]) &gt;&gt; 3
                  , H = (4 &amp; P[2]) &gt;&gt; 2
                  , V = 3 &amp; P[2];
                n += &quot;.&quot; + F + &quot;.&quot; + Ut(M) + O + &quot;.&quot; + Ut(B) + &quot;.&quot; + G + &quot;.&quot; + K + H + V + &quot;.&quot; + Ut(1) + &quot;.&quot; + Ut(1) + &quot;.&quot; + Ut(1) + &quot;.0&quot;
            }
            return {
                codec: n,
                encrypted: a
            }
        }
        function Ot(t, e) {
            for (var r = e + 5; 128 &amp; t[e++] &amp;&amp; e &lt; r; )
                ;
            return e
        }
        function Nt(t) {
            return (&quot;0&quot; + t.toString(16).toUpperCase()).slice(-2)
        }
        function Ut(t) {
            return (t &lt; 10 ? &quot;0&quot; : &quot;&quot;) + t
        }
        function Bt(t) {
            var e = xt(t, [&quot;schm&quot;])[0];
            if (e) {
                var r = bt(e.subarray(4, 8));
                if (&quot;cbcs&quot; === r || &quot;cenc&quot; === r)
                    return xt(t, [&quot;schi&quot;, &quot;tenc&quot;])[0]
            }
            return w.error(&quot;[eme] missing &#39;schm&#39; box&quot;),
            null
        }
        function Gt(t) {
            var e = It(t, 0)
              , r = 8;
            1 &amp; e &amp;&amp; (r += 4),
            4 &amp; e &amp;&amp; (r += 4);
            for (var i = 0, n = It(t, 4), a = 0; a &lt; n; a++)
                256 &amp; e &amp;&amp; (i += It(t, r),
                r += 4),
                512 &amp; e &amp;&amp; (r += 4),
                1024 &amp; e &amp;&amp; (r += 4),
                2048 &amp; e &amp;&amp; (r += 4);
            return i
        }
        function Kt(t, e) {
            var r = new Uint8Array(t.length + e.length);
            return r.set(t),
            r.set(e, t.length),
            r
        }
        function Ht(t, e) {
            var r = []
              , i = e.samples
              , n = e.timescale
              , a = e.id
              , s = !1;
            return xt(i, [&quot;moof&quot;]).map((function(o) {
                var l = o.byteOffset - 8;
                xt(o, [&quot;traf&quot;]).map((function(o) {
                    var u = xt(o, [&quot;tfdt&quot;]).map((function(t) {
                        var e = t[0]
                          , r = It(t, 4);
                        return 1 === e &amp;&amp; (r *= Math.pow(2, 32),
                        r += It(t, 8)),
                        r / n
                    }
                    ))[0];
                    return void 0 !== u &amp;&amp; (t = u),
                    xt(o, [&quot;tfhd&quot;]).map((function(u) {
                        var h = It(u, 4)
                          , d = 16777215 &amp; It(u, 0)
                          , c = 0
                          , f = 0 != (16 &amp; d)
                          , g = 0
                          , v = 0 != (32 &amp; d)
                          , m = 8;
                        h === a &amp;&amp; (0 != (1 &amp; d) &amp;&amp; (m += 8),
                        0 != (2 &amp; d) &amp;&amp; (m += 4),
                        0 != (8 &amp; d) &amp;&amp; (c = It(u, m),
                        m += 4),
                        f &amp;&amp; (g = It(u, m),
                        m += 4),
                        v &amp;&amp; (m += 4),
                        &quot;video&quot; === e.type &amp;&amp; (s = function(t) {
                            if (!t)
                                return !1;
                            var e = t.indexOf(&quot;.&quot;)
                              , r = e &lt; 0 ? t : t.substring(0, e);
                            return &quot;hvc1&quot; === r || &quot;hev1&quot; === r || &quot;dvh1&quot; === r || &quot;dvhe&quot; === r
                        }(e.codec)),
                        xt(o, [&quot;trun&quot;]).map((function(a) {
                            var o = a[0]
                              , u = 16777215 &amp; It(a, 0)
                              , h = 0 != (1 &amp; u)
                              , d = 0
                              , f = 0 != (4 &amp; u)
                              , v = 0 != (256 &amp; u)
                              , m = 0
                              , p = 0 != (512 &amp; u)
                              , y = 0
                              , E = 0 != (1024 &amp; u)
                              , T = 0 != (2048 &amp; u)
                              , S = 0
                              , L = It(a, 4)
                              , A = 8;
                            h &amp;&amp; (d = It(a, A),
                            A += 4),
                            f &amp;&amp; (A += 4);
                            for (var R = d + l, k = 0; k &lt; L; k++) {
                                if (v ? (m = It(a, A),
                                A += 4) : m = c,
                                p ? (y = It(a, A),
                                A += 4) : y = g,
                                E &amp;&amp; (A += 4),
                                T &amp;&amp; (S = 0 === o ? It(a, A) : Ct(a, A),
                                A += 4),
                                e.type === N)
                                    for (var b = 0; b &lt; y; ) {
                                        var D = It(i, R);
                                        Vt(s, i[R += 4]) &amp;&amp; Yt(i.subarray(R, R + D), s ? 2 : 1, t + S / n, r),
                                        R += D,
                                        b += D + 4
                                    }
                                t += m / n
                            }
                        }
                        )))
                    }
                    ))
                }
                ))
            }
            )),
            r
        }
        function Vt(t, e) {
            if (t) {
                var r = e &gt;&gt; 1 &amp; 63;
                return 39 === r || 40 === r
            }
            return 6 == (31 &amp; e)
        }
        function Yt(t, e, r, i) {
            var n = Wt(t)
              , a = 0;
            a += e;
            for (var s = 0, o = 0, l = 0; a &lt; n.length; ) {
                s = 0;
                do {
                    if (a &gt;= n.length)
                        break;
                    s += l = n[a++]
                } while (255 === l);
                o = 0;
                do {
                    if (a &gt;= n.length)
                        break;
                    o += l = n[a++]
                } while (255 === l);
                var u = n.length - a
                  , h = a;
                if (o &lt; u)
                    a += o;
                else if (o &gt; u) {
                    w.error(&quot;Malformed SEI payload. &quot; + o + &quot; is too small, only &quot; + u + &quot; bytes left to parse.&quot;);
                    break
                }
                if (4 === s) {
                    if (181 === n[h++]) {
                        var d = Dt(n, h);
                        if (h += 2,
                        49 === d) {
                            var c = It(n, h);
                            if (h += 4,
                            1195456820 === c) {
                                var f = n[h++];
                                if (3 === f) {
                                    var g = n[h++]
                                      , v = 64 &amp; g
                                      , m = v ? 2 + 3 * (31 &amp; g) : 0
                                      , p = new Uint8Array(m);
                                    if (v) {
                                        p[0] = g;
                                        for (var y = 1; y &lt; m; y++)
                                            p[y] = n[h++]
                                    }
                                    i.push({
                                        type: f,
                                        payloadType: s,
                                        pts: r,
                                        bytes: p
                                    })
                                }
                            }
                        }
                    }
                } else if (5 === s &amp;&amp; o &gt; 16) {
                    for (var E = [], T = 0; T &lt; 16; T++) {
                        var S = n[h++].toString(16);
                        E.push(1 == S.length ? &quot;0&quot; + S : S),
                        3 !== T &amp;&amp; 5 !== T &amp;&amp; 7 !== T &amp;&amp; 9 !== T || E.push(&quot;-&quot;)
                    }
                    for (var L = o - 16, A = new Uint8Array(L), R = 0; R &lt; L; R++)
                        A[R] = n[h++];
                    i.push({
                        payloadType: s,
                        pts: r,
                        uuid: E.join(&quot;&quot;),
                        userData: Tt(A),
                        userDataBytes: A
                    })
                }
            }
        }
        function Wt(t) {
            for (var e = t.byteLength, r = [], i = 1; i &lt; e - 2; )
                0 === t[i] &amp;&amp; 0 === t[i + 1] &amp;&amp; 3 === t[i + 2] ? (r.push(i + 2),
                i += 2) : i++;
            if (0 === r.length)
                return t;
            var n = e - r.length
              , a = new Uint8Array(n)
              , s = 0;
            for (i = 0; i &lt; n; s++,
            i++)
                s === r[0] &amp;&amp; (s++,
                r.shift()),
                a[i] = t[s];
            return a
        }
        function jt(t, e, r) {
            if (16 !== t.byteLength)
                throw new RangeError(&quot;Invalid system id&quot;);
            var i, n, a;
            if (e) {
                i = 1,
                n = new Uint8Array(16 * e.length);
                for (var s = 0; s &lt; e.length; s++) {
                    var o = e[s];
                    if (16 !== o.byteLength)
                        throw new RangeError(&quot;Invalid key&quot;);
                    n.set(o, 16 * s)
                }
            } else
                i = 0,
                n = new Uint8Array;
            i &gt; 0 ? (a = new Uint8Array(4),
            e.length &gt; 0 &amp;&amp; new DataView(a.buffer).setUint32(0, e.length, !1)) : a = new Uint8Array;
            var l = new Uint8Array(4);
            return r &amp;&amp; r.byteLength &gt; 0 &amp;&amp; new DataView(l.buffer).setUint32(0, r.byteLength, !1),
            function(t) {
                for (var e = arguments.length, r = new Array(e &gt; 1 ? e - 1 : 0), i = 1; i &lt; e; i++)
                    r[i - 1] = arguments[i];
                for (var n = r.length, a = 8, s = n; s--; )
                    a += r[s].byteLength;
                var o = new Uint8Array(a);
                for (o[0] = a &gt;&gt; 24 &amp; 255,
                o[1] = a &gt;&gt; 16 &amp; 255,
                o[2] = a &gt;&gt; 8 &amp; 255,
                o[3] = 255 &amp; a,
                o.set(t, 4),
                s = 0,
                a = 8; s &lt; n; s++)
                    o.set(r[s], a),
                    a += r[s].byteLength;
                return o
            }([112, 115, 115, 104], new Uint8Array([i, 0, 0, 0]), t, a, n, l, r || new Uint8Array)
        }
        var qt = {}
          , Xt = function() {
            function t(t, e, r, i, n) {
                void 0 === i &amp;&amp; (i = [1]),
                void 0 === n &amp;&amp; (n = null),
                this.uri = void 0,
                this.method = void 0,
                this.keyFormat = void 0,
                this.keyFormatVersions = void 0,
                this.encrypted = void 0,
                this.isCommonEncryption = void 0,
                this.iv = null,
                this.key = null,
                this.keyId = null,
                this.pssh = null,
                this.method = t,
                this.uri = e,
                this.keyFormat = r,
                this.keyFormatVersions = i,
                this.iv = n,
                this.encrypted = !!t &amp;&amp; &quot;NONE&quot; !== t,
                this.isCommonEncryption = this.encrypted &amp;&amp; &quot;AES-128&quot; !== t
            }
            t.clearKeyUriToKeyIdMap = function() {
                qt = {}
            }
            ;
            var e = t.prototype;
            return e.isSupported = function() {
                if (this.method) {
                    if (&quot;AES-128&quot; === this.method || &quot;NONE&quot; === this.method)
                        return !0;
                    if (&quot;identity&quot; === this.keyFormat)
                        return &quot;SAMPLE-AES&quot; === this.method;
                    switch (this.keyFormat) {
                    case z:
                    case J:
                    case Q:
                    case X:
                        return -1 !== [&quot;ISO-23001-7&quot;, &quot;SAMPLE-AES&quot;, &quot;SAMPLE-AES-CENC&quot;, &quot;SAMPLE-AES-CTR&quot;].indexOf(this.method)
                    }
                }
                return !1
            }
            ,
            e.getDecryptData = function(e) {
                if (!this.encrypted || !this.uri)
                    return null;
                if (&quot;AES-128&quot; === this.method &amp;&amp; this.uri &amp;&amp; !this.iv) {
                    &quot;number&quot; != typeof e &amp;&amp; (&quot;AES-128&quot; !== this.method || this.iv || w.warn(&#39;missing IV for initialization segment with method=&quot;&#39; + this.method + &#39;&quot; - compliance issue&#39;),
                    e = 0);
                    var r = function(t) {
                        for (var e = new Uint8Array(16), r = 12; r &lt; 16; r++)
                            e[r] = t &gt;&gt; 8 * (15 - r) &amp; 255;
                        return e
                    }(e);
                    return new t(this.method,this.uri,&quot;identity&quot;,this.keyFormatVersions,r)
                }
                var i = Y(this.uri);
                if (i)
                    switch (this.keyFormat) {
                    case J:
                        this.pssh = i,
                        i.length &gt;= 22 &amp;&amp; (this.keyId = i.subarray(i.length - 22, i.length - 6));
                        break;
                    case Q:
                        var n = new Uint8Array([154, 4, 240, 121, 152, 64, 66, 134, 171, 146, 230, 91, 224, 136, 95, 149]);
                        this.pssh = jt(n, null, i);
                        var a = new Uint16Array(i.buffer,i.byteOffset,i.byteLength / 2)
                          , s = String.fromCharCode.apply(null, Array.from(a))
                          , o = s.substring(s.indexOf(&quot;&lt;&quot;), s.length)
                          , l = (new DOMParser).parseFromString(o, &quot;text/xml&quot;).getElementsByTagName(&quot;KID&quot;)[0];
                        if (l) {
                            var u = l.childNodes[0] ? l.childNodes[0].nodeValue : l.getAttribute(&quot;VALUE&quot;);
                            if (u) {
                                var h = V(u).subarray(0, 16);
                                !function(t) {
                                    var e = function(t, e, r) {
                                        var i = t[e];
                                        t[e] = t[r],
                                        t[r] = i
                                    };
                                    e(t, 0, 3),
                                    e(t, 1, 2),
                                    e(t, 4, 5),
                                    e(t, 6, 7)
                                }(h),
                                this.keyId = h
                            }
                        }
                        break;
                    default:
                        var d = i.subarray(0, 16);
                        if (16 !== d.length) {
                            var c = new Uint8Array(16);
                            c.set(d, 16 - d.length),
                            d = c
                        }
                        this.keyId = d
                    }
                if (!this.keyId || 16 !== this.keyId.byteLength) {
                    var f = qt[this.uri];
                    if (!f) {
                        var g = Object.keys(qt).length % Number.MAX_SAFE_INTEGER;
                        f = new Uint8Array(16),
                        new DataView(f.buffer,12,4).setUint32(0, g),
                        qt[this.uri] = f
                    }
                    this.keyId = f
                }
                return this
            }
            ,
            t
        }()
          , zt = /\{\$([a-zA-Z0-9-_]+)\}/g;
        function Qt(t) {
            return zt.test(t)
        }
        function Jt(t, e, r) {
            if (null !== t.variableList || t.hasVariableRefs)
                for (var i = r.length; i--; ) {
                    var n = r[i]
                      , a = e[n];
                    a &amp;&amp; (e[n] = $t(t, a))
                }
        }
        function $t(t, e) {
            if (null !== t.variableList || t.hasVariableRefs) {
                var r = t.variableList;
                return e.replace(zt, (function(e) {
                    var i = e.substring(2, e.length - 1)
                      , n = null == r ? void 0 : r[i];
                    return void 0 === n ? (t.playlistParsingError || (t.playlistParsingError = new Error(&#39;Missing preceding EXT-X-DEFINE tag for Variable Reference: &quot;&#39; + i + &#39;&quot;&#39;)),
                    e) : n
                }
                ))
            }
            return e
        }
        function Zt(t, e, r) {
            var i, n, a = t.variableList;
            if (a || (t.variableList = a = {}),
            &quot;QUERYPARAM&quot;in e) {
                i = e.QUERYPARAM;
                try {
                    var s = new self.URL(r).searchParams;
                    if (!s.has(i))
                        throw new Error(&#39;&quot;&#39; + i + &#39;&quot; does not match any query parameter in URI: &quot;&#39; + r + &#39;&quot;&#39;);
                    n = s.get(i)
                } catch (e) {
                    t.playlistParsingError || (t.playlistParsingError = new Error(&quot;EXT-X-DEFINE QUERYPARAM: &quot; + e.message))
                }
            } else
                i = e.NAME,
                n = e.VALUE;
            i in a ? t.playlistParsingError || (t.playlistParsingError = new Error(&#39;EXT-X-DEFINE duplicate Variable Name declarations: &quot;&#39; + i + &#39;&quot;&#39;)) : a[i] = n || &quot;&quot;
        }
        function te(t, e, r) {
            var i = e.IMPORT;
            if (r &amp;&amp; i in r) {
                var n = t.variableList;
                n || (t.variableList = n = {}),
                n[i] = r[i]
            } else
                t.playlistParsingError || (t.playlistParsingError = new Error(&#39;EXT-X-DEFINE IMPORT attribute not found in Multivariant Playlist: &quot;&#39; + i + &#39;&quot;&#39;))
        }
        function ee(t) {
            if (void 0 === t &amp;&amp; (t = !0),
            &quot;undefined&quot; != typeof self)
                return (t || !self.MediaSource) &amp;&amp; self.ManagedMediaSource || self.MediaSource || self.WebKitMediaSource
        }
        var re = {
            audio: {
                a3ds: 1,
                &quot;ac-3&quot;: .95,
                &quot;ac-4&quot;: 1,
                alac: .9,
                alaw: 1,
                dra1: 1,
                &quot;dts+&quot;: 1,
                &quot;dts-&quot;: 1,
                dtsc: 1,
                dtse: 1,
                dtsh: 1,
                &quot;ec-3&quot;: .9,
                enca: 1,
                fLaC: .9,
                flac: .9,
                FLAC: .9,
                g719: 1,
                g726: 1,
                m4ae: 1,
                mha1: 1,
                mha2: 1,
                mhm1: 1,
                mhm2: 1,
                mlpa: 1,
                mp4a: 1,
                &quot;raw &quot;: 1,
                Opus: 1,
                opus: 1,
                samr: 1,
                sawb: 1,
                sawp: 1,
                sevc: 1,
                sqcp: 1,
                ssmv: 1,
                twos: 1,
                ulaw: 1
            },
            video: {
                avc1: 1,
                avc2: 1,
                avc3: 1,
                avc4: 1,
                avcp: 1,
                av01: .8,
                drac: 1,
                dva1: 1,
                dvav: 1,
                dvh1: .7,
                dvhe: .7,
                encv: 1,
                hev1: .75,
                hvc1: .75,
                mjp2: 1,
                mp4v: 1,
                mvc1: 1,
                mvc2: 1,
                mvc3: 1,
                mvc4: 1,
                resv: 1,
                rv60: 1,
                s263: 1,
                svc1: 1,
                svc2: 1,
                &quot;vc-1&quot;: 1,
                vp08: 1,
                vp09: .9
            },
            text: {
                stpp: 1,
                wvtt: 1
            }
        };
        function ie(t, e, r) {
            return void 0 === r &amp;&amp; (r = !0),
            !t.split(&quot;,&quot;).some((function(t) {
                return !ne(t, e, r)
            }
            ))
        }
        function ne(t, e, r) {
            var i;
            void 0 === r &amp;&amp; (r = !0);
            var n = ee(r);
            return null != (i = null == n ? void 0 : n.isTypeSupported(ae(t, e))) &amp;&amp; i
        }
        function ae(t, e) {
            return e + &#39;/mp4;codecs=&quot;&#39; + t + &#39;&quot;&#39;
        }
        function se(t) {
            if (t) {
                var e = t.substring(0, 4);
                return re.video[e]
            }
            return 2
        }
        function oe(t) {
            return t.split(&quot;,&quot;).reduce((function(t, e) {
                var r = re.video[e];
                return r ? (2 * r + t) / (t ? 3 : 2) : (re.audio[e] + t) / (t ? 2 : 1)
            }
            ), 0)
        }
        var le = {}
          , ue = /flac|opus/i;
        function he(t, e) {
            return void 0 === e &amp;&amp; (e = !0),
            t.replace(ue, (function(t) {
                return function(t, e) {
                    if (void 0 === e &amp;&amp; (e = !0),
                    le[t])
                        return le[t];
                    for (var r = {
                        flac: [&quot;flac&quot;, &quot;fLaC&quot;, &quot;FLAC&quot;],
                        opus: [&quot;opus&quot;, &quot;Opus&quot;]
                    }[t], i = 0; i &lt; r.length; i++)
                        if (ne(r[i], &quot;audio&quot;, e))
                            return le[t] = r[i],
                            r[i];
                    return t
                }(t.toLowerCase(), e)
            }
            ))
        }
        function de(t, e) {
            return t &amp;&amp; &quot;mp4a&quot; !== t ? t : e ? e.split(&quot;,&quot;)[0] : e
        }
        var ce = /#EXT-X-STREAM-INF:([^\r\n]*)(?:[\r\n](?:#[^\r\n]*)?)*([^\r\n]+)|#EXT-X-(SESSION-DATA|SESSION-KEY|DEFINE|CONTENT-STEERING|START):([^\r\n]*)[\r\n]+/g
          , fe = /#EXT-X-MEDIA:(.*)/g
          , ge = /^#EXT(?:INF|-X-TARGETDURATION):/m
          , ve = new RegExp([/#EXTINF:\s*(\d*(?:\.\d+)?)(?:,(.*)\s+)?/.source, /(?!#) *(\S[^\r\n]*)/.source, /#EXT-X-BYTERANGE:*(.+)/.source, /#EXT-X-PROGRAM-DATE-TIME:(.+)/.source, /#.*/.source].join(&quot;|&quot;),&quot;g&quot;)
          , me = new RegExp([/#(EXTM3U)/.source, /#EXT-X-(DATERANGE|DEFINE|KEY|MAP|PART|PART-INF|PLAYLIST-TYPE|PRELOAD-HINT|RENDITION-REPORT|SERVER-CONTROL|SKIP|START):(.+)/.source, /#EXT-X-(BITRATE|DISCONTINUITY-SEQUENCE|MEDIA-SEQUENCE|TARGETDURATION|VERSION): *(\d+)/.source, /#EXT-X-(DISCONTINUITY|ENDLIST|GAP|INDEPENDENT-SEGMENTS)/.source, /(#)([^:]*):(.*)/.source, /(#)(.*)(?:.*)\r?\n?/.source].join(&quot;|&quot;))
          , pe = function() {
            function t() {}
            return t.findGroup = function(t, e) {
                for (var r = 0; r &lt; t.length; r++) {
                    var i = t[r];
                    if (i.id === e)
                        return i
                }
            }
            ,
            t.resolve = function(t, e) {
                return p.buildAbsoluteURL(e, t, {
                    alwaysNormalize: !0
                })
            }
            ,
            t.isMediaPlaylist = function(t) {
                return ge.test(t)
            }
            ,
            t.parseMasterPlaylist = function(e, r) {
                var i, n = {
                    contentSteering: null,
                    levels: [],
                    playlistParsingError: null,
                    sessionData: null,
                    sessionKeys: null,
                    startTimeOffset: null,
                    variableList: null,
                    hasVariableRefs: Qt(e)
                }, a = [];
                for (ce.lastIndex = 0; null != (i = ce.exec(e)); )
                    if (i[1]) {
                        var s, o = new x(i[1]);
                        Jt(n, o, [&quot;CODECS&quot;, &quot;SUPPLEMENTAL-CODECS&quot;, &quot;ALLOWED-CPC&quot;, &quot;PATHWAY-ID&quot;, &quot;STABLE-VARIANT-ID&quot;, &quot;AUDIO&quot;, &quot;VIDEO&quot;, &quot;SUBTITLES&quot;, &quot;CLOSED-CAPTIONS&quot;, &quot;NAME&quot;]);
                        var l = $t(n, i[2])
                          , u = {
                            attrs: o,
                            bitrate: o.decimalInteger(&quot;BANDWIDTH&quot;) || o.decimalInteger(&quot;AVERAGE-BANDWIDTH&quot;),
                            name: o.NAME,
                            url: t.resolve(l, r)
                        }
                          , h = o.decimalResolution(&quot;RESOLUTION&quot;);
                        h &amp;&amp; (u.width = h.width,
                        u.height = h.height),
                        Te(o.CODECS, u),
                        null != (s = u.unknownCodecs) &amp;&amp; s.length || a.push(u),
                        n.levels.push(u)
                    } else if (i[3]) {
                        var d = i[3]
                          , c = i[4];
                        switch (d) {
                        case &quot;SESSION-DATA&quot;:
                            var f = new x(c);
                            Jt(n, f, [&quot;DATA-ID&quot;, &quot;LANGUAGE&quot;, &quot;VALUE&quot;, &quot;URI&quot;]);
                            var g = f[&quot;DATA-ID&quot;];
                            g &amp;&amp; (null === n.sessionData &amp;&amp; (n.sessionData = {}),
                            n.sessionData[g] = f);
                            break;
                        case &quot;SESSION-KEY&quot;:
                            var v = ye(c, r, n);
                            v.encrypted &amp;&amp; v.isSupported() ? (null === n.sessionKeys &amp;&amp; (n.sessionKeys = []),
                            n.sessionKeys.push(v)) : w.warn(&#39;[Keys] Ignoring invalid EXT-X-SESSION-KEY tag: &quot;&#39; + c + &#39;&quot;&#39;);
                            break;
                        case &quot;DEFINE&quot;:
                            var m = new x(c);
                            Jt(n, m, [&quot;NAME&quot;, &quot;VALUE&quot;, &quot;QUERYPARAM&quot;]),
                            Zt(n, m, r);
                            break;
                        case &quot;CONTENT-STEERING&quot;:
                            var p = new x(c);
                            Jt(n, p, [&quot;SERVER-URI&quot;, &quot;PATHWAY-ID&quot;]),
                            n.contentSteering = {
                                uri: t.resolve(p[&quot;SERVER-URI&quot;], r),
                                pathwayId: p[&quot;PATHWAY-ID&quot;] || &quot;.&quot;
                            };
                            break;
                        case &quot;START&quot;:
                            n.startTimeOffset = Ee(c)
                        }
                    }
                var y = a.length &gt; 0 &amp;&amp; a.length &lt; n.levels.length;
                return n.levels = y ? a : n.levels,
                0 === n.levels.length &amp;&amp; (n.playlistParsingError = new Error(&quot;no levels found in manifest&quot;)),
                n
            }
            ,
            t.parseMasterPlaylistMedia = function(e, r, i) {
                var n, a = {}, s = i.levels, o = {
                    AUDIO: s.map((function(t) {
                        return {
                            id: t.attrs.AUDIO,
                            audioCodec: t.audioCodec
                        }
                    }
                    )),
                    SUBTITLES: s.map((function(t) {
                        return {
                            id: t.attrs.SUBTITLES,
                            textCodec: t.textCodec
                        }
                    }
                    )),
                    &quot;CLOSED-CAPTIONS&quot;: []
                }, l = 0;
                for (fe.lastIndex = 0; null !== (n = fe.exec(e)); ) {
                    var u = new x(n[1])
                      , h = u.TYPE;
                    if (h) {
                        var d = o[h]
                          , c = a[h] || [];
                        a[h] = c,
                        Jt(i, u, [&quot;URI&quot;, &quot;GROUP-ID&quot;, &quot;LANGUAGE&quot;, &quot;ASSOC-LANGUAGE&quot;, &quot;STABLE-RENDITION-ID&quot;, &quot;NAME&quot;, &quot;INSTREAM-ID&quot;, &quot;CHARACTERISTICS&quot;, &quot;CHANNELS&quot;]);
                        var f = u.LANGUAGE
                          , g = u[&quot;ASSOC-LANGUAGE&quot;]
                          , v = u.CHANNELS
                          , m = u.CHARACTERISTICS
                          , p = u[&quot;INSTREAM-ID&quot;]
                          , y = {
                            attrs: u,
                            bitrate: 0,
                            id: l++,
                            groupId: u[&quot;GROUP-ID&quot;] || &quot;&quot;,
                            name: u.NAME || f || &quot;&quot;,
                            type: h,
                            default: u.bool(&quot;DEFAULT&quot;),
                            autoselect: u.bool(&quot;AUTOSELECT&quot;),
                            forced: u.bool(&quot;FORCED&quot;),
                            lang: f,
                            url: u.URI ? t.resolve(u.URI, r) : &quot;&quot;
                        };
                        if (g &amp;&amp; (y.assocLang = g),
                        v &amp;&amp; (y.channels = v),
                        m &amp;&amp; (y.characteristics = m),
                        p &amp;&amp; (y.instreamId = p),
                        null != d &amp;&amp; d.length) {
                            var E = t.findGroup(d, y.groupId) || d[0];
                            Se(y, E, &quot;audioCodec&quot;),
                            Se(y, E, &quot;textCodec&quot;)
                        }
                        c.push(y)
                    }
                }
                return a
            }
            ,
            t.parseLevelPlaylist = function(t, e, r, i, n, a) {
                var s, l, u, h = new H(e), d = h.fragments, c = null, f = 0, g = 0, v = 0, m = 0, p = null, E = new G(i,e), T = -1, S = !1, L = null;
                for (ve.lastIndex = 0,
                h.m3u8 = t,
                h.hasVariableRefs = Qt(t); null !== (s = ve.exec(t)); ) {
                    S &amp;&amp; (S = !1,
                    (E = new G(i,e)).start = v,
                    E.sn = f,
                    E.cc = m,
                    E.level = r,
                    c &amp;&amp; (E.initSegment = c,
                    E.rawProgramDateTime = c.rawProgramDateTime,
                    c.rawProgramDateTime = null,
                    L &amp;&amp; (E.setByteRange(L),
                    L = null)));
                    var A = s[1];
                    if (A) {
                        E.duration = parseFloat(A);
                        var R = (&quot; &quot; + s[2]).slice(1);
                        E.title = R || null,
                        E.tagList.push(R ? [&quot;INF&quot;, A, R] : [&quot;INF&quot;, A])
                    } else if (s[3]) {
                        if (y(E.duration)) {
                            E.start = v,
                            u &amp;&amp; Re(E, u, h),
                            E.sn = f,
                            E.level = r,
                            E.cc = m,
                            d.push(E);
                            var k = (&quot; &quot; + s[3]).slice(1);
                            E.relurl = $t(h, k),
                            Le(E, p),
                            p = E,
                            v += E.duration,
                            f++,
                            g = 0,
                            S = !0
                        }
                    } else if (s[4]) {
                        var b = (&quot; &quot; + s[4]).slice(1);
                        p ? E.setByteRange(b, p) : E.setByteRange(b)
                    } else if (s[5])
                        E.rawProgramDateTime = (&quot; &quot; + s[5]).slice(1),
                        E.tagList.push([&quot;PROGRAM-DATE-TIME&quot;, E.rawProgramDateTime]),
                        -1 === T &amp;&amp; (T = d.length);
                    else {
                        if (!(s = s[0].match(me))) {
                            w.warn(&quot;No matches on slow regex match for level playlist!&quot;);
                            continue
                        }
                        for (l = 1; l &lt; s.length &amp;&amp; void 0 === s[l]; l++)
                            ;
                        var D = (&quot; &quot; + s[l]).slice(1)
                          , I = (&quot; &quot; + s[l + 1]).slice(1)
                          , C = s[l + 2] ? (&quot; &quot; + s[l + 2]).slice(1) : &quot;&quot;;
                        switch (D) {
                        case &quot;PLAYLIST-TYPE&quot;:
                            h.type = I.toUpperCase();
                            break;
                        case &quot;MEDIA-SEQUENCE&quot;:
                            f = h.startSN = parseInt(I);
                            break;
                        case &quot;SKIP&quot;:
                            var _ = new x(I);
                            Jt(h, _, [&quot;RECENTLY-REMOVED-DATERANGES&quot;]);
                            var P = _.decimalInteger(&quot;SKIPPED-SEGMENTS&quot;);
                            if (y(P)) {
                                h.skippedSegments = P;
                                for (var M = P; M--; )
                                    d.unshift(null);
                                f += P
                            }
                            var O = _.enumeratedString(&quot;RECENTLY-REMOVED-DATERANGES&quot;);
                            O &amp;&amp; (h.recentlyRemovedDateranges = O.split(&quot;\t&quot;));
                            break;
                        case &quot;TARGETDURATION&quot;:
                            h.targetduration = Math.max(parseInt(I), 1);
                            break;
                        case &quot;VERSION&quot;:
                            h.version = parseInt(I);
                            break;
                        case &quot;INDEPENDENT-SEGMENTS&quot;:
                        case &quot;EXTM3U&quot;:
                            break;
                        case &quot;ENDLIST&quot;:
                            h.live = !1;
                            break;
                        case &quot;#&quot;:
                            (I || C) &amp;&amp; E.tagList.push(C ? [I, C] : [I]);
                            break;
                        case &quot;DISCONTINUITY&quot;:
                            m++,
                            E.tagList.push([&quot;DIS&quot;]);
                            break;
                        case &quot;GAP&quot;:
                            E.gap = !0,
                            E.tagList.push([D]);
                            break;
                        case &quot;BITRATE&quot;:
                            E.tagList.push([D, I]);
                            break;
                        case &quot;DATERANGE&quot;:
                            var N = new x(I);
                            Jt(h, N, [&quot;ID&quot;, &quot;CLASS&quot;, &quot;START-DATE&quot;, &quot;END-DATE&quot;, &quot;SCTE35-CMD&quot;, &quot;SCTE35-OUT&quot;, &quot;SCTE35-IN&quot;]),
                            Jt(h, N, N.clientAttrs);
                            var U = new F(N,h.dateRanges[N.ID]);
                            U.isValid || h.skippedSegments ? h.dateRanges[U.id] = U : w.warn(&#39;Ignoring invalid DATERANGE tag: &quot;&#39; + I + &#39;&quot;&#39;),
                            E.tagList.push([&quot;EXT-X-DATERANGE&quot;, I]);
                            break;
                        case &quot;DEFINE&quot;:
                            var B = new x(I);
                            Jt(h, B, [&quot;NAME&quot;, &quot;VALUE&quot;, &quot;IMPORT&quot;, &quot;QUERYPARAM&quot;]),
                            &quot;IMPORT&quot;in B ? te(h, B, a) : Zt(h, B, e);
                            break;
                        case &quot;DISCONTINUITY-SEQUENCE&quot;:
                            m = parseInt(I);
                            break;
                        case &quot;KEY&quot;:
                            var V = ye(I, e, h);
                            if (V.isSupported()) {
                                if (&quot;NONE&quot; === V.method) {
                                    u = void 0;
                                    break
                                }
                                u || (u = {}),
                                u[V.keyFormat] &amp;&amp; (u = o({}, u)),
                                u[V.keyFormat] = V
                            } else
                                w.warn(&#39;[Keys] Ignoring invalid EXT-X-KEY tag: &quot;&#39; + I + &#39;&quot;&#39;);
                            break;
                        case &quot;START&quot;:
                            h.startTimeOffset = Ee(I);
                            break;
                        case &quot;MAP&quot;:
                            var Y = new x(I);
                            if (Jt(h, Y, [&quot;BYTERANGE&quot;, &quot;URI&quot;]),
                            E.duration) {
                                var W = new G(i,e);
                                Ae(W, Y, r, u),
                                c = W,
                                E.initSegment = c,
                                c.rawProgramDateTime &amp;&amp; !E.rawProgramDateTime &amp;&amp; (E.rawProgramDateTime = c.rawProgramDateTime)
                            } else {
                                var j = E.byteRangeEndOffset;
                                if (j) {
                                    var q = E.byteRangeStartOffset;
                                    L = j - q + &quot;@&quot; + q
                                } else
                                    L = null;
                                Ae(E, Y, r, u),
                                c = E,
                                S = !0
                            }
                            break;
                        case &quot;SERVER-CONTROL&quot;:
                            var X = new x(I);
                            h.canBlockReload = X.bool(&quot;CAN-BLOCK-RELOAD&quot;),
                            h.canSkipUntil = X.optionalFloat(&quot;CAN-SKIP-UNTIL&quot;, 0),
                            h.canSkipDateRanges = h.canSkipUntil &gt; 0 &amp;&amp; X.bool(&quot;CAN-SKIP-DATERANGES&quot;),
                            h.partHoldBack = X.optionalFloat(&quot;PART-HOLD-BACK&quot;, 0),
                            h.holdBack = X.optionalFloat(&quot;HOLD-BACK&quot;, 0);
                            break;
                        case &quot;PART-INF&quot;:
                            var z = new x(I);
                            h.partTarget = z.decimalFloatingPoint(&quot;PART-TARGET&quot;);
                            break;
                        case &quot;PART&quot;:
                            var Q = h.partList;
                            Q || (Q = h.partList = []);
                            var J = g &gt; 0 ? Q[Q.length - 1] : void 0
                              , $ = g++
                              , Z = new x(I);
                            Jt(h, Z, [&quot;BYTERANGE&quot;, &quot;URI&quot;]);
                            var tt = new K(Z,E,e,$,J);
                            Q.push(tt),
                            E.duration += tt.duration;
                            break;
                        case &quot;PRELOAD-HINT&quot;:
                            var et = new x(I);
                            Jt(h, et, [&quot;URI&quot;]),
                            h.preloadHint = et;
                            break;
                        case &quot;RENDITION-REPORT&quot;:
                            var rt = new x(I);
                            Jt(h, rt, [&quot;URI&quot;]),
                            h.renditionReports = h.renditionReports || [],
                            h.renditionReports.push(rt);
                            break;
                        default:
                            w.warn(&quot;line parsed but not handled: &quot; + s)
                        }
                    }
                }
                p &amp;&amp; !p.relurl ? (d.pop(),
                v -= p.duration,
                h.partList &amp;&amp; (h.fragmentHint = p)) : h.partList &amp;&amp; (Le(E, p),
                E.cc = m,
                h.fragmentHint = E,
                u &amp;&amp; Re(E, u, h));
                var it = d.length
                  , nt = d[0]
                  , at = d[it - 1];
                if ((v += h.skippedSegments * h.targetduration) &gt; 0 &amp;&amp; it &amp;&amp; at) {
                    h.averagetargetduration = v / it;
                    var st = at.sn;
                    h.endSN = &quot;initSegment&quot; !== st ? st : 0,
                    h.live || (at.endList = !0),
                    nt &amp;&amp; (h.startCC = nt.cc)
                } else
                    h.endSN = 0,
                    h.startCC = 0;
                return h.fragmentHint &amp;&amp; (v += h.fragmentHint.duration),
                h.totalduration = v,
                h.endCC = m,
                T &gt; 0 &amp;&amp; function(t, e) {
                    for (var r = t[e], i = e; i--; ) {
                        var n = t[i];
                        if (!n)
                            return;
                        n.programDateTime = r.programDateTime - 1e3 * n.duration,
                        r = n
                    }
                }(d, T),
                h
            }
            ,
            t
        }();
        function ye(t, e, r) {
            var i, n, a = new x(t);
            Jt(r, a, [&quot;KEYFORMAT&quot;, &quot;KEYFORMATVERSIONS&quot;, &quot;URI&quot;, &quot;IV&quot;, &quot;URI&quot;]);
            var s = null != (i = a.METHOD) ? i : &quot;&quot;
              , o = a.URI
              , l = a.hexadecimalInteger(&quot;IV&quot;)
              , u = a.KEYFORMATVERSIONS
              , h = null != (n = a.KEYFORMAT) ? n : &quot;identity&quot;;
            o &amp;&amp; a.IV &amp;&amp; !l &amp;&amp; w.error(&quot;Invalid IV: &quot; + a.IV);
            var d = o ? pe.resolve(o, e) : &quot;&quot;
              , c = (u || &quot;1&quot;).split(&quot;/&quot;).map(Number).filter(Number.isFinite);
            return new Xt(s,d,h,c,l)
        }
        function Ee(t) {
            var e = new x(t).decimalFloatingPoint(&quot;TIME-OFFSET&quot;);
            return y(e) ? e : null
        }
        function Te(t, e) {
            var r = (t || &quot;&quot;).split(/[ ,]+/).filter((function(t) {
                return t
            }
            ));
            [&quot;video&quot;, &quot;audio&quot;, &quot;text&quot;].forEach((function(t) {
                var i = r.filter((function(e) {
                    return function(t, e) {
                        var r = re[e];
                        return !!r &amp;&amp; !!r[t.slice(0, 4)]
                    }(e, t)
                }
                ));
                i.length &amp;&amp; (e[t + &quot;Codec&quot;] = i.join(&quot;,&quot;),
                r = r.filter((function(t) {
                    return -1 === i.indexOf(t)
                }
                )))
            }
            )),
            e.unknownCodecs = r
        }
        function Se(t, e, r) {
            var i = e[r];
            i &amp;&amp; (t[r] = i)
        }
        function Le(t, e) {
            t.rawProgramDateTime ? t.programDateTime = Date.parse(t.rawProgramDateTime) : null != e &amp;&amp; e.programDateTime &amp;&amp; (t.programDateTime = e.endProgramDateTime),
            y(t.programDateTime) || (t.programDateTime = null,
            t.rawProgramDateTime = null)
        }
        function Ae(t, e, r, i) {
            t.relurl = e.URI,
            e.BYTERANGE &amp;&amp; t.setByteRange(e.BYTERANGE),
            t.level = r,
            t.sn = &quot;initSegment&quot;,
            i &amp;&amp; (t.levelkeys = i),
            t.initSegment = null
        }
        function Re(t, e, r) {
            t.levelkeys = e;
            var i = r.encryptedFragments;
            i.length &amp;&amp; i[i.length - 1].levelkeys === e || !Object.keys(e).some((function(t) {
                return e[t].isCommonEncryption
            }
            )) || i.push(t)
        }
        var ke = &quot;manifest&quot;
          , be = &quot;level&quot;
          , De = &quot;audioTrack&quot;
          , Ie = &quot;subtitleTrack&quot;
          , we = &quot;main&quot;
          , Ce = &quot;audio&quot;
          , _e = &quot;subtitle&quot;;
        function xe(t) {
            switch (t.type) {
            case De:
                return Ce;
            case Ie:
                return _e;
            default:
                return we
            }
        }
        function Pe(t, e) {
            var r = t.url;
            return void 0 !== r &amp;&amp; 0 !== r.indexOf(&quot;data:&quot;) || (r = e.url),
            r
        }
        var Fe = function() {
            function t(t) {
                this.hls = void 0,
                this.loaders = Object.create(null),
                this.variableList = null,
                this.hls = t,
                this.registerListeners()
            }
            var e = t.prototype;
            return e.startLoad = function(t) {}
            ,
            e.stopLoad = function() {
                this.destroyInternalLoaders()
            }
            ,
            e.registerListeners = function() {
                var t = this.hls;
                t.on(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.on(S.LEVEL_LOADING, this.onLevelLoading, this),
                t.on(S.AUDIO_TRACK_LOADING, this.onAudioTrackLoading, this),
                t.on(S.SUBTITLE_TRACK_LOADING, this.onSubtitleTrackLoading, this)
            }
            ,
            e.unregisterListeners = function() {
                var t = this.hls;
                t.off(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.off(S.LEVEL_LOADING, this.onLevelLoading, this),
                t.off(S.AUDIO_TRACK_LOADING, this.onAudioTrackLoading, this),
                t.off(S.SUBTITLE_TRACK_LOADING, this.onSubtitleTrackLoading, this)
            }
            ,
            e.createInternalLoader = function(t) {
                var e = this.hls.config
                  , r = e.pLoader
                  , i = e.loader
                  , n = new (r || i)(e);
                return this.loaders[t.type] = n,
                n
            }
            ,
            e.getInternalLoader = function(t) {
                return this.loaders[t.type]
            }
            ,
            e.resetInternalLoader = function(t) {
                this.loaders[t] &amp;&amp; delete this.loaders[t]
            }
            ,
            e.destroyInternalLoaders = function() {
                for (var t in this.loaders) {
                    var e = this.loaders[t];
                    e &amp;&amp; e.destroy(),
                    this.resetInternalLoader(t)
                }
            }
            ,
            e.destroy = function() {
                this.variableList = null,
                this.unregisterListeners(),
                this.destroyInternalLoaders()
            }
            ,
            e.onManifestLoading = function(t, e) {
                var r = e.url;
                this.variableList = null,
                this.load({
                    id: null,
                    level: 0,
                    responseType: &quot;text&quot;,
                    type: ke,
                    url: r,
                    deliveryDirectives: null
                })
            }
            ,
            e.onLevelLoading = function(t, e) {
                var r = e.id
                  , i = e.level
                  , n = e.pathwayId
                  , a = e.url
                  , s = e.deliveryDirectives;
                this.load({
                    id: r,
                    level: i,
                    pathwayId: n,
                    responseType: &quot;text&quot;,
                    type: be,
                    url: a,
                    deliveryDirectives: s
                })
            }
            ,
            e.onAudioTrackLoading = function(t, e) {
                var r = e.id
                  , i = e.groupId
                  , n = e.url
                  , a = e.deliveryDirectives;
                this.load({
                    id: r,
                    groupId: i,
                    level: null,
                    responseType: &quot;text&quot;,
                    type: De,
                    url: n,
                    deliveryDirectives: a
                })
            }
            ,
            e.onSubtitleTrackLoading = function(t, e) {
                var r = e.id
                  , i = e.groupId
                  , n = e.url
                  , a = e.deliveryDirectives;
                this.load({
                    id: r,
                    groupId: i,
                    level: null,
                    responseType: &quot;text&quot;,
                    type: Ie,
                    url: n,
                    deliveryDirectives: a
                })
            }
            ,
            e.load = function(t) {
                var e, r, i, n = this, a = this.hls.config, s = this.getInternalLoader(t);
                if (s) {
                    var l = s.context;
                    if (l &amp;&amp; l.url === t.url &amp;&amp; l.level === t.level)
                        return void w.trace(&quot;[playlist-loader]: playlist request ongoing&quot;);
                    w.log(&quot;[playlist-loader]: aborting previous loader for type: &quot; + t.type),
                    s.abort()
                }
                if (r = t.type === ke ? a.manifestLoadPolicy.default : o({}, a.playlistLoadPolicy.default, {
                    timeoutRetry: null,
                    errorRetry: null
                }),
                s = this.createInternalLoader(t),
                y(null == (e = t.deliveryDirectives) ? void 0 : e.part) &amp;&amp; (t.type === be &amp;&amp; null !== t.level ? i = this.hls.levels[t.level].details : t.type === De &amp;&amp; null !== t.id ? i = this.hls.audioTracks[t.id].details : t.type === Ie &amp;&amp; null !== t.id &amp;&amp; (i = this.hls.subtitleTracks[t.id].details),
                i)) {
                    var u = i.partTarget
                      , h = i.targetduration;
                    if (u &amp;&amp; h) {
                        var d = 1e3 * Math.max(3 * u, .8 * h);
                        r = o({}, r, {
                            maxTimeToFirstByteMs: Math.min(d, r.maxTimeToFirstByteMs),
                            maxLoadTimeMs: Math.min(d, r.maxTimeToFirstByteMs)
                        })
                    }
                }
                var c = r.errorRetry || r.timeoutRetry || {}
                  , f = {
                    loadPolicy: r,
                    timeout: r.maxLoadTimeMs,
                    maxRetry: c.maxNumRetry || 0,
                    retryDelay: c.retryDelayMs || 0,
                    maxRetryDelay: c.maxRetryDelayMs || 0
                }
                  , g = {
                    onSuccess: function(t, e, r, i) {
                        var a = n.getInternalLoader(r);
                        n.resetInternalLoader(r.type);
                        var s = t.data;
                        0 === s.indexOf(&quot;#EXTM3U&quot;) ? (e.parsing.start = performance.now(),
                        pe.isMediaPlaylist(s) ? n.handleTrackOrLevelPlaylist(t, e, r, i || null, a) : n.handleMasterPlaylist(t, e, r, i)) : n.handleManifestParsingError(t, r, new Error(&quot;no EXTM3U delimiter&quot;), i || null, e)
                    },
                    onError: function(t, e, r, i) {
                        n.handleNetworkError(e, r, !1, t, i)
                    },
                    onTimeout: function(t, e, r) {
                        n.handleNetworkError(e, r, !0, void 0, t)
                    }
                };
                s.load(t, f, g)
            }
            ,
            e.handleMasterPlaylist = function(t, e, r, i) {
                var n = this.hls
                  , a = t.data
                  , s = Pe(t, r)
                  , o = pe.parseMasterPlaylist(a, s);
                if (o.playlistParsingError)
                    this.handleManifestParsingError(t, r, o.playlistParsingError, i, e);
                else {
                    var l = o.contentSteering
                      , u = o.levels
                      , h = o.sessionData
                      , d = o.sessionKeys
                      , c = o.startTimeOffset
                      , f = o.variableList;
                    this.variableList = f;
                    var g = pe.parseMasterPlaylistMedia(a, s, o)
                      , v = g.AUDIO
                      , m = void 0 === v ? [] : v
                      , p = g.SUBTITLES
                      , y = g[&quot;CLOSED-CAPTIONS&quot;];
                    m.length &amp;&amp; (m.some((function(t) {
                        return !t.url
                    }
                    )) || !u[0].audioCodec || u[0].attrs.AUDIO || (w.log(&quot;[playlist-loader]: audio codec signaled in quality level, but no embedded audio track signaled, create one&quot;),
                    m.unshift({
                        type: &quot;main&quot;,
                        name: &quot;main&quot;,
                        groupId: &quot;main&quot;,
                        default: !1,
                        autoselect: !1,
                        forced: !1,
                        id: -1,
                        attrs: new x({}),
                        bitrate: 0,
                        url: &quot;&quot;
                    }))),
                    n.trigger(S.MANIFEST_LOADED, {
                        levels: u,
                        audioTracks: m,
                        subtitles: p,
                        captions: y,
                        contentSteering: l,
                        url: s,
                        stats: e,
                        networkDetails: i,
                        sessionData: h,
                        sessionKeys: d,
                        startTimeOffset: c,
                        variableList: f
                    })
                }
            }
            ,
            e.handleTrackOrLevelPlaylist = function(t, e, r, i, n) {
                var a = this.hls
                  , s = r.id
                  , o = r.level
                  , l = r.type
                  , u = Pe(t, r)
                  , h = y(o) ? o : y(s) ? s : 0
                  , d = xe(r)
                  , c = pe.parseLevelPlaylist(t.data, u, h, d, 0, this.variableList);
                if (l === ke) {
                    var f = {
                        attrs: new x({}),
                        bitrate: 0,
                        details: c,
                        name: &quot;&quot;,
                        url: u
                    };
                    a.trigger(S.MANIFEST_LOADED, {
                        levels: [f],
                        audioTracks: [],
                        url: u,
                        stats: e,
                        networkDetails: i,
                        sessionData: null,
                        sessionKeys: null,
                        contentSteering: null,
                        startTimeOffset: null,
                        variableList: null
                    })
                }
                e.parsing.end = performance.now(),
                r.levelDetails = c,
                this.handlePlaylistLoaded(c, t, e, r, i, n)
            }
            ,
            e.handleManifestParsingError = function(t, e, r, i, n) {
                this.hls.trigger(S.ERROR, {
                    type: L.NETWORK_ERROR,
                    details: A.MANIFEST_PARSING_ERROR,
                    fatal: e.type === ke,
                    url: t.url,
                    err: r,
                    error: r,
                    reason: r.message,
                    response: t,
                    context: e,
                    networkDetails: i,
                    stats: n
                })
            }
            ,
            e.handleNetworkError = function(t, e, r, n, a) {
                void 0 === r &amp;&amp; (r = !1);
                var s = &quot;A network &quot; + (r ? &quot;timeout&quot; : &quot;error&quot; + (n ? &quot; (status &quot; + n.code + &quot;)&quot; : &quot;&quot;)) + &quot; occurred while loading &quot; + t.type;
                t.type === be ? s += &quot;: &quot; + t.level + &quot; id: &quot; + t.id : t.type !== De &amp;&amp; t.type !== Ie || (s += &quot; id: &quot; + t.id + &#39; group-id: &quot;&#39; + t.groupId + &#39;&quot;&#39;);
                var o = new Error(s);
                w.warn(&quot;[playlist-loader]: &quot; + s);
                var l = A.UNKNOWN
                  , u = !1
                  , h = this.getInternalLoader(t);
                switch (t.type) {
                case ke:
                    l = r ? A.MANIFEST_LOAD_TIMEOUT : A.MANIFEST_LOAD_ERROR,
                    u = !0;
                    break;
                case be:
                    l = r ? A.LEVEL_LOAD_TIMEOUT : A.LEVEL_LOAD_ERROR,
                    u = !1;
                    break;
                case De:
                    l = r ? A.AUDIO_TRACK_LOAD_TIMEOUT : A.AUDIO_TRACK_LOAD_ERROR,
                    u = !1;
                    break;
                case Ie:
                    l = r ? A.SUBTITLE_TRACK_LOAD_TIMEOUT : A.SUBTITLE_LOAD_ERROR,
                    u = !1
                }
                h &amp;&amp; this.resetInternalLoader(t.type);
                var d = {
                    type: L.NETWORK_ERROR,
                    details: l,
                    fatal: u,
                    url: t.url,
                    loader: h,
                    context: t,
                    error: o,
                    networkDetails: e,
                    stats: a
                };
                if (n) {
                    var c = (null == e ? void 0 : e.url) || t.url;
                    d.response = i({
                        url: c,
                        data: void 0
                    }, n)
                }
                this.hls.trigger(S.ERROR, d)
            }
            ,
            e.handlePlaylistLoaded = function(t, e, r, i, n, a) {
                var s = this.hls
                  , o = i.type
                  , l = i.level
                  , u = i.id
                  , h = i.groupId
                  , d = i.deliveryDirectives
                  , c = Pe(e, i)
                  , f = xe(i)
                  , g = &quot;number&quot; == typeof i.level &amp;&amp; f === we ? l : void 0;
                if (t.fragments.length) {
                    t.targetduration || (t.playlistParsingError = new Error(&quot;Missing Target Duration&quot;));
                    var v = t.playlistParsingError;
                    if (v)
                        s.trigger(S.ERROR, {
                            type: L.NETWORK_ERROR,
                            details: A.LEVEL_PARSING_ERROR,
                            fatal: !1,
                            url: c,
                            error: v,
                            reason: v.message,
                            response: e,
                            context: i,
                            level: g,
                            parent: f,
                            networkDetails: n,
                            stats: r
                        });
                    else
                        switch (t.live &amp;&amp; a &amp;&amp; (a.getCacheAge &amp;&amp; (t.ageHeader = a.getCacheAge() || 0),
                        a.getCacheAge &amp;&amp; !isNaN(t.ageHeader) || (t.ageHeader = 0)),
                        o) {
                        case ke:
                        case be:
                            s.trigger(S.LEVEL_LOADED, {
                                details: t,
                                level: g || 0,
                                id: u || 0,
                                stats: r,
                                networkDetails: n,
                                deliveryDirectives: d
                            });
                            break;
                        case De:
                            s.trigger(S.AUDIO_TRACK_LOADED, {
                                details: t,
                                id: u || 0,
                                groupId: h || &quot;&quot;,
                                stats: r,
                                networkDetails: n,
                                deliveryDirectives: d
                            });
                            break;
                        case Ie:
                            s.trigger(S.SUBTITLE_TRACK_LOADED, {
                                details: t,
                                id: u || 0,
                                groupId: h || &quot;&quot;,
                                stats: r,
                                networkDetails: n,
                                deliveryDirectives: d
                            })
                        }
                } else {
                    var m = new Error(&quot;No Segments found in Playlist&quot;);
                    s.trigger(S.ERROR, {
                        type: L.NETWORK_ERROR,
                        details: A.LEVEL_EMPTY_ERROR,
                        fatal: !1,
                        url: c,
                        error: m,
                        reason: m.message,
                        response: e,
                        context: i,
                        level: g,
                        parent: f,
                        networkDetails: n,
                        stats: r
                    })
                }
            }
            ,
            t
        }();
        function Me(t, e) {
            var r;
            try {
                r = new Event(&quot;addtrack&quot;)
            } catch (t) {
                (r = document.createEvent(&quot;Event&quot;)).initEvent(&quot;addtrack&quot;, !1, !1)
            }
            r.track = t,
            e.dispatchEvent(r)
        }
        function Oe(t, e) {
            var r = t.mode;
            if (&quot;disabled&quot; === r &amp;&amp; (t.mode = &quot;hidden&quot;),
            t.cues &amp;&amp; !t.cues.getCueById(e.id))
                try {
                    if (t.addCue(e),
                    !t.cues.getCueById(e.id))
                        throw new Error(&quot;addCue is failed for: &quot; + e)
                } catch (r) {
                    w.debug(&quot;[texttrack-utils]: &quot; + r);
                    try {
                        var i = new self.TextTrackCue(e.startTime,e.endTime,e.text);
                        i.id = e.id,
                        t.addCue(i)
                    } catch (t) {
                        w.debug(&quot;[texttrack-utils]: Legacy TextTrackCue fallback failed: &quot; + t)
                    }
                }
            &quot;disabled&quot; === r &amp;&amp; (t.mode = r)
        }
        function Ne(t) {
            var e = t.mode;
            if (&quot;disabled&quot; === e &amp;&amp; (t.mode = &quot;hidden&quot;),
            t.cues)
                for (var r = t.cues.length; r--; )
                    t.removeCue(t.cues[r]);
            &quot;disabled&quot; === e &amp;&amp; (t.mode = e)
        }
        function Ue(t, e, r, i) {
            var n = t.mode;
            if (&quot;disabled&quot; === n &amp;&amp; (t.mode = &quot;hidden&quot;),
            t.cues &amp;&amp; t.cues.length &gt; 0)
                for (var a = function(t, e, r) {
                    var i = []
                      , n = function(t, e) {
                        if (e &lt; t[0].startTime)
                            return 0;
                        var r = t.length - 1;
                        if (e &gt; t[r].endTime)
                            return -1;
                        for (var i = 0, n = r; i &lt;= n; ) {
                            var a = Math.floor((n + i) / 2);
                            if (e &lt; t[a].startTime)
                                n = a - 1;
                            else {
                                if (!(e &gt; t[a].startTime &amp;&amp; i &lt; r))
                                    return a;
                                i = a + 1
                            }
                        }
                        return t[i].startTime - e &lt; e - t[n].startTime ? i : n
                    }(t, e);
                    if (n &gt; -1)
                        for (var a = n, s = t.length; a &lt; s; a++) {
                            var o = t[a];
                            if (o.startTime &gt;= e &amp;&amp; o.endTime &lt;= r)
                                i.push(o);
                            else if (o.startTime &gt; r)
                                return i
                        }
                    return i
                }(t.cues, e, r), s = 0; s &lt; a.length; s++)
                    i &amp;&amp; !i(a[s]) || t.removeCue(a[s]);
            &quot;disabled&quot; === n &amp;&amp; (t.mode = n)
        }
        function Be(t) {
            for (var e = [], r = 0; r &lt; t.length; r++) {
                var i = t[r];
                &quot;subtitles&quot; !== i.kind &amp;&amp; &quot;captions&quot; !== i.kind || !i.label || e.push(t[r])
            }
            return e
        }
        var Ge = &quot;org.id3&quot;
          , Ke = &quot;com.apple.quicktime.HLS&quot;
          , He = &quot;https://aomedia.org/emsg/ID3&quot;;
        function Ve() {
            if (&quot;undefined&quot; != typeof self)
                return self.VTTCue || self.TextTrackCue
        }
        function Ye(t, e, r, n, a) {
            var s = new t(e,r,&quot;&quot;);
            try {
                s.value = n,
                a &amp;&amp; (s.type = a)
            } catch (o) {
                s = new t(e,r,JSON.stringify(a ? i({
                    type: a
                }, n) : n))
            }
            return s
        }
        var We = function() {
            var t = Ve();
            try {
                t &amp;&amp; new t(0,Number.POSITIVE_INFINITY,&quot;&quot;)
            } catch (t) {
                return Number.MAX_VALUE
            }
            return Number.POSITIVE_INFINITY
        }();
        function je(t, e) {
            return t.getTime() / 1e3 - e
        }
        var qe = function() {
            function t(t) {
                this.hls = void 0,
                this.id3Track = null,
                this.media = null,
                this.dateRangeCuesAppended = {},
                this.hls = t,
                this._registerListeners()
            }
            var e = t.prototype;
            return e.destroy = function() {
                this._unregisterListeners(),
                this.id3Track = null,
                this.media = null,
                this.dateRangeCuesAppended = {},
                this.hls = null
            }
            ,
            e._registerListeners = function() {
                var t = this.hls;
                t.on(S.MEDIA_ATTACHED, this.onMediaAttached, this),
                t.on(S.MEDIA_DETACHING, this.onMediaDetaching, this),
                t.on(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.on(S.FRAG_PARSING_METADATA, this.onFragParsingMetadata, this),
                t.on(S.BUFFER_FLUSHING, this.onBufferFlushing, this),
                t.on(S.LEVEL_UPDATED, this.onLevelUpdated, this)
            }
            ,
            e._unregisterListeners = function() {
                var t = this.hls;
                t.off(S.MEDIA_ATTACHED, this.onMediaAttached, this),
                t.off(S.MEDIA_DETACHING, this.onMediaDetaching, this),
                t.off(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.off(S.FRAG_PARSING_METADATA, this.onFragParsingMetadata, this),
                t.off(S.BUFFER_FLUSHING, this.onBufferFlushing, this),
                t.off(S.LEVEL_UPDATED, this.onLevelUpdated, this)
            }
            ,
            e.onMediaAttached = function(t, e) {
                this.media = e.media
            }
            ,
            e.onMediaDetaching = function() {
                this.id3Track &amp;&amp; (Ne(this.id3Track),
                this.id3Track = null,
                this.media = null,
                this.dateRangeCuesAppended = {})
            }
            ,
            e.onManifestLoading = function() {
                this.dateRangeCuesAppended = {}
            }
            ,
            e.createTrack = function(t) {
                var e = this.getID3Track(t.textTracks);
                return e.mode = &quot;hidden&quot;,
                e
            }
            ,
            e.getID3Track = function(t) {
                if (this.media) {
                    for (var e = 0; e &lt; t.length; e++) {
                        var r = t[e];
                        if (&quot;metadata&quot; === r.kind &amp;&amp; &quot;id3&quot; === r.label)
                            return Me(r, this.media),
                            r
                    }
                    return this.media.addTextTrack(&quot;metadata&quot;, &quot;id3&quot;)
                }
            }
            ,
            e.onFragParsingMetadata = function(t, e) {
                if (this.media) {
                    var r = this.hls.config
                      , i = r.enableEmsgMetadataCues
                      , n = r.enableID3MetadataCues;
                    if (i || n) {
                        var a = e.samples;
                        this.id3Track || (this.id3Track = this.createTrack(this.media));
                        var s = Ve();
                        if (s)
                            for (var o = 0; o &lt; a.length; o++) {
                                var l = a[o].type;
                                if ((l !== He || i) &amp;&amp; n) {
                                    var u = gt(a[o].data);
                                    if (u) {
                                        var h = a[o].pts
                                          , d = h + a[o].duration;
                                        d &gt; We &amp;&amp; (d = We),
                                        d - h &lt;= 0 &amp;&amp; (d = h + .25);
                                        for (var c = 0; c &lt; u.length; c++) {
                                            var f = u[c];
                                            if (!ct(f)) {
                                                this.updateId3CueEnds(h, l);
                                                var g = Ye(s, h, d, f, l);
                                                g &amp;&amp; this.id3Track.addCue(g)
                                            }
                                        }
                                    }
                                }
                            }
                    }
                }
            }
            ,
            e.updateId3CueEnds = function(t, e) {
                var r, i = null == (r = this.id3Track) ? void 0 : r.cues;
                if (i)
                    for (var n = i.length; n--; ) {
                        var a = i[n];
                        a.type === e &amp;&amp; a.startTime &lt; t &amp;&amp; a.endTime === We &amp;&amp; (a.endTime = t)
                    }
            }
            ,
            e.onBufferFlushing = function(t, e) {
                var r = e.startOffset
                  , i = e.endOffset
                  , n = e.type
                  , a = this.id3Track
                  , s = this.hls;
                if (s) {
                    var o = s.config
                      , l = o.enableEmsgMetadataCues
                      , u = o.enableID3MetadataCues;
                    a &amp;&amp; (l || u) &amp;&amp; Ue(a, r, i, &quot;audio&quot; === n ? function(t) {
                        return t.type === Ge &amp;&amp; u
                    }
                    : &quot;video&quot; === n ? function(t) {
                        return t.type === He &amp;&amp; l
                    }
                    : function(t) {
                        return t.type === Ge &amp;&amp; u || t.type === He &amp;&amp; l
                    }
                    )
                }
            }
            ,
            e.onLevelUpdated = function(t, e) {
                var r = this
                  , i = e.details;
                if (this.media &amp;&amp; i.hasProgramDateTime &amp;&amp; this.hls.config.enableDateRangeMetadataCues) {
                    var n = this.dateRangeCuesAppended
                      , a = this.id3Track
                      , s = i.dateRanges
                      , o = Object.keys(s);
                    if (a)
                        for (var l = Object.keys(n).filter((function(t) {
                            return !o.includes(t)
                        }
                        )), u = function() {
                            var t = l[h];
                            Object.keys(n[t].cues).forEach((function(e) {
                                a.removeCue(n[t].cues[e])
                            }
                            )),
                            delete n[t]
                        }, h = l.length; h--; )
                            u();
                    var d = i.fragments[i.fragments.length - 1];
                    if (0 !== o.length &amp;&amp; y(null == d ? void 0 : d.programDateTime)) {
                        this.id3Track || (this.id3Track = this.createTrack(this.media));
                        for (var c = d.programDateTime / 1e3 - d.start, f = Ve(), g = function() {
                            var t = o[v]
                              , e = s[t]
                              , i = je(e.startDate, c)
                              , a = n[t]
                              , l = (null == a ? void 0 : a.cues) || {}
                              , u = (null == a ? void 0 : a.durationKnown) || !1
                              , h = We
                              , d = e.endDate;
                            if (d)
                                h = je(d, c),
                                u = !0;
                            else if (e.endOnNext &amp;&amp; !u) {
                                var g = o.reduce((function(t, r) {
                                    if (r !== e.id) {
                                        var i = s[r];
                                        if (i.class === e.class &amp;&amp; i.startDate &gt; e.startDate &amp;&amp; (!t || e.startDate &lt; t.startDate))
                                            return i
                                    }
                                    return t
                                }
                                ), null);
                                g &amp;&amp; (h = je(g.startDate, c),
                                u = !0)
                            }
                            for (var m, p, y = Object.keys(e.attr), E = 0; E &lt; y.length; E++) {
                                var T = y[E];
                                if (&quot;ID&quot; !== (p = T) &amp;&amp; &quot;CLASS&quot; !== p &amp;&amp; &quot;START-DATE&quot; !== p &amp;&amp; &quot;DURATION&quot; !== p &amp;&amp; &quot;END-DATE&quot; !== p &amp;&amp; &quot;END-ON-NEXT&quot; !== p) {
                                    var S = l[T];
                                    if (S)
                                        u &amp;&amp; !a.durationKnown &amp;&amp; (S.endTime = h);
                                    else if (f) {
                                        var L = e.attr[T];
                                        P(T) &amp;&amp; (m = L,
                                        L = Uint8Array.from(m.replace(/^0x/, &quot;&quot;).replace(/([\da-fA-F]{2}) ?/g, &quot;0x$1 &quot;).replace(/ +$/, &quot;&quot;).split(&quot; &quot;)).buffer);
                                        var A = Ye(f, i, h, {
                                            key: T,
                                            data: L
                                        }, Ke);
                                        A &amp;&amp; (A.id = t,
                                        r.id3Track.addCue(A),
                                        l[T] = A)
                                    }
                                }
                            }
                            n[t] = {
                                cues: l,
                                dateRange: e,
                                durationKnown: u
                            }
                        }, v = 0; v &lt; o.length; v++)
                            g()
                    }
                }
            }
            ,
            t
        }()
          , Xe = function() {
            function t(t) {
                var e = this;
                this.hls = void 0,
                this.config = void 0,
                this.media = null,
                this.levelDetails = null,
                this.currentTime = 0,
                this.stallCount = 0,
                this._latency = null,
                this.timeupdateHandler = function() {
                    return e.timeupdate()
                }
                ,
                this.hls = t,
                this.config = t.config,
                this.registerListeners()
            }
            var e = t.prototype;
            return e.destroy = function() {
                this.unregisterListeners(),
                this.onMediaDetaching(),
                this.levelDetails = null,
                this.hls = this.timeupdateHandler = null
            }
            ,
            e.registerListeners = function() {
                this.hls.on(S.MEDIA_ATTACHED, this.onMediaAttached, this),
                this.hls.on(S.MEDIA_DETACHING, this.onMediaDetaching, this),
                this.hls.on(S.MANIFEST_LOADING, this.onManifestLoading, this),
                this.hls.on(S.LEVEL_UPDATED, this.onLevelUpdated, this),
                this.hls.on(S.ERROR, this.onError, this)
            }
            ,
            e.unregisterListeners = function() {
                this.hls.off(S.MEDIA_ATTACHED, this.onMediaAttached, this),
                this.hls.off(S.MEDIA_DETACHING, this.onMediaDetaching, this),
                this.hls.off(S.MANIFEST_LOADING, this.onManifestLoading, this),
                this.hls.off(S.LEVEL_UPDATED, this.onLevelUpdated, this),
                this.hls.off(S.ERROR, this.onError, this)
            }
            ,
            e.onMediaAttached = function(t, e) {
                this.media = e.media,
                this.media.addEventListener(&quot;timeupdate&quot;, this.timeupdateHandler)
            }
            ,
            e.onMediaDetaching = function() {
                this.media &amp;&amp; (this.media.removeEventListener(&quot;timeupdate&quot;, this.timeupdateHandler),
                this.media = null)
            }
            ,
            e.onManifestLoading = function() {
                this.levelDetails = null,
                this._latency = null,
                this.stallCount = 0
            }
            ,
            e.onLevelUpdated = function(t, e) {
                var r = e.details;
                this.levelDetails = r,
                r.advanced &amp;&amp; this.timeupdate(),
                !r.live &amp;&amp; this.media &amp;&amp; this.media.removeEventListener(&quot;timeupdate&quot;, this.timeupdateHandler)
            }
            ,
            e.onError = function(t, e) {
                var r;
                e.details === A.BUFFER_STALLED_ERROR &amp;&amp; (this.stallCount++,
                null != (r = this.levelDetails) &amp;&amp; r.live &amp;&amp; w.warn(&quot;[playback-rate-controller]: Stall detected, adjusting target latency&quot;))
            }
            ,
            e.timeupdate = function() {
                var t = this.media
                  , e = this.levelDetails;
                if (t &amp;&amp; e) {
                    this.currentTime = t.currentTime;
                    var r = this.computeLatency();
                    if (null !== r) {
                        this._latency = r;
                        var i = this.config
                          , n = i.lowLatencyMode
                          , a = i.maxLiveSyncPlaybackRate;
                        if (n &amp;&amp; 1 !== a &amp;&amp; e.live) {
                            var s = this.targetLatency;
                            if (null !== s) {
                                var o = r - s;
                                if (o &lt; Math.min(this.maxLatency, s + e.targetduration) &amp;&amp; o &gt; .05 &amp;&amp; this.forwardBufferLength &gt; 1) {
                                    var l = Math.min(2, Math.max(1, a))
                                      , u = Math.round(2 / (1 + Math.exp(-.75 * o - this.edgeStalled)) * 20) / 20;
                                    t.playbackRate = Math.min(l, Math.max(1, u))
                                } else
                                    1 !== t.playbackRate &amp;&amp; 0 !== t.playbackRate &amp;&amp; (t.playbackRate = 1)
                            }
                        }
                    }
                }
            }
            ,
            e.estimateLiveEdge = function() {
                var t = this.levelDetails;
                return null === t ? null : t.edge + t.age
            }
            ,
            e.computeLatency = function() {
                var t = this.estimateLiveEdge();
                return null === t ? null : t - this.currentTime
            }
            ,
            s(t, [{
                key: &quot;latency&quot;,
                get: function() {
                    return this._latency || 0
                }
            }, {
                key: &quot;maxLatency&quot;,
                get: function() {
                    var t = this.config
                      , e = this.levelDetails;
                    return void 0 !== t.liveMaxLatencyDuration ? t.liveMaxLatencyDuration : e ? t.liveMaxLatencyDurationCount * e.targetduration : 0
                }
            }, {
                key: &quot;targetLatency&quot;,
                get: function() {
                    var t = this.levelDetails;
                    if (null === t)
                        return null;
                    var e = t.holdBack
                      , r = t.partHoldBack
                      , i = t.targetduration
                      , n = this.config
                      , a = n.liveSyncDuration
                      , s = n.liveSyncDurationCount
                      , o = n.lowLatencyMode
                      , l = this.hls.userConfig
                      , u = o &amp;&amp; r || e;
                    (l.liveSyncDuration || l.liveSyncDurationCount || 0 === u) &amp;&amp; (u = void 0 !== a ? a : s * i);
                    var h = i;
                    return u + Math.min(1 * this.stallCount, h)
                }
            }, {
                key: &quot;liveSyncPosition&quot;,
                get: function() {
                    var t = this.estimateLiveEdge()
                      , e = this.targetLatency
                      , r = this.levelDetails;
                    if (null === t || null === e || null === r)
                        return null;
                    var i = r.edge
                      , n = t - e - this.edgeStalled
                      , a = i - r.totalduration
                      , s = i - (this.config.lowLatencyMode &amp;&amp; r.partTarget || r.targetduration);
                    return Math.min(Math.max(a, n), s)
                }
            }, {
                key: &quot;drift&quot;,
                get: function() {
                    var t = this.levelDetails;
                    return null === t ? 1 : t.drift
                }
            }, {
                key: &quot;edgeStalled&quot;,
                get: function() {
                    var t = this.levelDetails;
                    if (null === t)
                        return 0;
                    var e = 3 * (this.config.lowLatencyMode &amp;&amp; t.partTarget || t.targetduration);
                    return Math.max(t.age - e, 0)
                }
            }, {
                key: &quot;forwardBufferLength&quot;,
                get: function() {
                    var t = this.media
                      , e = this.levelDetails;
                    if (!t || !e)
                        return 0;
                    var r = t.buffered.length;
                    return (r ? t.buffered.end(r - 1) : e.edge) - this.currentTime
                }
            }]),
            t
        }()
          , ze = [&quot;NONE&quot;, &quot;TYPE-0&quot;, &quot;TYPE-1&quot;, null]
          , Qe = [&quot;SDR&quot;, &quot;PQ&quot;, &quot;HLG&quot;]
          , Je = &quot;&quot;
          , $e = &quot;YES&quot;
          , Ze = &quot;v2&quot;;
        function tr(t) {
            var e = t.canSkipUntil
              , r = t.canSkipDateRanges
              , i = t.age;
            return e &amp;&amp; i &lt; e / 2 ? r ? Ze : $e : Je
        }
        var er = function() {
            function t(t, e, r) {
                this.msn = void 0,
                this.part = void 0,
                this.skip = void 0,
                this.msn = t,
                this.part = e,
                this.skip = r
            }
            return t.prototype.addDirectives = function(t) {
                var e = new self.URL(t);
                return void 0 !== this.msn &amp;&amp; e.searchParams.set(&quot;_HLS_msn&quot;, this.msn.toString()),
                void 0 !== this.part &amp;&amp; e.searchParams.set(&quot;_HLS_part&quot;, this.part.toString()),
                this.skip &amp;&amp; e.searchParams.set(&quot;_HLS_skip&quot;, this.skip),
                e.href
            }
            ,
            t
        }()
          , rr = function() {
            function t(t) {
                this._attrs = void 0,
                this.audioCodec = void 0,
                this.bitrate = void 0,
                this.codecSet = void 0,
                this.url = void 0,
                this.frameRate = void 0,
                this.height = void 0,
                this.id = void 0,
                this.name = void 0,
                this.videoCodec = void 0,
                this.width = void 0,
                this.details = void 0,
                this.fragmentError = 0,
                this.loadError = 0,
                this.loaded = void 0,
                this.realBitrate = 0,
                this.supportedPromise = void 0,
                this.supportedResult = void 0,
                this._avgBitrate = 0,
                this._audioGroups = void 0,
                this._subtitleGroups = void 0,
                this._urlId = 0,
                this.url = [t.url],
                this._attrs = [t.attrs],
                this.bitrate = t.bitrate,
                t.details &amp;&amp; (this.details = t.details),
                this.id = t.id || 0,
                this.name = t.name,
                this.width = t.width || 0,
                this.height = t.height || 0,
                this.frameRate = t.attrs.optionalFloat(&quot;FRAME-RATE&quot;, 0),
                this._avgBitrate = t.attrs.decimalInteger(&quot;AVERAGE-BANDWIDTH&quot;),
                this.audioCodec = t.audioCodec,
                this.videoCodec = t.videoCodec,
                this.codecSet = [t.videoCodec, t.audioCodec].filter((function(t) {
                    return !!t
                }
                )).map((function(t) {
                    return t.substring(0, 4)
                }
                )).join(&quot;,&quot;),
                this.addGroupId(&quot;audio&quot;, t.attrs.AUDIO),
                this.addGroupId(&quot;text&quot;, t.attrs.SUBTITLES)
            }
            var e = t.prototype;
            return e.hasAudioGroup = function(t) {
                return ir(this._audioGroups, t)
            }
            ,
            e.hasSubtitleGroup = function(t) {
                return ir(this._subtitleGroups, t)
            }
            ,
            e.addGroupId = function(t, e) {
                if (e)
                    if (&quot;audio&quot; === t) {
                        var r = this._audioGroups;
                        r || (r = this._audioGroups = []),
                        -1 === r.indexOf(e) &amp;&amp; r.push(e)
                    } else if (&quot;text&quot; === t) {
                        var i = this._subtitleGroups;
                        i || (i = this._subtitleGroups = []),
                        -1 === i.indexOf(e) &amp;&amp; i.push(e)
                    }
            }
            ,
            e.addFallback = function() {}
            ,
            s(t, [{
                key: &quot;maxBitrate&quot;,
                get: function() {
                    return Math.max(this.realBitrate, this.bitrate)
                }
            }, {
                key: &quot;averageBitrate&quot;,
                get: function() {
                    return this._avgBitrate || this.realBitrate || this.bitrate
                }
            }, {
                key: &quot;attrs&quot;,
                get: function() {
                    return this._attrs[0]
                }
            }, {
                key: &quot;codecs&quot;,
                get: function() {
                    return this.attrs.CODECS || &quot;&quot;
                }
            }, {
                key: &quot;pathwayId&quot;,
                get: function() {
                    return this.attrs[&quot;PATHWAY-ID&quot;] || &quot;.&quot;
                }
            }, {
                key: &quot;videoRange&quot;,
                get: function() {
                    return this.attrs[&quot;VIDEO-RANGE&quot;] || &quot;SDR&quot;
                }
            }, {
                key: &quot;score&quot;,
                get: function() {
                    return this.attrs.optionalFloat(&quot;SCORE&quot;, 0)
                }
            }, {
                key: &quot;uri&quot;,
                get: function() {
                    return this.url[0] || &quot;&quot;
                }
            }, {
                key: &quot;audioGroups&quot;,
                get: function() {
                    return this._audioGroups
                }
            }, {
                key: &quot;subtitleGroups&quot;,
                get: function() {
                    return this._subtitleGroups
                }
            }, {
                key: &quot;urlId&quot;,
                get: function() {
                    return 0
                },
                set: function(t) {}
            }, {
                key: &quot;audioGroupIds&quot;,
                get: function() {
                    return this.audioGroups ? [this.audioGroupId] : void 0
                }
            }, {
                key: &quot;textGroupIds&quot;,
                get: function() {
                    return this.subtitleGroups ? [this.textGroupId] : void 0
                }
            }, {
                key: &quot;audioGroupId&quot;,
                get: function() {
                    var t;
                    return null == (t = this.audioGroups) ? void 0 : t[0]
                }
            }, {
                key: &quot;textGroupId&quot;,
                get: function() {
                    var t;
                    return null == (t = this.subtitleGroups) ? void 0 : t[0]
                }
            }]),
            t
        }();
        function ir(t, e) {
            return !(!e || !t) &amp;&amp; -1 !== t.indexOf(e)
        }
        function nr(t, e) {
            var r = e.startPTS;
            if (y(r)) {
                var i, n = 0;
                e.sn &gt; t.sn ? (n = r - t.start,
                i = t) : (n = t.start - r,
                i = e),
                i.duration !== n &amp;&amp; (i.duration = n)
            } else
                e.sn &gt; t.sn ? t.cc === e.cc &amp;&amp; t.minEndPTS ? e.start = t.start + (t.minEndPTS - t.start) : e.start = t.start + t.duration : e.start = Math.max(t.start - e.duration, 0)
        }
        function ar(t, e, r, i, n, a) {
            i - r &lt;= 0 &amp;&amp; (w.warn(&quot;Fragment should have a positive duration&quot;, e),
            i = r + e.duration,
            a = n + e.duration);
            var s = r
              , o = i
              , l = e.startPTS
              , u = e.endPTS;
            if (y(l)) {
                var h = Math.abs(l - r);
                y(e.deltaPTS) ? e.deltaPTS = Math.max(h, e.deltaPTS) : e.deltaPTS = h,
                s = Math.max(r, l),
                r = Math.min(r, l),
                n = Math.min(n, e.startDTS),
                o = Math.min(i, u),
                i = Math.max(i, u),
                a = Math.max(a, e.endDTS)
            }
            var d = r - e.start;
            0 !== e.start &amp;&amp; (e.start = r),
            e.duration = i - e.start,
            e.startPTS = r,
            e.maxStartPTS = s,
            e.startDTS = n,
            e.endPTS = i,
            e.minEndPTS = o,
            e.endDTS = a;
            var c, f = e.sn;
            if (!t || f &lt; t.startSN || f &gt; t.endSN)
                return 0;
            var g = f - t.startSN
              , v = t.fragments;
            for (v[g] = e,
            c = g; c &gt; 0; c--)
                nr(v[c], v[c - 1]);
            for (c = g; c &lt; v.length - 1; c++)
                nr(v[c], v[c + 1]);
            return t.fragmentHint &amp;&amp; nr(v[v.length - 1], t.fragmentHint),
            t.PTSKnown = t.alignedSliding = !0,
            d
        }
        function sr(t, e) {
            for (var r = null, i = t.fragments, n = i.length - 1; n &gt;= 0; n--) {
                var a = i[n].initSegment;
                if (a) {
                    r = a;
                    break
                }
            }
            t.fragmentHint &amp;&amp; delete t.fragmentHint.endPTS;
            var s, l, u, h, d, c = 0;
            if (function(t, e, r) {
                for (var i = e.skippedSegments, n = Math.max(t.startSN, e.startSN) - e.startSN, a = (t.fragmentHint ? 1 : 0) + (i ? e.endSN : Math.min(t.endSN, e.endSN)) - e.startSN, s = e.startSN - t.startSN, o = e.fragmentHint ? e.fragments.concat(e.fragmentHint) : e.fragments, l = t.fragmentHint ? t.fragments.concat(t.fragmentHint) : t.fragments, u = n; u &lt;= a; u++) {
                    var h = l[s + u]
                      , d = o[u];
                    i &amp;&amp; !d &amp;&amp; u &lt; i &amp;&amp; (d = e.fragments[u] = h),
                    h &amp;&amp; d &amp;&amp; r(h, d)
                }
            }(t, e, (function(t, i) {
                t.relurl &amp;&amp; (c = t.cc - i.cc),
                y(t.startPTS) &amp;&amp; y(t.endPTS) &amp;&amp; (i.start = i.startPTS = t.startPTS,
                i.startDTS = t.startDTS,
                i.maxStartPTS = t.maxStartPTS,
                i.endPTS = t.endPTS,
                i.endDTS = t.endDTS,
                i.minEndPTS = t.minEndPTS,
                i.duration = t.endPTS - t.startPTS,
                i.duration &amp;&amp; (s = i),
                e.PTSKnown = e.alignedSliding = !0),
                i.elementaryStreams = t.elementaryStreams,
                i.loader = t.loader,
                i.stats = t.stats,
                t.initSegment &amp;&amp; (i.initSegment = t.initSegment,
                r = t.initSegment)
            }
            )),
            r &amp;&amp; (e.fragmentHint ? e.fragments.concat(e.fragmentHint) : e.fragments).forEach((function(t) {
                var e;
                !t || t.initSegment &amp;&amp; t.initSegment.relurl !== (null == (e = r) ? void 0 : e.relurl) || (t.initSegment = r)
            }
            )),
            e.skippedSegments)
                if (e.deltaUpdateFailed = e.fragments.some((function(t) {
                    return !t
                }
                )),
                e.deltaUpdateFailed) {
                    w.warn(&quot;[level-helper] Previous playlist missing segments skipped in delta playlist&quot;);
                    for (var f = e.skippedSegments; f--; )
                        e.fragments.shift();
                    e.startSN = e.fragments[0].sn,
                    e.startCC = e.fragments[0].cc
                } else
                    e.canSkipDateRanges &amp;&amp; (e.dateRanges = (l = t.dateRanges,
                    u = e.dateRanges,
                    h = e.recentlyRemovedDateranges,
                    d = o({}, l),
                    h &amp;&amp; h.forEach((function(t) {
                        delete d[t]
                    }
                    )),
                    Object.keys(u).forEach((function(t) {
                        var e = new F(u[t].attr,d[t]);
                        e.isValid ? d[t] = e : w.warn(&#39;Ignoring invalid Playlist Delta Update DATERANGE tag: &quot;&#39; + JSON.stringify(u[t].attr) + &#39;&quot;&#39;)
                    }
                    )),
                    d));
            var g = e.fragments;
            if (c) {
                w.warn(&quot;discontinuity sliding from playlist, take drift into account&quot;);
                for (var v = 0; v &lt; g.length; v++)
                    g[v].cc += c
            }
            e.skippedSegments &amp;&amp; (e.startCC = e.fragments[0].cc),
            function(t, e, r) {
                if (t &amp;&amp; e)
                    for (var i = 0, n = 0, a = t.length; n &lt;= a; n++) {
                        var s = t[n]
                          , o = e[n + i];
                        s &amp;&amp; o &amp;&amp; s.index === o.index &amp;&amp; s.fragment.sn === o.fragment.sn ? r(s, o) : i--
                    }
            }(t.partList, e.partList, (function(t, e) {
                e.elementaryStreams = t.elementaryStreams,
                e.stats = t.stats
            }
            )),
            s ? ar(e, s, s.startPTS, s.endPTS, s.startDTS, s.endDTS) : or(t, e),
            g.length &amp;&amp; (e.totalduration = e.edge - g[0].start),
            e.driftStartTime = t.driftStartTime,
            e.driftStart = t.driftStart;
            var m = e.advancedDateTime;
            if (e.advanced &amp;&amp; m) {
                var p = e.edge;
                e.driftStart || (e.driftStartTime = m,
                e.driftStart = p),
                e.driftEndTime = m,
                e.driftEnd = p
            } else
                e.driftEndTime = t.driftEndTime,
                e.driftEnd = t.driftEnd,
                e.advancedDateTime = t.advancedDateTime
        }
        function or(t, e) {
            var r = e.startSN + e.skippedSegments - t.startSN
              , i = t.fragments;
            r &lt; 0 || r &gt;= i.length || lr(e, i[r].start)
        }
        function lr(t, e) {
            if (e) {
                for (var r = t.fragments, i = t.skippedSegments; i &lt; r.length; i++)
                    r[i].start += e;
                t.fragmentHint &amp;&amp; (t.fragmentHint.start += e)
            }
        }
        function ur(t, e, r) {
            var i;
            return null != t &amp;&amp; t.details ? hr(null == (i = t.details) ? void 0 : i.partList, e, r) : null
        }
        function hr(t, e, r) {
            if (t)
                for (var i = t.length; i--; ) {
                    var n = t[i];
                    if (n.index === r &amp;&amp; n.fragment.sn === e)
                        return n
                }
            return null
        }
        function dr(t) {
            t.forEach((function(t, e) {
                var r = t.details;
                null != r &amp;&amp; r.fragments &amp;&amp; r.fragments.forEach((function(t) {
                    t.level = e
                }
                ))
            }
            ))
        }
        function cr(t) {
            switch (t.details) {
            case A.FRAG_LOAD_TIMEOUT:
            case A.KEY_LOAD_TIMEOUT:
            case A.LEVEL_LOAD_TIMEOUT:
            case A.MANIFEST_LOAD_TIMEOUT:
                return !0
            }
            return !1
        }
        function fr(t, e) {
            var r = cr(e);
            return t.default[(r ? &quot;timeout&quot; : &quot;error&quot;) + &quot;Retry&quot;]
        }
        function gr(t, e) {
            var r = &quot;linear&quot; === t.backoff ? 1 : Math.pow(2, e);
            return Math.min(r * t.retryDelayMs, t.maxRetryDelayMs)
        }
        function vr(t) {
            return i(i({}, t), {
                errorRetry: null,
                timeoutRetry: null
            })
        }
        function mr(t, e, r, i) {
            if (!t)
                return !1;
            var n = null == i ? void 0 : i.code
              , a = e &lt; t.maxNumRetry &amp;&amp; (function(t) {
                return 0 === t &amp;&amp; !1 === navigator.onLine || !!t &amp;&amp; (t &lt; 400 || t &gt; 499)
            }(n) || !!r);
            return t.shouldRetry ? t.shouldRetry(t, e, r, i, a) : a
        }
        var pr = function(t, e) {
            for (var r = 0, i = t.length - 1, n = null, a = null; r &lt;= i; ) {
                var s = e(a = t[n = (r + i) / 2 | 0]);
                if (s &gt; 0)
                    r = n + 1;
                else {
                    if (!(s &lt; 0))
                        return a;
                    i = n - 1
                }
            }
            return null
        };
        function yr(t, e, r, i, n) {
            void 0 === r &amp;&amp; (r = 0),
            void 0 === i &amp;&amp; (i = 0),
            void 0 === n &amp;&amp; (n = .005);
            var a = null;
            if (t) {
                a = e[t.sn - e[0].sn + 1] || null;
                var s = t.endDTS - r;
                s &gt; 0 &amp;&amp; s &lt; 15e-7 &amp;&amp; (r += 15e-7)
            } else
                0 === r &amp;&amp; 0 === e[0].start &amp;&amp; (a = e[0]);
            if (a &amp;&amp; ((!t || t.level === a.level) &amp;&amp; 0 === Er(r, i, a) || function(t, e, r) {
                if (e &amp;&amp; 0 === e.start &amp;&amp; e.level &lt; t.level &amp;&amp; (e.endPTS || 0) &gt; 0) {
                    var i = e.tagList.reduce((function(t, e) {
                        return &quot;INF&quot; === e[0] &amp;&amp; (t += parseFloat(e[1])),
                        t
                    }
                    ), r);
                    return t.start &lt;= i
                }
                return !1
            }(a, t, Math.min(n, i))))
                return a;
            var o = pr(e, Er.bind(null, r, i));
            return !o || o === t &amp;&amp; a ? a : o
        }
        function Er(t, e, r) {
            if (void 0 === t &amp;&amp; (t = 0),
            void 0 === e &amp;&amp; (e = 0),
            r.start &lt;= t &amp;&amp; r.start + r.duration &gt; t)
                return 0;
            var i = Math.min(e, r.duration + (r.deltaPTS ? r.deltaPTS : 0));
            return r.start + r.duration - i &lt;= t ? 1 : r.start - i &gt; t &amp;&amp; r.start ? -1 : 0
        }
        function Tr(t, e, r) {
            var i = 1e3 * Math.min(e, r.duration + (r.deltaPTS ? r.deltaPTS : 0));
            return (r.endProgramDateTime || 0) - i &gt; t
        }
        var Sr = 0
          , Lr = 2
          , Ar = 3
          , Rr = 5
          , kr = 0
          , br = 1
          , Dr = 2
          , Ir = function() {
            function t(t) {
                this.hls = void 0,
                this.playlistError = 0,
                this.penalizedRenditions = {},
                this.log = void 0,
                this.warn = void 0,
                this.error = void 0,
                this.hls = t,
                this.log = w.log.bind(w, &quot;[info]:&quot;),
                this.warn = w.warn.bind(w, &quot;[warning]:&quot;),
                this.error = w.error.bind(w, &quot;[error]:&quot;),
                this.registerListeners()
            }
            var e = t.prototype;
            return e.registerListeners = function() {
                var t = this.hls;
                t.on(S.ERROR, this.onError, this),
                t.on(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.on(S.LEVEL_UPDATED, this.onLevelUpdated, this)
            }
            ,
            e.unregisterListeners = function() {
                var t = this.hls;
                t &amp;&amp; (t.off(S.ERROR, this.onError, this),
                t.off(S.ERROR, this.onErrorOut, this),
                t.off(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.off(S.LEVEL_UPDATED, this.onLevelUpdated, this))
            }
            ,
            e.destroy = function() {
                this.unregisterListeners(),
                this.hls = null,
                this.penalizedRenditions = {}
            }
            ,
            e.startLoad = function(t) {}
            ,
            e.stopLoad = function() {
                this.playlistError = 0
            }
            ,
            e.getVariantLevelIndex = function(t) {
                return (null == t ? void 0 : t.type) === we ? t.level : this.hls.loadLevel
            }
            ,
            e.onManifestLoading = function() {
                this.playlistError = 0,
                this.penalizedRenditions = {}
            }
            ,
            e.onLevelUpdated = function() {
                this.playlistError = 0
            }
            ,
            e.onError = function(t, e) {
                var r, i;
                if (!e.fatal) {
                    var n = this.hls
                      , a = e.context;
                    switch (e.details) {
                    case A.FRAG_LOAD_ERROR:
                    case A.FRAG_LOAD_TIMEOUT:
                    case A.KEY_LOAD_ERROR:
                    case A.KEY_LOAD_TIMEOUT:
                        return void (e.errorAction = this.getFragRetryOrSwitchAction(e));
                    case A.FRAG_PARSING_ERROR:
                        if (null != (r = e.frag) &amp;&amp; r.gap)
                            return void (e.errorAction = {
                                action: Sr,
                                flags: kr
                            });
                    case A.FRAG_GAP:
                    case A.FRAG_DECRYPT_ERROR:
                        return e.errorAction = this.getFragRetryOrSwitchAction(e),
                        void (e.errorAction.action = Lr);
                    case A.LEVEL_EMPTY_ERROR:
                    case A.LEVEL_PARSING_ERROR:
                        var s, o, l = e.parent === we ? e.level : n.loadLevel;
                        return void (e.details === A.LEVEL_EMPTY_ERROR &amp;&amp; null != (s = e.context) &amp;&amp; null != (o = s.levelDetails) &amp;&amp; o.live ? e.errorAction = this.getPlaylistRetryOrSwitchAction(e, l) : (e.levelRetry = !1,
                        e.errorAction = this.getLevelSwitchAction(e, l)));
                    case A.LEVEL_LOAD_ERROR:
                    case A.LEVEL_LOAD_TIMEOUT:
                        return void (&quot;number&quot; == typeof (null == a ? void 0 : a.level) &amp;&amp; (e.errorAction = this.getPlaylistRetryOrSwitchAction(e, a.level)));
                    case A.AUDIO_TRACK_LOAD_ERROR:
                    case A.AUDIO_TRACK_LOAD_TIMEOUT:
                    case A.SUBTITLE_LOAD_ERROR:
                    case A.SUBTITLE_TRACK_LOAD_TIMEOUT:
                        if (a) {
                            var u = n.levels[n.loadLevel];
                            if (u &amp;&amp; (a.type === De &amp;&amp; u.hasAudioGroup(a.groupId) || a.type === Ie &amp;&amp; u.hasSubtitleGroup(a.groupId)))
                                return e.errorAction = this.getPlaylistRetryOrSwitchAction(e, n.loadLevel),
                                e.errorAction.action = Lr,
                                void (e.errorAction.flags = br)
                        }
                        return;
                    case A.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED:
                        var h = n.levels[n.loadLevel]
                          , d = null == h ? void 0 : h.attrs[&quot;HDCP-LEVEL&quot;];
                        return void (d ? e.errorAction = {
                            action: Lr,
                            flags: Dr,
                            hdcpLevel: d
                        } : this.keySystemError(e));
                    case A.BUFFER_ADD_CODEC_ERROR:
                    case A.REMUX_ALLOC_ERROR:
                    case A.BUFFER_APPEND_ERROR:
                        return void (e.errorAction = this.getLevelSwitchAction(e, null != (i = e.level) ? i : n.loadLevel));
                    case A.INTERNAL_EXCEPTION:
                    case A.BUFFER_APPENDING_ERROR:
                    case A.BUFFER_FULL_ERROR:
                    case A.LEVEL_SWITCH_ERROR:
                    case A.BUFFER_STALLED_ERROR:
                    case A.BUFFER_SEEK_OVER_HOLE:
                    case A.BUFFER_NUDGE_ON_STALL:
                        return void (e.errorAction = {
                            action: Sr,
                            flags: kr
                        })
                    }
                    e.type === L.KEY_SYSTEM_ERROR &amp;&amp; this.keySystemError(e)
                }
            }
            ,
            e.keySystemError = function(t) {
                var e = this.getVariantLevelIndex(t.frag);
                t.levelRetry = !1,
                t.errorAction = this.getLevelSwitchAction(t, e)
            }
            ,
            e.getPlaylistRetryOrSwitchAction = function(t, e) {
                var r = fr(this.hls.config.playlistLoadPolicy, t)
                  , i = this.playlistError++;
                if (mr(r, i, cr(t), t.response))
                    return {
                        action: Rr,
                        flags: kr,
                        retryConfig: r,
                        retryCount: i
                    };
                var n = this.getLevelSwitchAction(t, e);
                return r &amp;&amp; (n.retryConfig = r,
                n.retryCount = i),
                n
            }
            ,
            e.getFragRetryOrSwitchAction = function(t) {
                var e = this.hls
                  , r = this.getVariantLevelIndex(t.frag)
                  , i = e.levels[r]
                  , n = e.config
                  , a = n.fragLoadPolicy
                  , s = n.keyLoadPolicy
                  , o = fr(t.details.startsWith(&quot;key&quot;) ? s : a, t)
                  , l = e.levels.reduce((function(t, e) {
                    return t + e.fragmentError
                }
                ), 0);
                if (i &amp;&amp; (t.details !== A.FRAG_GAP &amp;&amp; i.fragmentError++,
                mr(o, l, cr(t), t.response)))
                    return {
                        action: Rr,
                        flags: kr,
                        retryConfig: o,
                        retryCount: l
                    };
                var u = this.getLevelSwitchAction(t, r);
                return o &amp;&amp; (u.retryConfig = o,
                u.retryCount = l),
                u
            }
            ,
            e.getLevelSwitchAction = function(t, e) {
                var r = this.hls;
                null == e &amp;&amp; (e = r.loadLevel);
                var i = this.hls.levels[e];
                if (i) {
                    var n, a, s = t.details;
                    i.loadError++,
                    s === A.BUFFER_APPEND_ERROR &amp;&amp; i.fragmentError++;
                    var o = -1
                      , l = r.levels
                      , u = r.loadLevel
                      , h = r.minAutoLevel
                      , d = r.maxAutoLevel;
                    r.autoLevelEnabled || (r.loadLevel = -1);
                    for (var c, f = null == (n = t.frag) ? void 0 : n.type, g = (f === Ce &amp;&amp; s === A.FRAG_PARSING_ERROR || &quot;audio&quot; === t.sourceBufferName &amp;&amp; (s === A.BUFFER_ADD_CODEC_ERROR || s === A.BUFFER_APPEND_ERROR)) &amp;&amp; l.some((function(t) {
                        var e = t.audioCodec;
                        return i.audioCodec !== e
                    }
                    )), v = &quot;video&quot; === t.sourceBufferName &amp;&amp; (s === A.BUFFER_ADD_CODEC_ERROR || s === A.BUFFER_APPEND_ERROR) &amp;&amp; l.some((function(t) {
                        var e = t.codecSet
                          , r = t.audioCodec;
                        return i.codecSet !== e &amp;&amp; i.audioCodec === r
                    }
                    )), m = null != (a = t.context) ? a : {}, p = m.type, y = m.groupId, E = function() {
                        var e = (T + u) % l.length;
                        if (e !== u &amp;&amp; e &gt;= h &amp;&amp; e &lt;= d &amp;&amp; 0 === l[e].loadError) {
                            var r, n, a = l[e];
                            if (s === A.FRAG_GAP &amp;&amp; f === we &amp;&amp; t.frag) {
                                var c = l[e].details;
                                if (c) {
                                    var m = yr(t.frag, c.fragments, t.frag.start);
                                    if (null != m &amp;&amp; m.gap)
                                        return 0
                                }
                            } else {
                                if (p === De &amp;&amp; a.hasAudioGroup(y) || p === Ie &amp;&amp; a.hasSubtitleGroup(y))
                                    return 0;
                                if (f === Ce &amp;&amp; null != (r = i.audioGroups) &amp;&amp; r.some((function(t) {
                                    return a.hasAudioGroup(t)
                                }
                                )) || f === _e &amp;&amp; null != (n = i.subtitleGroups) &amp;&amp; n.some((function(t) {
                                    return a.hasSubtitleGroup(t)
                                }
                                )) || g &amp;&amp; i.audioCodec === a.audioCodec || !g &amp;&amp; i.audioCodec !== a.audioCodec || v &amp;&amp; i.codecSet === a.codecSet)
                                    return 0
                            }
                            return o = e,
                            1
                        }
                    }, T = l.length; T-- &amp;&amp; (0 === (c = E()) || 1 !== c); )
                        ;
                    if (o &gt; -1 &amp;&amp; r.loadLevel !== o)
                        return t.levelRetry = !0,
                        this.playlistError = 0,
                        {
                            action: Lr,
                            flags: kr,
                            nextAutoLevel: o
                        }
                }
                return {
                    action: Lr,
                    flags: br
                }
            }
            ,
            e.onErrorOut = function(t, e) {
                var r;
                switch (null == (r = e.errorAction) ? void 0 : r.action) {
                case Sr:
                    break;
                case Lr:
                    this.sendAlternateToPenaltyBox(e),
                    e.errorAction.resolved || e.details === A.FRAG_GAP ? /MediaSource readyState: ended/.test(e.error.message) &amp;&amp; (this.warn(&#39;MediaSource ended after &quot;&#39; + e.sourceBufferName + &#39;&quot; sourceBuffer append error. Attempting to recover from media error.&#39;),
                    this.hls.recoverMediaError()) : e.fatal = !0
                }
                e.fatal &amp;&amp; this.hls.stopLoad()
            }
            ,
            e.sendAlternateToPenaltyBox = function(t) {
                var e = this.hls
                  , r = t.errorAction;
                if (r) {
                    var i = r.flags
                      , n = r.hdcpLevel
                      , a = r.nextAutoLevel;
                    switch (i) {
                    case kr:
                        this.switchLevel(t, a);
                        break;
                    case Dr:
                        n &amp;&amp; (e.maxHdcpLevel = ze[ze.indexOf(n) - 1],
                        r.resolved = !0),
                        this.warn(&#39;Restricting playback to HDCP-LEVEL of &quot;&#39; + e.maxHdcpLevel + &#39;&quot; or lower&#39;)
                    }
                    r.resolved || this.switchLevel(t, a)
                }
            }
            ,
            e.switchLevel = function(t, e) {
                void 0 !== e &amp;&amp; t.errorAction &amp;&amp; (this.warn(&quot;switching to level &quot; + e + &quot; after &quot; + t.details),
                this.hls.nextAutoLevel = e,
                t.errorAction.resolved = !0,
                this.hls.nextLoadLevel = this.hls.nextAutoLevel)
            }
            ,
            t
        }()
          , wr = function() {
            function t(t, e) {
                this.hls = void 0,
                this.timer = -1,
                this.requestScheduled = -1,
                this.canLoad = !1,
                this.log = void 0,
                this.warn = void 0,
                this.log = w.log.bind(w, e + &quot;:&quot;),
                this.warn = w.warn.bind(w, e + &quot;:&quot;),
                this.hls = t
            }
            var e = t.prototype;
            return e.destroy = function() {
                this.clearTimer(),
                this.hls = this.log = this.warn = null
            }
            ,
            e.clearTimer = function() {
                -1 !== this.timer &amp;&amp; (self.clearTimeout(this.timer),
                this.timer = -1)
            }
            ,
            e.startLoad = function() {
                this.canLoad = !0,
                this.requestScheduled = -1,
                this.loadPlaylist()
            }
            ,
            e.stopLoad = function() {
                this.canLoad = !1,
                this.clearTimer()
            }
            ,
            e.switchParams = function(t, e, r) {
                var i = null == e ? void 0 : e.renditionReports;
                if (i) {
                    for (var n = -1, a = 0; a &lt; i.length; a++) {
                        var s = i[a]
                          , o = void 0;
                        try {
                            o = new self.URL(s.URI,e.url).href
                        } catch (t) {
                            w.warn(&quot;Could not construct new URL for Rendition Report: &quot; + t),
                            o = s.URI || &quot;&quot;
                        }
                        if (o === t) {
                            n = a;
                            break
                        }
                        o === t.substring(0, o.length) &amp;&amp; (n = a)
                    }
                    if (-1 !== n) {
                        var l = i[n]
                          , u = parseInt(l[&quot;LAST-MSN&quot;]) || (null == e ? void 0 : e.lastPartSn)
                          , h = parseInt(l[&quot;LAST-PART&quot;]) || (null == e ? void 0 : e.lastPartIndex);
                        if (this.hls.config.lowLatencyMode) {
                            var d = Math.min(e.age - e.partTarget, e.targetduration);
                            h &gt;= 0 &amp;&amp; d &gt; e.partTarget &amp;&amp; (h += 1)
                        }
                        var c = r &amp;&amp; tr(r);
                        return new er(u,h &gt;= 0 ? h : void 0,c)
                    }
                }
            }
            ,
            e.loadPlaylist = function(t) {
                -1 === this.requestScheduled &amp;&amp; (this.requestScheduled = self.performance.now())
            }
            ,
            e.shouldLoadPlaylist = function(t) {
                return this.canLoad &amp;&amp; !!t &amp;&amp; !!t.url &amp;&amp; (!t.details || t.details.live)
            }
            ,
            e.shouldReloadPlaylist = function(t) {
                return -1 === this.timer &amp;&amp; -1 === this.requestScheduled &amp;&amp; this.shouldLoadPlaylist(t)
            }
            ,
            e.playlistLoaded = function(t, e, r) {
                var i = this
                  , n = e.details
                  , a = e.stats
                  , s = self.performance.now()
                  , o = a.loading.first ? Math.max(0, s - a.loading.first) : 0;
                if (n.advancedDateTime = Date.now() - o,
                n.live || null != r &amp;&amp; r.live) {
                    if (n.reloaded(r),
                    r &amp;&amp; this.log(&quot;live playlist &quot; + t + &quot; &quot; + (n.advanced ? &quot;REFRESHED &quot; + n.lastPartSn + &quot;-&quot; + n.lastPartIndex : n.updated ? &quot;UPDATED&quot; : &quot;MISSED&quot;)),
                    r &amp;&amp; n.fragments.length &gt; 0 &amp;&amp; sr(r, n),
                    !this.canLoad || !n.live)
                        return;
                    var l, u = void 0, h = void 0;
                    if (n.canBlockReload &amp;&amp; n.endSN &amp;&amp; n.advanced) {
                        var d = this.hls.config.lowLatencyMode
                          , c = n.lastPartSn
                          , f = n.endSN
                          , g = n.lastPartIndex
                          , v = c === f;
                        -1 !== g ? (u = v ? f + 1 : c,
                        h = v ? d ? 0 : g : g + 1) : u = f + 1;
                        var m = n.age
                          , p = m + n.ageHeader
                          , y = Math.min(p - n.partTarget, 1.5 * n.targetduration);
                        if (y &gt; 0) {
                            if (r &amp;&amp; y &gt; r.tuneInGoal)
                                this.warn(&quot;CDN Tune-in goal increased from: &quot; + r.tuneInGoal + &quot; to: &quot; + y + &quot; with playlist age: &quot; + n.age),
                                y = 0;
                            else {
                                var E = Math.floor(y / n.targetduration);
                                u += E,
                                void 0 !== h &amp;&amp; (h += Math.round(y % n.targetduration / n.partTarget)),
                                this.log(&quot;CDN Tune-in age: &quot; + n.ageHeader + &quot;s last advanced &quot; + m.toFixed(2) + &quot;s goal: &quot; + y + &quot; skip sn &quot; + E + &quot; to part &quot; + h)
                            }
                            n.tuneInGoal = y
                        }
                        if (l = this.getDeliveryDirectives(n, e.deliveryDirectives, u, h),
                        d || !v)
                            return void this.loadPlaylist(l)
                    } else
                        (n.canBlockReload || n.canSkipUntil) &amp;&amp; (l = this.getDeliveryDirectives(n, e.deliveryDirectives, u, h));
                    var T = this.hls.mainForwardBufferInfo
                      , S = T ? T.end - T.len : 0
                      , L = function(t, e) {
                        void 0 === e &amp;&amp; (e = 1 / 0);
                        var r = 1e3 * t.targetduration;
                        if (t.updated) {
                            var i = t.fragments;
                            if (i.length &amp;&amp; 4 * r &gt; e) {
                                var n = 1e3 * i[i.length - 1].duration;
                                n &lt; r &amp;&amp; (r = n)
                            }
                        } else
                            r /= 2;
                        return Math.round(r)
                    }(n, 1e3 * (n.edge - S));
                    n.updated &amp;&amp; s &gt; this.requestScheduled + L &amp;&amp; (this.requestScheduled = a.loading.start),
                    void 0 !== u &amp;&amp; n.canBlockReload ? this.requestScheduled = a.loading.first + L - (1e3 * n.partTarget || 1e3) : -1 === this.requestScheduled || this.requestScheduled + L &lt; s ? this.requestScheduled = s : this.requestScheduled - s &lt;= 0 &amp;&amp; (this.requestScheduled += L);
                    var A = this.requestScheduled - s;
                    A = Math.max(0, A),
                    this.log(&quot;reload live playlist &quot; + t + &quot; in &quot; + Math.round(A) + &quot; ms&quot;),
                    this.timer = self.setTimeout((function() {
                        return i.loadPlaylist(l)
                    }
                    ), A)
                } else
                    this.clearTimer()
            }
            ,
            e.getDeliveryDirectives = function(t, e, r, i) {
                var n = tr(t);
                return null != e &amp;&amp; e.skip &amp;&amp; t.deltaUpdateFailed &amp;&amp; (r = e.msn,
                i = e.part,
                n = Je),
                new er(r,i,n)
            }
            ,
            e.checkRetry = function(t) {
                var e = this
                  , r = t.details
                  , i = cr(t)
                  , n = t.errorAction
                  , a = n || {}
                  , s = a.action
                  , o = a.retryCount
                  , l = void 0 === o ? 0 : o
                  , u = a.retryConfig
                  , h = !!n &amp;&amp; !!u &amp;&amp; (s === Rr || !n.resolved &amp;&amp; s === Lr);
                if (h) {
                    var d;
                    if (this.requestScheduled = -1,
                    l &gt;= u.maxNumRetry)
                        return !1;
                    if (i &amp;&amp; null != (d = t.context) &amp;&amp; d.deliveryDirectives)
                        this.warn(&quot;Retrying playlist loading &quot; + (l + 1) + &quot;/&quot; + u.maxNumRetry + &#39; after &quot;&#39; + r + &#39;&quot; without delivery-directives&#39;),
                        this.loadPlaylist();
                    else {
                        var c = gr(u, l);
                        this.timer = self.setTimeout((function() {
                            return e.loadPlaylist()
                        }
                        ), c),
                        this.warn(&quot;Retrying playlist loading &quot; + (l + 1) + &quot;/&quot; + u.maxNumRetry + &#39; after &quot;&#39; + r + &#39;&quot; in &#39; + c + &quot;ms&quot;)
                    }
                    t.levelRetry = !0,
                    n.resolved = !0
                }
                return h
            }
            ,
            t
        }()
          , Cr = function() {
            function t(t, e, r) {
                void 0 === e &amp;&amp; (e = 0),
                void 0 === r &amp;&amp; (r = 0),
                this.halfLife = void 0,
                this.alpha_ = void 0,
                this.estimate_ = void 0,
                this.totalWeight_ = void 0,
                this.halfLife = t,
                this.alpha_ = t ? Math.exp(Math.log(.5) / t) : 0,
                this.estimate_ = e,
                this.totalWeight_ = r
            }
            var e = t.prototype;
            return e.sample = function(t, e) {
                var r = Math.pow(this.alpha_, t);
                this.estimate_ = e * (1 - r) + r * this.estimate_,
                this.totalWeight_ += t
            }
            ,
            e.getTotalWeight = function() {
                return this.totalWeight_
            }
            ,
            e.getEstimate = function() {
                if (this.alpha_) {
                    var t = 1 - Math.pow(this.alpha_, this.totalWeight_);
                    if (t)
                        return this.estimate_ / t
                }
                return this.estimate_
            }
            ,
            t
        }()
          , _r = function() {
            function t(t, e, r, i) {
                void 0 === i &amp;&amp; (i = 100),
                this.defaultEstimate_ = void 0,
                this.minWeight_ = void 0,
                this.minDelayMs_ = void 0,
                this.slow_ = void 0,
                this.fast_ = void 0,
                this.defaultTTFB_ = void 0,
                this.ttfb_ = void 0,
                this.defaultEstimate_ = r,
                this.minWeight_ = .001,
                this.minDelayMs_ = 50,
                this.slow_ = new Cr(t),
                this.fast_ = new Cr(e),
                this.defaultTTFB_ = i,
                this.ttfb_ = new Cr(t)
            }
            var e = t.prototype;
            return e.update = function(t, e) {
                var r = this.slow_
                  , i = this.fast_
                  , n = this.ttfb_;
                r.halfLife !== t &amp;&amp; (this.slow_ = new Cr(t,r.getEstimate(),r.getTotalWeight())),
                i.halfLife !== e &amp;&amp; (this.fast_ = new Cr(e,i.getEstimate(),i.getTotalWeight())),
                n.halfLife !== t &amp;&amp; (this.ttfb_ = new Cr(t,n.getEstimate(),n.getTotalWeight()))
            }
            ,
            e.sample = function(t, e) {
                var r = (t = Math.max(t, this.minDelayMs_)) / 1e3
                  , i = 8 * e / r;
                this.fast_.sample(r, i),
                this.slow_.sample(r, i)
            }
            ,
            e.sampleTTFB = function(t) {
                var e = t / 1e3
                  , r = Math.sqrt(2) * Math.exp(-Math.pow(e, 2) / 2);
                this.ttfb_.sample(r, Math.max(t, 5))
            }
            ,
            e.canEstimate = function() {
                return this.fast_.getTotalWeight() &gt;= this.minWeight_
            }
            ,
            e.getEstimate = function() {
                return this.canEstimate() ? Math.min(this.fast_.getEstimate(), this.slow_.getEstimate()) : this.defaultEstimate_
            }
            ,
            e.getEstimateTTFB = function() {
                return this.ttfb_.getTotalWeight() &gt;= this.minWeight_ ? this.ttfb_.getEstimate() : this.defaultTTFB_
            }
            ,
            e.destroy = function() {}
            ,
            t
        }()
          , xr = {
            supported: !0,
            configurations: [],
            decodingInfoResults: [{
                supported: !0,
                powerEfficient: !0,
                smooth: !0
            }]
        }
          , Pr = {};
        function Fr(t, e, r) {
            var n = t.videoCodec
              , a = t.audioCodec;
            if (!n || !a || !r)
                return Promise.resolve(xr);
            var s = {
                width: t.width,
                height: t.height,
                bitrate: Math.ceil(Math.max(.9 * t.bitrate, t.averageBitrate)),
                framerate: t.frameRate || 30
            }
              , o = t.videoRange;
            &quot;SDR&quot; !== o &amp;&amp; (s.transferFunction = o.toLowerCase());
            var l = n.split(&quot;,&quot;).map((function(t) {
                return {
                    type: &quot;media-source&quot;,
                    video: i(i({}, s), {}, {
                        contentType: ae(t, &quot;video&quot;)
                    })
                }
            }
            ));
            return a &amp;&amp; t.audioGroups &amp;&amp; t.audioGroups.forEach((function(t) {
                var r;
                t &amp;&amp; (null == (r = e.groups[t]) || r.tracks.forEach((function(e) {
                    if (e.groupId === t) {
                        var r = e.channels || &quot;&quot;
                          , i = parseFloat(r);
                        y(i) &amp;&amp; i &gt; 2 &amp;&amp; l.push.apply(l, a.split(&quot;,&quot;).map((function(t) {
                            return {
                                type: &quot;media-source&quot;,
                                audio: {
                                    contentType: ae(t, &quot;audio&quot;),
                                    channels: &quot;&quot; + i
                                }
                            }
                        }
                        )))
                    }
                }
                )))
            }
            )),
            Promise.all(l.map((function(t) {
                var e = function(t) {
                    var e = t.audio
                      , r = t.video
                      , i = r || e;
                    if (i) {
                        var n = i.contentType.split(&#39;&quot;&#39;)[1];
                        if (r)
                            return &quot;r&quot; + r.height + &quot;x&quot; + r.width + &quot;f&quot; + Math.ceil(r.framerate) + (r.transferFunction || &quot;sd&quot;) + &quot;_&quot; + n + &quot;_&quot; + Math.ceil(r.bitrate / 1e5);
                        if (e)
                            return &quot;c&quot; + e.channels + (e.spatialRendering ? &quot;s&quot; : &quot;n&quot;) + &quot;_&quot; + n
                    }
                    return &quot;&quot;
                }(t);
                return Pr[e] || (Pr[e] = r.decodingInfo(t))
            }
            ))).then((function(t) {
                return {
                    supported: !t.some((function(t) {
                        return !t.supported
                    }
                    )),
                    configurations: l,
                    decodingInfoResults: t
                }
            }
            )).catch((function(t) {
                return {
                    supported: !1,
                    configurations: l,
                    decodingInfoResults: [],
                    error: t
                }
            }
            ))
        }
        function Mr(t, e) {
            var r = !1
              , i = [];
            return t &amp;&amp; (r = &quot;SDR&quot; !== t,
            i = [t]),
            e &amp;&amp; (i = e.allowedVideoRanges || Qe.slice(0),
            i = (r = void 0 !== e.preferHDR ? e.preferHDR : function() {
                if (&quot;function&quot; == typeof matchMedia) {
                    var t = matchMedia(&quot;(dynamic-range: high)&quot;)
                      , e = matchMedia(&quot;bad query&quot;);
                    if (t.media !== e.media)
                        return !0 === t.matches
                }
                return !1
            }()) ? i.filter((function(t) {
                return &quot;SDR&quot; !== t
            }
            )) : [&quot;SDR&quot;]),
            {
                preferHDR: r,
                allowedVideoRanges: i
            }
        }
        function Or(t, e) {
            w.log(&#39;[abr] start candidates with &quot;&#39; + t + &#39;&quot; ignored because &#39; + e)
        }
        function Nr(t, e, r) {
            if (&quot;attrs&quot;in t) {
                var i = e.indexOf(t);
                if (-1 !== i)
                    return i
            }
            for (var n = 0; n &lt; e.length; n++)
                if (Ur(t, e[n], r))
                    return n;
            return -1
        }
        function Ur(t, e, r) {
            var i = t.groupId
              , n = t.name
              , a = t.lang
              , s = t.assocLang
              , o = t.characteristics
              , l = t.default
              , u = t.forced;
            return (void 0 === i || e.groupId === i) &amp;&amp; (void 0 === n || e.name === n) &amp;&amp; (void 0 === a || e.lang === a) &amp;&amp; (void 0 === a || e.assocLang === s) &amp;&amp; (void 0 === l || e.default === l) &amp;&amp; (void 0 === u || e.forced === u) &amp;&amp; (void 0 === o || function(t, e) {
                void 0 === e &amp;&amp; (e = &quot;&quot;);
                var r = t.split(&quot;,&quot;)
                  , i = e.split(&quot;,&quot;);
                return r.length === i.length &amp;&amp; !r.some((function(t) {
                    return -1 === i.indexOf(t)
                }
                ))
            }(o, e.characteristics)) &amp;&amp; (void 0 === r || r(t, e))
        }
        function Br(t, e) {
            var r = t.audioCodec
              , i = t.channels;
            return !(void 0 !== r &amp;&amp; (e.audioCodec || &quot;&quot;).substring(0, 4) !== r.substring(0, 4) || void 0 !== i &amp;&amp; i !== (e.channels || &quot;2&quot;))
        }
        function Gr(t, e, r) {
            for (var i = e; i; i--)
                if (r(t[i]))
                    return i;
            for (var n = e + 1; n &lt; t.length; n++)
                if (r(t[n]))
                    return n;
            return -1
        }
        var Kr = function() {
            function t(t) {
                var e = this;
                this.hls = void 0,
                this.lastLevelLoadSec = 0,
                this.lastLoadedFragLevel = -1,
                this.firstSelection = -1,
                this._nextAutoLevel = -1,
                this.nextAutoLevelKey = &quot;&quot;,
                this.audioTracksByGroup = null,
                this.codecTiers = null,
                this.timer = -1,
                this.fragCurrent = null,
                this.partCurrent = null,
                this.bitrateTestDelay = 0,
                this.bwEstimator = void 0,
                this._abandonRulesCheck = function() {
                    var t = e.fragCurrent
                      , r = e.partCurrent
                      , i = e.hls
                      , n = i.autoLevelEnabled
                      , a = i.media;
                    if (t &amp;&amp; a) {
                        var s = performance.now()
                          , o = r ? r.stats : t.stats
                          , l = r ? r.duration : t.duration
                          , u = s - o.loading.start
                          , h = i.minAutoLevel;
                        if (o.aborted || o.loaded &amp;&amp; o.loaded === o.total || t.level &lt;= h)
                            return e.clearTimer(),
                            void (e._nextAutoLevel = -1);
                        if (n &amp;&amp; !a.paused &amp;&amp; a.playbackRate &amp;&amp; a.readyState) {
                            var d = i.mainForwardBufferInfo;
                            if (null !== d) {
                                var c = e.bwEstimator.getEstimateTTFB()
                                  , f = Math.abs(a.playbackRate);
                                if (!(u &lt;= Math.max(c, l / (2 * f) * 1e3))) {
                                    var g = d.len / f
                                      , v = o.loading.first ? o.loading.first - o.loading.start : -1
                                      , m = o.loaded &amp;&amp; v &gt; -1
                                      , p = e.getBwEstimate()
                                      , E = i.levels
                                      , T = E[t.level]
                                      , L = o.total || Math.max(o.loaded, Math.round(l * T.averageBitrate / 8))
                                      , A = m ? u - v : u;
                                    A &lt; 1 &amp;&amp; m &amp;&amp; (A = Math.min(u, 8 * o.loaded / p));
                                    var R = m ? 1e3 * o.loaded / A : 0
                                      , k = R ? (L - o.loaded) / R : 8 * L / p + c / 1e3;
                                    if (!(k &lt;= g)) {
                                        var b, D = R ? 8 * R : p, I = Number.POSITIVE_INFINITY;
                                        for (b = t.level - 1; b &gt; h; b--) {
                                            var C = E[b].maxBitrate;
                                            if ((I = e.getTimeToLoadFrag(c / 1e3, D, l * C, !E[b].details)) &lt; g)
                                                break
                                        }
                                        if (!(I &gt;= k || I &gt; 10 * l)) {
                                            i.nextLoadLevel = i.nextAutoLevel = b,
                                            m ? e.bwEstimator.sample(u - Math.min(c, v), o.loaded) : e.bwEstimator.sampleTTFB(u);
                                            var _ = E[b].maxBitrate;
                                            e.getBwEstimate() * e.hls.config.abrBandWidthUpFactor &gt; _ &amp;&amp; e.resetEstimator(_),
                                            e.clearTimer(),
                                            w.warn(&quot;[abr] Fragment &quot; + t.sn + (r ? &quot; part &quot; + r.index : &quot;&quot;) + &quot; of level &quot; + t.level + &quot; is loading too slowly;\n      Time to underbuffer: &quot; + g.toFixed(3) + &quot; s\n      Estimated load time for current fragment: &quot; + k.toFixed(3) + &quot; s\n      Estimated load time for down switch fragment: &quot; + I.toFixed(3) + &quot; s\n      TTFB estimate: &quot; + (0 | v) + &quot; ms\n      Current BW estimate: &quot; + (y(p) ? 0 | p : &quot;Unknown&quot;) + &quot; bps\n      New BW estimate: &quot; + (0 | e.getBwEstimate()) + &quot; bps\n      Switching to level &quot; + b + &quot; @ &quot; + (0 | _) + &quot; bps&quot;),
                                            i.trigger(S.FRAG_LOAD_EMERGENCY_ABORTED, {
                                                frag: t,
                                                part: r,
                                                stats: o
                                            })
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                ,
                this.hls = t,
                this.bwEstimator = this.initEstimator(),
                this.registerListeners()
            }
            var e = t.prototype;
            return e.resetEstimator = function(t) {
                t &amp;&amp; (w.log(&quot;setting initial bwe to &quot; + t),
                this.hls.config.abrEwmaDefaultEstimate = t),
                this.firstSelection = -1,
                this.bwEstimator = this.initEstimator()
            }
            ,
            e.initEstimator = function() {
                var t = this.hls.config;
                return new _r(t.abrEwmaSlowVoD,t.abrEwmaFastVoD,t.abrEwmaDefaultEstimate)
            }
            ,
            e.registerListeners = function() {
                var t = this.hls;
                t.on(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.on(S.FRAG_LOADING, this.onFragLoading, this),
                t.on(S.FRAG_LOADED, this.onFragLoaded, this),
                t.on(S.FRAG_BUFFERED, this.onFragBuffered, this),
                t.on(S.LEVEL_SWITCHING, this.onLevelSwitching, this),
                t.on(S.LEVEL_LOADED, this.onLevelLoaded, this),
                t.on(S.LEVELS_UPDATED, this.onLevelsUpdated, this),
                t.on(S.MAX_AUTO_LEVEL_UPDATED, this.onMaxAutoLevelUpdated, this),
                t.on(S.ERROR, this.onError, this)
            }
            ,
            e.unregisterListeners = function() {
                var t = this.hls;
                t &amp;&amp; (t.off(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.off(S.FRAG_LOADING, this.onFragLoading, this),
                t.off(S.FRAG_LOADED, this.onFragLoaded, this),
                t.off(S.FRAG_BUFFERED, this.onFragBuffered, this),
                t.off(S.LEVEL_SWITCHING, this.onLevelSwitching, this),
                t.off(S.LEVEL_LOADED, this.onLevelLoaded, this),
                t.off(S.LEVELS_UPDATED, this.onLevelsUpdated, this),
                t.off(S.MAX_AUTO_LEVEL_UPDATED, this.onMaxAutoLevelUpdated, this),
                t.off(S.ERROR, this.onError, this))
            }
            ,
            e.destroy = function() {
                this.unregisterListeners(),
                this.clearTimer(),
                this.hls = this._abandonRulesCheck = null,
                this.fragCurrent = this.partCurrent = null
            }
            ,
            e.onManifestLoading = function(t, e) {
                this.lastLoadedFragLevel = -1,
                this.firstSelection = -1,
                this.lastLevelLoadSec = 0,
                this.fragCurrent = this.partCurrent = null,
                this.onLevelsUpdated(),
                this.clearTimer()
            }
            ,
            e.onLevelsUpdated = function() {
                this.lastLoadedFragLevel &gt; -1 &amp;&amp; this.fragCurrent &amp;&amp; (this.lastLoadedFragLevel = this.fragCurrent.level),
                this._nextAutoLevel = -1,
                this.onMaxAutoLevelUpdated(),
                this.codecTiers = null,
                this.audioTracksByGroup = null
            }
            ,
            e.onMaxAutoLevelUpdated = function() {
                this.firstSelection = -1,
                this.nextAutoLevelKey = &quot;&quot;
            }
            ,
            e.onFragLoading = function(t, e) {
                var r, i = e.frag;
                this.ignoreFragment(i) || (i.bitrateTest || (this.fragCurrent = i,
                this.partCurrent = null != (r = e.part) ? r : null),
                this.clearTimer(),
                this.timer = self.setInterval(this._abandonRulesCheck, 100))
            }
            ,
            e.onLevelSwitching = function(t, e) {
                this.clearTimer()
            }
            ,
            e.onError = function(t, e) {
                if (!e.fatal)
                    switch (e.details) {
                    case A.BUFFER_ADD_CODEC_ERROR:
                    case A.BUFFER_APPEND_ERROR:
                        this.lastLoadedFragLevel = -1,
                        this.firstSelection = -1;
                        break;
                    case A.FRAG_LOAD_TIMEOUT:
                        var r = e.frag
                          , i = this.fragCurrent
                          , n = this.partCurrent;
                        if (r &amp;&amp; i &amp;&amp; r.sn === i.sn &amp;&amp; r.level === i.level) {
                            var a = performance.now()
                              , s = n ? n.stats : r.stats
                              , o = a - s.loading.start
                              , l = s.loading.first ? s.loading.first - s.loading.start : -1;
                            if (s.loaded &amp;&amp; l &gt; -1) {
                                var u = this.bwEstimator.getEstimateTTFB();
                                this.bwEstimator.sample(o - Math.min(u, l), s.loaded)
                            } else
                                this.bwEstimator.sampleTTFB(o)
                        }
                    }
            }
            ,
            e.getTimeToLoadFrag = function(t, e, r, i) {
                return t + r / e + (i ? this.lastLevelLoadSec : 0)
            }
            ,
            e.onLevelLoaded = function(t, e) {
                var r = this.hls.config
                  , i = e.stats.loading
                  , n = i.end - i.start;
                y(n) &amp;&amp; (this.lastLevelLoadSec = n / 1e3),
                e.details.live ? this.bwEstimator.update(r.abrEwmaSlowLive, r.abrEwmaFastLive) : this.bwEstimator.update(r.abrEwmaSlowVoD, r.abrEwmaFastVoD)
            }
            ,
            e.onFragLoaded = function(t, e) {
                var r = e.frag
                  , i = e.part
                  , n = i ? i.stats : r.stats;
                if (r.type === we &amp;&amp; this.bwEstimator.sampleTTFB(n.loading.first - n.loading.start),
                !this.ignoreFragment(r)) {
                    if (this.clearTimer(),
                    r.level === this._nextAutoLevel &amp;&amp; (this._nextAutoLevel = -1),
                    this.firstSelection = -1,
                    this.hls.config.abrMaxWithRealBitrate) {
                        var a = i ? i.duration : r.duration
                          , s = this.hls.levels[r.level]
                          , o = (s.loaded ? s.loaded.bytes : 0) + n.loaded
                          , l = (s.loaded ? s.loaded.duration : 0) + a;
                        s.loaded = {
                            bytes: o,
                            duration: l
                        },
                        s.realBitrate = Math.round(8 * o / l)
                    }
                    if (r.bitrateTest) {
                        var u = {
                            stats: n,
                            frag: r,
                            part: i,
                            id: r.type
                        };
                        this.onFragBuffered(S.FRAG_BUFFERED, u),
                        r.bitrateTest = !1
                    } else
                        this.lastLoadedFragLevel = r.level
                }
            }
            ,
            e.onFragBuffered = function(t, e) {
                var r = e.frag
                  , i = e.part
                  , n = null != i &amp;&amp; i.stats.loaded ? i.stats : r.stats;
                if (!n.aborted &amp;&amp; !this.ignoreFragment(r)) {
                    var a = n.parsing.end - n.loading.start - Math.min(n.loading.first - n.loading.start, this.bwEstimator.getEstimateTTFB());
                    this.bwEstimator.sample(a, n.loaded),
                    n.bwEstimate = this.getBwEstimate(),
                    r.bitrateTest ? this.bitrateTestDelay = a / 1e3 : this.bitrateTestDelay = 0
                }
            }
            ,
            e.ignoreFragment = function(t) {
                return t.type !== we || &quot;initSegment&quot; === t.sn
            }
            ,
            e.clearTimer = function() {
                this.timer &gt; -1 &amp;&amp; (self.clearInterval(this.timer),
                this.timer = -1)
            }
            ,
            e.getAutoLevelKey = function() {
                return this.getBwEstimate() + &quot;_&quot; + this.getStarvationDelay().toFixed(2)
            }
            ,
            e.getNextABRAutoLevel = function() {
                var t = this.fragCurrent
                  , e = this.partCurrent
                  , r = this.hls
                  , i = r.maxAutoLevel
                  , n = r.config
                  , a = r.minAutoLevel
                  , s = e ? e.duration : t ? t.duration : 0
                  , o = this.getBwEstimate()
                  , l = this.getStarvationDelay()
                  , u = n.abrBandWidthFactor
                  , h = n.abrBandWidthUpFactor;
                if (l) {
                    var d = this.findBestLevel(o, a, i, l, 0, u, h);
                    if (d &gt;= 0)
                        return d
                }
                var c = s ? Math.min(s, n.maxStarvationDelay) : n.maxStarvationDelay;
                if (!l) {
                    var f = this.bitrateTestDelay;
                    f &amp;&amp; (c = (s ? Math.min(s, n.maxLoadingDelay) : n.maxLoadingDelay) - f,
                    w.info(&quot;[abr] bitrate test took &quot; + Math.round(1e3 * f) + &quot;ms, set first fragment max fetchDuration to &quot; + Math.round(1e3 * c) + &quot; ms&quot;),
                    u = h = 1)
                }
                var g = this.findBestLevel(o, a, i, l, c, u, h);
                if (w.info(&quot;[abr] &quot; + (l ? &quot;rebuffering expected&quot; : &quot;buffer is empty&quot;) + &quot;, optimal quality level &quot; + g),
                g &gt; -1)
                    return g;
                var v = r.levels[a]
                  , m = r.levels[r.loadLevel];
                return (null == v ? void 0 : v.bitrate) &lt; (null == m ? void 0 : m.bitrate) ? a : r.loadLevel
            }
            ,
            e.getStarvationDelay = function() {
                var t = this.hls
                  , e = t.media;
                if (!e)
                    return 1 / 0;
                var r = e &amp;&amp; 0 !== e.playbackRate ? Math.abs(e.playbackRate) : 1
                  , i = t.mainForwardBufferInfo;
                return (i ? i.len : 0) / r
            }
            ,
            e.getBwEstimate = function() {
                return this.bwEstimator.canEstimate() ? this.bwEstimator.getEstimate() : this.hls.config.abrEwmaDefaultEstimate
            }
            ,
            e.findBestLevel = function(t, e, r, i, n, a, s) {
                var o, l = this, u = i + n, h = this.lastLoadedFragLevel, d = -1 === h ? this.hls.firstLevel : h, c = this.fragCurrent, f = this.partCurrent, g = this.hls, v = g.levels, m = g.allAudioTracks, p = g.loadLevel, E = g.config;
                if (1 === v.length)
                    return 0;
                var T, S = v[d], L = !(null == S || null == (o = S.details) || !o.live), A = -1 === p || -1 === h, R = &quot;SDR&quot;, k = (null == S ? void 0 : S.frameRate) || 0, b = E.audioPreference, D = E.videoPreference, I = this.audioTracksByGroup || (this.audioTracksByGroup = function(t) {
                    return t.reduce((function(t, e) {
                        var r = t.groups[e.groupId];
                        r || (r = t.groups[e.groupId] = {
                            tracks: [],
                            channels: {
                                2: 0
                            },
                            hasDefault: !1,
                            hasAutoSelect: !1
                        }),
                        r.tracks.push(e);
                        var i = e.channels || &quot;2&quot;;
                        return r.channels[i] = (r.channels[i] || 0) + 1,
                        r.hasDefault = r.hasDefault || e.default,
                        r.hasAutoSelect = r.hasAutoSelect || e.autoselect,
                        r.hasDefault &amp;&amp; (t.hasDefaultAudio = !0),
                        r.hasAutoSelect &amp;&amp; (t.hasAutoSelectAudio = !0),
                        t
                    }
                    ), {
                        hasDefaultAudio: !1,
                        hasAutoSelectAudio: !1,
                        groups: {}
                    })
                }(m));
                if (A) {
                    if (-1 !== this.firstSelection)
                        return this.firstSelection;
                    var C = this.codecTiers || (this.codecTiers = function(t, e, r, i) {
                        return t.slice(r, i + 1).reduce((function(t, r) {
                            if (!r.codecSet)
                                return t;
                            var i = r.audioGroups
                              , n = t[r.codecSet];
                            n || (t[r.codecSet] = n = {
                                minBitrate: 1 / 0,
                                minHeight: 1 / 0,
                                minFramerate: 1 / 0,
                                maxScore: 0,
                                videoRanges: {
                                    SDR: 0
                                },
                                channels: {
                                    2: 0
                                },
                                hasDefaultAudio: !i,
                                fragmentError: 0
                            }),
                            n.minBitrate = Math.min(n.minBitrate, r.bitrate);
                            var a = Math.min(r.height, r.width);
                            return n.minHeight = Math.min(n.minHeight, a),
                            n.minFramerate = Math.min(n.minFramerate, r.frameRate),
                            n.maxScore = Math.max(n.maxScore, r.score),
                            n.fragmentError += r.fragmentError,
                            n.videoRanges[r.videoRange] = (n.videoRanges[r.videoRange] || 0) + 1,
                            i &amp;&amp; i.forEach((function(t) {
                                if (t) {
                                    var r = e.groups[t];
                                    r &amp;&amp; (n.hasDefaultAudio = n.hasDefaultAudio || e.hasDefaultAudio ? r.hasDefault : r.hasAutoSelect || !e.hasDefaultAudio &amp;&amp; !e.hasAutoSelectAudio,
                                    Object.keys(r.channels).forEach((function(t) {
                                        n.channels[t] = (n.channels[t] || 0) + r.channels[t]
                                    }
                                    )))
                                }
                            }
                            )),
                            t
                        }
                        ), {})
                    }(v, I, e, r))
                      , _ = function(t, e, r, i, n) {
                        for (var a = Object.keys(t), s = null == i ? void 0 : i.channels, o = null == i ? void 0 : i.audioCodec, l = s &amp;&amp; 2 === parseInt(s), u = !0, h = !1, d = 1 / 0, c = 1 / 0, f = 1 / 0, g = 0, v = [], m = Mr(e, n), p = m.preferHDR, E = m.allowedVideoRanges, T = function() {
                            var e = t[a[S]];
                            u = e.channels[2] &gt; 0,
                            d = Math.min(d, e.minHeight),
                            c = Math.min(c, e.minFramerate),
                            f = Math.min(f, e.minBitrate);
                            var r = E.filter((function(t) {
                                return e.videoRanges[t] &gt; 0
                            }
                            ));
                            r.length &gt; 0 &amp;&amp; (h = !0,
                            v = r)
                        }, S = a.length; S--; )
                            T();
                        d = y(d) ? d : 0,
                        c = y(c) ? c : 0;
                        var L = Math.max(1080, d)
                          , A = Math.max(30, c);
                        return f = y(f) ? f : r,
                        r = Math.max(f, r),
                        h || (e = void 0,
                        v = []),
                        {
                            codecSet: a.reduce((function(e, i) {
                                var n = t[i];
                                if (i === e)
                                    return e;
                                if (n.minBitrate &gt; r)
                                    return Or(i, &quot;min bitrate of &quot; + n.minBitrate + &quot; &gt; current estimate of &quot; + r),
                                    e;
                                if (!n.hasDefaultAudio)
                                    return Or(i, &quot;no renditions with default or auto-select sound found&quot;),
                                    e;
                                if (o &amp;&amp; i.indexOf(o.substring(0, 4)) % 5 != 0)
                                    return Or(i, &#39;audio codec preference &quot;&#39; + o + &#39;&quot; not found&#39;),
                                    e;
                                if (s &amp;&amp; !l) {
                                    if (!n.channels[s])
                                        return Or(i, &quot;no renditions with &quot; + s + &quot; channel sound found (channels options: &quot; + Object.keys(n.channels) + &quot;)&quot;),
                                        e
                                } else if ((!o || l) &amp;&amp; u &amp;&amp; 0 === n.channels[2])
                                    return Or(i, &quot;no renditions with stereo sound found&quot;),
                                    e;
                                return n.minHeight &gt; L ? (Or(i, &quot;min resolution of &quot; + n.minHeight + &quot; &gt; maximum of &quot; + L),
                                e) : n.minFramerate &gt; A ? (Or(i, &quot;min framerate of &quot; + n.minFramerate + &quot; &gt; maximum of &quot; + A),
                                e) : v.some((function(t) {
                                    return n.videoRanges[t] &gt; 0
                                }
                                )) ? n.maxScore &lt; g ? (Or(i, &quot;max score of &quot; + n.maxScore + &quot; &lt; selected max of &quot; + g),
                                e) : e &amp;&amp; (oe(i) &gt;= oe(e) || n.fragmentError &gt; t[e].fragmentError) ? e : (g = n.maxScore,
                                i) : (Or(i, &quot;no variants with VIDEO-RANGE of &quot; + JSON.stringify(v) + &quot; found&quot;),
                                e)
                            }
                            ), void 0),
                            videoRanges: v,
                            preferHDR: p,
                            minFramerate: c,
                            minBitrate: f
                        }
                    }(C, R, t, b, D)
                      , x = _.codecSet
                      , P = _.videoRanges
                      , F = _.minFramerate
                      , M = _.minBitrate
                      , O = _.preferHDR;
                    T = x,
                    R = O ? P[P.length - 1] : P[0],
                    k = F,
                    t = Math.max(t, M),
                    w.log(&quot;[abr] picked start tier &quot; + JSON.stringify(_))
                } else
                    T = null == S ? void 0 : S.codecSet,
                    R = null == S ? void 0 : S.videoRange;
                for (var N, U = f ? f.duration : c ? c.duration : 0, B = this.bwEstimator.getEstimateTTFB() / 1e3, G = [], K = function() {
                    var e, o = v[H], c = H &gt; d;
                    if (!o)
                        return 0;
                    if (E.useMediaCapabilities &amp;&amp; !o.supportedResult &amp;&amp; !o.supportedPromise) {
                        var g = navigator.mediaCapabilities;
                        &quot;function&quot; == typeof (null == g ? void 0 : g.decodingInfo) &amp;&amp; function(t, e, r, i, n, a) {
                            var s = t.audioCodec ? t.audioGroups : null
                              , o = null == a ? void 0 : a.audioCodec
                              , l = null == a ? void 0 : a.channels
                              , u = l ? parseInt(l) : o ? 1 / 0 : 2
                              , h = null;
                            if (null != s &amp;&amp; s.length)
                                try {
                                    h = 1 === s.length &amp;&amp; s[0] ? e.groups[s[0]].channels : s.reduce((function(t, r) {
                                        if (r) {
                                            var i = e.groups[r];
                                            if (!i)
                                                throw new Error(&quot;Audio track group &quot; + r + &quot; not found&quot;);
                                            Object.keys(i.channels).forEach((function(e) {
                                                t[e] = (t[e] || 0) + i.channels[e]
                                            }
                                            ))
                                        }
                                        return t
                                    }
                                    ), {
                                        2: 0
                                    })
                                } catch (t) {
                                    return !0
                                }
                            return void 0 !== t.videoCodec &amp;&amp; (t.width &gt; 1920 &amp;&amp; t.height &gt; 1088 || t.height &gt; 1920 &amp;&amp; t.width &gt; 1088 || t.frameRate &gt; Math.max(i, 30) || &quot;SDR&quot; !== t.videoRange &amp;&amp; t.videoRange !== r || t.bitrate &gt; Math.max(n, 8e6)) || !!h &amp;&amp; y(u) &amp;&amp; Object.keys(h).some((function(t) {
                                return parseInt(t) &gt; u
                            }
                            ))
                        }(o, I, R, k, t, b) ? (o.supportedPromise = Fr(o, I, g),
                        o.supportedPromise.then((function(t) {
                            if (l.hls) {
                                o.supportedResult = t;
                                var e = l.hls.levels
                                  , r = e.indexOf(o);
                                t.error ? w.warn(&#39;[abr] MediaCapabilities decodingInfo error: &quot;&#39; + t.error + &#39;&quot; for level &#39; + r + &quot; &quot; + JSON.stringify(t)) : t.supported || (w.warn(&quot;[abr] Unsupported MediaCapabilities decodingInfo result for level &quot; + r + &quot; &quot; + JSON.stringify(t)),
                                r &gt; -1 &amp;&amp; e.length &gt; 1 &amp;&amp; (w.log(&quot;[abr] Removing unsupported level &quot; + r),
                                l.hls.removeLevel(r)))
                            }
                        }
                        ))) : o.supportedResult = xr
                    }
                    if (T &amp;&amp; o.codecSet !== T || R &amp;&amp; o.videoRange !== R || c &amp;&amp; k &gt; o.frameRate || !c &amp;&amp; k &gt; 0 &amp;&amp; k &lt; o.frameRate || o.supportedResult &amp;&amp; (null == (e = o.supportedResult.decodingInfoResults) || !e[0].smooth))
                        return G.push(H),
                        0;
                    var m, D = o.details, C = (f ? null == D ? void 0 : D.partTarget : null == D ? void 0 : D.averagetargetduration) || U;
                    m = c ? s * t : a * t;
                    var _ = U &amp;&amp; i &gt;= 2 * U &amp;&amp; 0 === n ? v[H].averageBitrate : v[H].maxBitrate
                      , x = l.getTimeToLoadFrag(B, m, _ * C, void 0 === D);
                    if (m &gt;= _ &amp;&amp; (H === h || 0 === o.loadError &amp;&amp; 0 === o.fragmentError) &amp;&amp; (x &lt;= B || !y(x) || L &amp;&amp; !l.bitrateTestDelay || x &lt; u)) {
                        var P = l.forcedAutoLevel;
                        return H === p || -1 !== P &amp;&amp; P === p || (G.length &amp;&amp; w.trace(&quot;[abr] Skipped level(s) &quot; + G.join(&quot;,&quot;) + &quot; of &quot; + r + &#39; max with CODECS and VIDEO-RANGE:&quot;&#39; + v[G[0]].codecs + &#39;&quot; &#39; + v[G[0]].videoRange + &#39;; not compatible with &quot;&#39; + S.codecs + &#39;&quot; &#39; + R),
                        w.info(&quot;[abr] switch candidate:&quot; + d + &quot;-&gt;&quot; + H + &quot; adjustedbw(&quot; + Math.round(m) + &quot;)-bitrate=&quot; + Math.round(m - _) + &quot; ttfb:&quot; + B.toFixed(1) + &quot; avgDuration:&quot; + C.toFixed(1) + &quot; maxFetchDuration:&quot; + u.toFixed(1) + &quot; fetchDuration:&quot; + x.toFixed(1) + &quot; firstSelection:&quot; + A + &quot; codecSet:&quot; + T + &quot; videoRange:&quot; + R + &quot; hls.loadLevel:&quot; + p)),
                        A &amp;&amp; (l.firstSelection = H),
                        {
                            v: H
                        }
                    }
                }, H = r; H &gt;= e; H--)
                    if (0 !== (N = K()) &amp;&amp; N)
                        return N.v;
                return -1
            }
            ,
            s(t, [{
                key: &quot;firstAutoLevel&quot;,
                get: function() {
                    var t = this.hls
                      , e = t.maxAutoLevel
                      , r = t.minAutoLevel
                      , i = this.getBwEstimate()
                      , n = this.hls.config.maxStarvationDelay
                      , a = this.findBestLevel(i, r, e, 0, n, 1, 1);
                    if (a &gt; -1)
                        return a;
                    var s = this.hls.firstLevel
                      , o = Math.min(Math.max(s, r), e);
                    return w.warn(&quot;[abr] Could not find best starting auto level. Defaulting to first in playlist &quot; + s + &quot; clamped to &quot; + o),
                    o
                }
            }, {
                key: &quot;forcedAutoLevel&quot;,
                get: function() {
                    return this.nextAutoLevelKey ? -1 : this._nextAutoLevel
                }
            }, {
                key: &quot;nextAutoLevel&quot;,
                get: function() {
                    var t = this.forcedAutoLevel
                      , e = this.bwEstimator.canEstimate()
                      , r = this.lastLoadedFragLevel &gt; -1;
                    if (!(-1 === t || e &amp;&amp; r &amp;&amp; this.nextAutoLevelKey !== this.getAutoLevelKey()))
                        return t;
                    var i = e &amp;&amp; r ? this.getNextABRAutoLevel() : this.firstAutoLevel;
                    if (-1 !== t) {
                        var n = this.hls.levels;
                        if (n.length &gt; Math.max(t, i) &amp;&amp; n[t].loadError &lt;= n[i].loadError)
                            return t
                    }
                    return this._nextAutoLevel = i,
                    this.nextAutoLevelKey = this.getAutoLevelKey(),
                    i
                },
                set: function(t) {
                    var e = this.hls
                      , r = e.maxAutoLevel
                      , i = e.minAutoLevel
                      , n = Math.min(Math.max(t, i), r);
                    this._nextAutoLevel !== n &amp;&amp; (this.nextAutoLevelKey = &quot;&quot;,
                    this._nextAutoLevel = n)
                }
            }]),
            t
        }()
          , Hr = function() {
            function t() {
                this._boundTick = void 0,
                this._tickTimer = null,
                this._tickInterval = null,
                this._tickCallCount = 0,
                this._boundTick = this.tick.bind(this)
            }
            var e = t.prototype;
            return e.destroy = function() {
                this.onHandlerDestroying(),
                this.onHandlerDestroyed()
            }
            ,
            e.onHandlerDestroying = function() {
                this.clearNextTick(),
                this.clearInterval()
            }
            ,
            e.onHandlerDestroyed = function() {}
            ,
            e.hasInterval = function() {
                return !!this._tickInterval
            }
            ,
            e.hasNextTick = function() {
                return !!this._tickTimer
            }
            ,
            e.setInterval = function(t) {
                return !this._tickInterval &amp;&amp; (this._tickCallCount = 0,
                this._tickInterval = self.setInterval(this._boundTick, t),
                !0)
            }
            ,
            e.clearInterval = function() {
                return !!this._tickInterval &amp;&amp; (self.clearInterval(this._tickInterval),
                this._tickInterval = null,
                !0)
            }
            ,
            e.clearNextTick = function() {
                return !!this._tickTimer &amp;&amp; (self.clearTimeout(this._tickTimer),
                this._tickTimer = null,
                !0)
            }
            ,
            e.tick = function() {
                this._tickCallCount++,
                1 === this._tickCallCount &amp;&amp; (this.doTick(),
                this._tickCallCount &gt; 1 &amp;&amp; this.tickImmediate(),
                this._tickCallCount = 0)
            }
            ,
            e.tickImmediate = function() {
                this.clearNextTick(),
                this._tickTimer = self.setTimeout(this._boundTick, 0)
            }
            ,
            e.doTick = function() {}
            ,
            t
        }()
          , Vr = &quot;NOT_LOADED&quot;
          , Yr = &quot;APPENDING&quot;
          , Wr = &quot;PARTIAL&quot;
          , jr = &quot;OK&quot;
          , qr = function() {
            function t(t) {
                this.activePartLists = Object.create(null),
                this.endListFragments = Object.create(null),
                this.fragments = Object.create(null),
                this.timeRanges = Object.create(null),
                this.bufferPadding = .2,
                this.hls = void 0,
                this.hasGaps = !1,
                this.hls = t,
                this._registerListeners()
            }
            var e = t.prototype;
            return e._registerListeners = function() {
                var t = this.hls;
                t.on(S.BUFFER_APPENDED, this.onBufferAppended, this),
                t.on(S.FRAG_BUFFERED, this.onFragBuffered, this),
                t.on(S.FRAG_LOADED, this.onFragLoaded, this)
            }
            ,
            e._unregisterListeners = function() {
                var t = this.hls;
                t.off(S.BUFFER_APPENDED, this.onBufferAppended, this),
                t.off(S.FRAG_BUFFERED, this.onFragBuffered, this),
                t.off(S.FRAG_LOADED, this.onFragLoaded, this)
            }
            ,
            e.destroy = function() {
                this._unregisterListeners(),
                this.fragments = this.activePartLists = this.endListFragments = this.timeRanges = null
            }
            ,
            e.getAppendedFrag = function(t, e) {
                var r = this.activePartLists[e];
                if (r)
                    for (var i = r.length; i--; ) {
                        var n = r[i];
                        if (!n)
                            break;
                        var a = n.end;
                        if (n.start &lt;= t &amp;&amp; null !== a &amp;&amp; t &lt;= a)
                            return n
                    }
                return this.getBufferedFrag(t, e)
            }
            ,
            e.getBufferedFrag = function(t, e) {
                for (var r = this.fragments, i = Object.keys(r), n = i.length; n--; ) {
                    var a = r[i[n]];
                    if ((null == a ? void 0 : a.body.type) === e &amp;&amp; a.buffered) {
                        var s = a.body;
                        if (s.start &lt;= t &amp;&amp; t &lt;= s.end)
                            return s
                    }
                }
                return null
            }
            ,
            e.detectEvictedFragments = function(t, e, r, i) {
                var n = this;
                this.timeRanges &amp;&amp; (this.timeRanges[t] = e);
                var a = (null == i ? void 0 : i.fragment.sn) || -1;
                Object.keys(this.fragments).forEach((function(i) {
                    var s = n.fragments[i];
                    if (s &amp;&amp; !(a &gt;= s.body.sn))
                        if (s.buffered || s.loaded) {
                            var o = s.range[t];
                            o &amp;&amp; o.time.some((function(t) {
                                var r = !n.isTimeBuffered(t.startPTS, t.endPTS, e);
                                return r &amp;&amp; n.removeFragment(s.body),
                                r
                            }
                            ))
                        } else
                            s.body.type === r &amp;&amp; n.removeFragment(s.body)
                }
                ))
            }
            ,
            e.detectPartialFragments = function(t) {
                var e = this
                  , r = this.timeRanges
                  , i = t.frag
                  , n = t.part;
                if (r &amp;&amp; &quot;initSegment&quot; !== i.sn) {
                    var a = zr(i)
                      , s = this.fragments[a];
                    if (!(!s || s.buffered &amp;&amp; i.gap)) {
                        var o = !i.relurl;
                        Object.keys(r).forEach((function(t) {
                            var a = i.elementaryStreams[t];
                            if (a) {
                                var l = r[t]
                                  , u = o || !0 === a.partial;
                                s.range[t] = e.getBufferedTimes(i, n, u, l)
                            }
                        }
                        )),
                        s.loaded = null,
                        Object.keys(s.range).length ? (s.buffered = !0,
                        (s.body.endList = i.endList || s.body.endList) &amp;&amp; (this.endListFragments[s.body.type] = s),
                        Xr(s) || this.removeParts(i.sn - 1, i.type)) : this.removeFragment(s.body)
                    }
                }
            }
            ,
            e.removeParts = function(t, e) {
                var r = this.activePartLists[e];
                r &amp;&amp; (this.activePartLists[e] = r.filter((function(e) {
                    return e.fragment.sn &gt;= t
                }
                )))
            }
            ,
            e.fragBuffered = function(t, e) {
                var r = zr(t)
                  , i = this.fragments[r];
                !i &amp;&amp; e &amp;&amp; (i = this.fragments[r] = {
                    body: t,
                    appendedPTS: null,
                    loaded: null,
                    buffered: !1,
                    range: Object.create(null)
                },
                t.gap &amp;&amp; (this.hasGaps = !0)),
                i &amp;&amp; (i.loaded = null,
                i.buffered = !0)
            }
            ,
            e.getBufferedTimes = function(t, e, r, i) {
                for (var n = {
                    time: [],
                    partial: r
                }, a = t.start, s = t.end, o = t.minEndPTS || s, l = t.maxStartPTS || a, u = 0; u &lt; i.length; u++) {
                    var h = i.start(u) - this.bufferPadding
                      , d = i.end(u) + this.bufferPadding;
                    if (l &gt;= h &amp;&amp; o &lt;= d) {
                        n.time.push({
                            startPTS: Math.max(a, i.start(u)),
                            endPTS: Math.min(s, i.end(u))
                        });
                        break
                    }
                    if (a &lt; d &amp;&amp; s &gt; h) {
                        var c = Math.max(a, i.start(u))
                          , f = Math.min(s, i.end(u));
                        f &gt; c &amp;&amp; (n.partial = !0,
                        n.time.push({
                            startPTS: c,
                            endPTS: f
                        }))
                    } else if (s &lt;= h)
                        break
                }
                return n
            }
            ,
            e.getPartialFragment = function(t) {
                var e, r, i, n = null, a = 0, s = this.bufferPadding, o = this.fragments;
                return Object.keys(o).forEach((function(l) {
                    var u = o[l];
                    u &amp;&amp; Xr(u) &amp;&amp; (r = u.body.start - s,
                    i = u.body.end + s,
                    t &gt;= r &amp;&amp; t &lt;= i &amp;&amp; (e = Math.min(t - r, i - t),
                    a &lt;= e &amp;&amp; (n = u.body,
                    a = e)))
                }
                )),
                n
            }
            ,
            e.isEndListAppended = function(t) {
                var e = this.endListFragments[t];
                return void 0 !== e &amp;&amp; (e.buffered || Xr(e))
            }
            ,
            e.getState = function(t) {
                var e = zr(t)
                  , r = this.fragments[e];
                return r ? r.buffered ? Xr(r) ? Wr : jr : Yr : Vr
            }
            ,
            e.isTimeBuffered = function(t, e, r) {
                for (var i, n, a = 0; a &lt; r.length; a++) {
                    if (i = r.start(a) - this.bufferPadding,
                    n = r.end(a) + this.bufferPadding,
                    t &gt;= i &amp;&amp; e &lt;= n)
                        return !0;
                    if (e &lt;= i)
                        return !1
                }
                return !1
            }
            ,
            e.onFragLoaded = function(t, e) {
                var r = e.frag
                  , i = e.part;
                if (&quot;initSegment&quot; !== r.sn &amp;&amp; !r.bitrateTest) {
                    var n = i ? null : e
                      , a = zr(r);
                    this.fragments[a] = {
                        body: r,
                        appendedPTS: null,
                        loaded: n,
                        buffered: !1,
                        range: Object.create(null)
                    }
                }
            }
            ,
            e.onBufferAppended = function(t, e) {
                var r = this
                  , i = e.frag
                  , n = e.part
                  , a = e.timeRanges;
                if (&quot;initSegment&quot; !== i.sn) {
                    var s = i.type;
                    if (n) {
                        var o = this.activePartLists[s];
                        o || (this.activePartLists[s] = o = []),
                        o.push(n)
                    }
                    this.timeRanges = a,
                    Object.keys(a).forEach((function(t) {
                        var e = a[t];
                        r.detectEvictedFragments(t, e, s, n)
                    }
                    ))
                }
            }
            ,
            e.onFragBuffered = function(t, e) {
                this.detectPartialFragments(e)
            }
            ,
            e.hasFragment = function(t) {
                var e = zr(t);
                return !!this.fragments[e]
            }
            ,
            e.hasParts = function(t) {
                var e;
                return !(null == (e = this.activePartLists[t]) || !e.length)
            }
            ,
            e.removeFragmentsInRange = function(t, e, r, i, n) {
                var a = this;
                i &amp;&amp; !this.hasGaps || Object.keys(this.fragments).forEach((function(s) {
                    var o = a.fragments[s];
                    if (o) {
                        var l = o.body;
                        l.type !== r || i &amp;&amp; !l.gap || l.start &lt; e &amp;&amp; l.end &gt; t &amp;&amp; (o.buffered || n) &amp;&amp; a.removeFragment(l)
                    }
                }
                ))
            }
            ,
            e.removeFragment = function(t) {
                var e = zr(t);
                t.stats.loaded = 0,
                t.clearElementaryStreamInfo();
                var r = this.activePartLists[t.type];
                if (r) {
                    var i = t.sn;
                    this.activePartLists[t.type] = r.filter((function(t) {
                        return t.fragment.sn !== i
                    }
                    ))
                }
                delete this.fragments[e],
                t.endList &amp;&amp; delete this.endListFragments[t.type]
            }
            ,
            e.removeAllFragments = function() {
                this.fragments = Object.create(null),
                this.endListFragments = Object.create(null),
                this.activePartLists = Object.create(null),
                this.hasGaps = !1
            }
            ,
            t
        }();
        function Xr(t) {
            var e, r, i;
            return t.buffered &amp;&amp; (t.body.gap || (null == (e = t.range.video) ? void 0 : e.partial) || (null == (r = t.range.audio) ? void 0 : r.partial) || (null == (i = t.range.audiovideo) ? void 0 : i.partial))
        }
        function zr(t) {
            return t.type + &quot;_&quot; + t.level + &quot;_&quot; + t.sn
        }
        var Qr = {
            length: 0,
            start: function() {
                return 0
            },
            end: function() {
                return 0
            }
        }
          , Jr = function() {
            function t() {}
            return t.isBuffered = function(e, r) {
                try {
                    if (e)
                        for (var i = t.getBuffered(e), n = 0; n &lt; i.length; n++)
                            if (r &gt;= i.start(n) &amp;&amp; r &lt;= i.end(n))
                                return !0
                } catch (t) {}
                return !1
            }
            ,
            t.bufferInfo = function(e, r, i) {
                try {
                    if (e) {
                        var n, a = t.getBuffered(e), s = [];
                        for (n = 0; n &lt; a.length; n++)
                            s.push({
                                start: a.start(n),
                                end: a.end(n)
                            });
                        return this.bufferedInfo(s, r, i)
                    }
                } catch (t) {}
                return {
                    len: 0,
                    start: r,
                    end: r,
                    nextStart: void 0
                }
            }
            ,
            t.bufferedInfo = function(t, e, r) {
                e = Math.max(0, e),
                t.sort((function(t, e) {
                    var r = t.start - e.start;
                    return r || e.end - t.end
                }
                ));
                var i = [];
                if (r)
                    for (var n = 0; n &lt; t.length; n++) {
                        var a = i.length;
                        if (a) {
                            var s = i[a - 1].end;
                            t[n].start - s &lt; r ? t[n].end &gt; s &amp;&amp; (i[a - 1].end = t[n].end) : i.push(t[n])
                        } else
                            i.push(t[n])
                    }
                else
                    i = t;
                for (var o, l = 0, u = e, h = e, d = 0; d &lt; i.length; d++) {
                    var c = i[d].start
                      , f = i[d].end;
                    if (e + r &gt;= c &amp;&amp; e &lt; f)
                        u = c,
                        l = (h = f) - e;
                    else if (e + r &lt; c) {
                        o = c;
                        break
                    }
                }
                return {
                    len: l,
                    start: u || 0,
                    end: h || 0,
                    nextStart: o
                }
            }
            ,
            t.getBuffered = function(t) {
                try {
                    return t.buffered
                } catch (t) {
                    return w.log(&quot;failed to get media.buffered&quot;, t),
                    Qr
                }
            }
            ,
            t
        }()
          , $r = function(t, e, r, i, n, a) {
            void 0 === i &amp;&amp; (i = 0),
            void 0 === n &amp;&amp; (n = -1),
            void 0 === a &amp;&amp; (a = !1),
            this.level = void 0,
            this.sn = void 0,
            this.part = void 0,
            this.id = void 0,
            this.size = void 0,
            this.partial = void 0,
            this.transmuxing = {
                start: 0,
                executeStart: 0,
                executeEnd: 0,
                end: 0
            },
            this.buffering = {
                audio: {
                    start: 0,
                    executeStart: 0,
                    executeEnd: 0,
                    end: 0
                },
                video: {
                    start: 0,
                    executeStart: 0,
                    executeEnd: 0,
                    end: 0
                },
                audiovideo: {
                    start: 0,
                    executeStart: 0,
                    executeEnd: 0,
                    end: 0
                }
            },
            this.level = t,
            this.sn = e,
            this.id = r,
            this.size = i,
            this.part = n,
            this.partial = a
        };
        function Zr(t, e) {
            for (var r = 0, i = t.length; r &lt; i; r++) {
                var n;
                if ((null == (n = t[r]) ? void 0 : n.cc) === e)
                    return t[r]
            }
            return null
        }
        function ti(t, e) {
            if (t) {
                var r = t.start + e;
                t.start = t.startPTS = r,
                t.endPTS = r + t.duration
            }
        }
        function ei(t, e) {
            for (var r = e.fragments, i = 0, n = r.length; i &lt; n; i++)
                ti(r[i], t);
            e.fragmentHint &amp;&amp; ti(e.fragmentHint, t),
            e.alignedSliding = !0
        }
        function ri(t, e, r) {
            e &amp;&amp; (function(t, e, r) {
                if (function(t, e, r) {
                    return !(!e || !(r.endCC &gt; r.startCC || t &amp;&amp; t.cc &lt; r.startCC))
                }(t, r, e)) {
                    var i = function(t, e) {
                        var r = t.fragments
                          , i = e.fragments;
                        if (i.length &amp;&amp; r.length) {
                            var n = Zr(r, i[0].cc);
                            if (n &amp;&amp; (!n || n.startPTS))
                                return n;
                            w.log(&quot;No frag in previous level to align on&quot;)
                        } else
                            w.log(&quot;No fragments to align&quot;)
                    }(r, e);
                    i &amp;&amp; y(i.start) &amp;&amp; (w.log(&quot;Adjusting PTS using last level due to CC increase within current level &quot; + e.url),
                    ei(i.start, e))
                }
            }(t, r, e),
            !r.alignedSliding &amp;&amp; e &amp;&amp; ii(r, e),
            r.alignedSliding || !e || r.skippedSegments || or(e, r))
        }
        function ii(t, e) {
            if (t.hasProgramDateTime &amp;&amp; e.hasProgramDateTime) {
                var r = t.fragments
                  , i = e.fragments;
                if (r.length &amp;&amp; i.length) {
                    var n, a, s = Math.min(e.endCC, t.endCC);
                    e.startCC &lt; s &amp;&amp; t.startCC &lt; s &amp;&amp; (n = Zr(i, s),
                    a = Zr(r, s)),
                    n &amp;&amp; a || (a = Zr(r, (n = i[Math.floor(i.length / 2)]).cc) || r[Math.floor(r.length / 2)]);
                    var o = n.programDateTime
                      , l = a.programDateTime;
                    o &amp;&amp; l &amp;&amp; ei((l - o) / 1e3 - (a.start - n.start), t)
                }
            }
        }
        var ni = Math.pow(2, 17)
          , ai = function() {
            function t(t) {
                this.config = void 0,
                this.loader = null,
                this.partLoadTimeout = -1,
                this.config = t
            }
            var e = t.prototype;
            return e.destroy = function() {
                this.loader &amp;&amp; (this.loader.destroy(),
                this.loader = null)
            }
            ,
            e.abort = function() {
                this.loader &amp;&amp; this.loader.abort()
            }
            ,
            e.load = function(t, e) {
                var r = this
                  , n = t.url;
                if (!n)
                    return Promise.reject(new li({
                        type: L.NETWORK_ERROR,
                        details: A.FRAG_LOAD_ERROR,
                        fatal: !1,
                        frag: t,
                        error: new Error(&quot;Fragment does not have a &quot; + (n ? &quot;part list&quot; : &quot;url&quot;)),
                        networkDetails: null
                    }));
                this.abort();
                var a = this.config
                  , s = a.fLoader
                  , o = a.loader;
                return new Promise((function(l, u) {
                    if (r.loader &amp;&amp; r.loader.destroy(),
                    t.gap) {
                        if (t.tagList.some((function(t) {
                            return &quot;GAP&quot; === t[0]
                        }
                        )))
                            return void u(oi(t));
                        t.gap = !1
                    }
                    var h = r.loader = t.loader = s ? new s(a) : new o(a)
                      , d = si(t)
                      , c = vr(a.fragLoadPolicy.default)
                      , f = {
                        loadPolicy: c,
                        timeout: c.maxLoadTimeMs,
                        maxRetry: 0,
                        retryDelay: 0,
                        maxRetryDelay: 0,
                        highWaterMark: &quot;initSegment&quot; === t.sn ? 1 / 0 : ni
                    };
                    t.stats = h.stats,
                    h.load(d, f, {
                        onSuccess: function(e, i, n, a) {
                            r.resetLoader(t, h);
                            var s = e.data;
                            n.resetIV &amp;&amp; t.decryptdata &amp;&amp; (t.decryptdata.iv = new Uint8Array(s.slice(0, 16)),
                            s = s.slice(16)),
                            l({
                                frag: t,
                                part: null,
                                payload: s,
                                networkDetails: a
                            })
                        },
                        onError: function(e, a, s, o) {
                            r.resetLoader(t, h),
                            u(new li({
                                type: L.NETWORK_ERROR,
                                details: A.FRAG_LOAD_ERROR,
                                fatal: !1,
                                frag: t,
                                response: i({
                                    url: n,
                                    data: void 0
                                }, e),
                                error: new Error(&quot;HTTP Error &quot; + e.code + &quot; &quot; + e.text),
                                networkDetails: s,
                                stats: o
                            }))
                        },
                        onAbort: function(e, i, n) {
                            r.resetLoader(t, h),
                            u(new li({
                                type: L.NETWORK_ERROR,
                                details: A.INTERNAL_ABORTED,
                                fatal: !1,
                                frag: t,
                                error: new Error(&quot;Aborted&quot;),
                                networkDetails: n,
                                stats: e
                            }))
                        },
                        onTimeout: function(e, i, n) {
                            r.resetLoader(t, h),
                            u(new li({
                                type: L.NETWORK_ERROR,
                                details: A.FRAG_LOAD_TIMEOUT,
                                fatal: !1,
                                frag: t,
                                error: new Error(&quot;Timeout after &quot; + f.timeout + &quot;ms&quot;),
                                networkDetails: n,
                                stats: e
                            }))
                        },
                        onProgress: function(r, i, n, a) {
                            e &amp;&amp; e({
                                frag: t,
                                part: null,
                                payload: n,
                                networkDetails: a
                            })
                        }
                    })
                }
                ))
            }
            ,
            e.loadPart = function(t, e, r) {
                var n = this;
                this.abort();
                var a = this.config
                  , s = a.fLoader
                  , o = a.loader;
                return new Promise((function(l, u) {
                    if (n.loader &amp;&amp; n.loader.destroy(),
                    t.gap || e.gap)
                        u(oi(t, e));
                    else {
                        var h = n.loader = t.loader = s ? new s(a) : new o(a)
                          , d = si(t, e)
                          , c = vr(a.fragLoadPolicy.default)
                          , f = {
                            loadPolicy: c,
                            timeout: c.maxLoadTimeMs,
                            maxRetry: 0,
                            retryDelay: 0,
                            maxRetryDelay: 0,
                            highWaterMark: ni
                        };
                        e.stats = h.stats,
                        h.load(d, f, {
                            onSuccess: function(i, a, s, o) {
                                n.resetLoader(t, h),
                                n.updateStatsFromPart(t, e);
                                var u = {
                                    frag: t,
                                    part: e,
                                    payload: i.data,
                                    networkDetails: o
                                };
                                r(u),
                                l(u)
                            },
                            onError: function(r, a, s, o) {
                                n.resetLoader(t, h),
                                u(new li({
                                    type: L.NETWORK_ERROR,
                                    details: A.FRAG_LOAD_ERROR,
                                    fatal: !1,
                                    frag: t,
                                    part: e,
                                    response: i({
                                        url: d.url,
                                        data: void 0
                                    }, r),
                                    error: new Error(&quot;HTTP Error &quot; + r.code + &quot; &quot; + r.text),
                                    networkDetails: s,
                                    stats: o
                                }))
                            },
                            onAbort: function(r, i, a) {
                                t.stats.aborted = e.stats.aborted,
                                n.resetLoader(t, h),
                                u(new li({
                                    type: L.NETWORK_ERROR,
                                    details: A.INTERNAL_ABORTED,
                                    fatal: !1,
                                    frag: t,
                                    part: e,
                                    error: new Error(&quot;Aborted&quot;),
                                    networkDetails: a,
                                    stats: r
                                }))
                            },
                            onTimeout: function(r, i, a) {
                                n.resetLoader(t, h),
                                u(new li({
                                    type: L.NETWORK_ERROR,
                                    details: A.FRAG_LOAD_TIMEOUT,
                                    fatal: !1,
                                    frag: t,
                                    part: e,
                                    error: new Error(&quot;Timeout after &quot; + f.timeout + &quot;ms&quot;),
                                    networkDetails: a,
                                    stats: r
                                }))
                            }
                        })
                    }
                }
                ))
            }
            ,
            e.updateStatsFromPart = function(t, e) {
                var r = t.stats
                  , i = e.stats
                  , n = i.total;
                if (r.loaded += i.loaded,
                n) {
                    var a = Math.round(t.duration / e.duration)
                      , s = Math.min(Math.round(r.loaded / n), a)
                      , o = (a - s) * Math.round(r.loaded / s);
                    r.total = r.loaded + o
                } else
                    r.total = Math.max(r.loaded, r.total);
                var l = r.loading
                  , u = i.loading;
                l.start ? l.first += u.first - u.start : (l.start = u.start,
                l.first = u.first),
                l.end = u.end
            }
            ,
            e.resetLoader = function(t, e) {
                t.loader = null,
                this.loader === e &amp;&amp; (self.clearTimeout(this.partLoadTimeout),
                this.loader = null),
                e.destroy()
            }
            ,
            t
        }();
        function si(t, e) {
            void 0 === e &amp;&amp; (e = null);
            var r = e || t
              , i = {
                frag: t,
                part: e,
                responseType: &quot;arraybuffer&quot;,
                url: r.url,
                headers: {},
                rangeStart: 0,
                rangeEnd: 0
            }
              , n = r.byteRangeStartOffset
              , a = r.byteRangeEndOffset;
            if (y(n) &amp;&amp; y(a)) {
                var s, o = n, l = a;
                if (&quot;initSegment&quot; === t.sn &amp;&amp; &quot;AES-128&quot; === (null == (s = t.decryptdata) ? void 0 : s.method)) {
                    var u = a - n;
                    u % 16 &amp;&amp; (l = a + (16 - u % 16)),
                    0 !== n &amp;&amp; (i.resetIV = !0,
                    o = n - 16)
                }
                i.rangeStart = o,
                i.rangeEnd = l
            }
            return i
        }
        function oi(t, e) {
            var r = new Error(&quot;GAP &quot; + (t.gap ? &quot;tag&quot; : &quot;attribute&quot;) + &quot; found&quot;)
              , i = {
                type: L.MEDIA_ERROR,
                details: A.FRAG_GAP,
                fatal: !1,
                frag: t,
                error: r,
                networkDetails: null
            };
            return e &amp;&amp; (i.part = e),
            (e || t).stats.aborted = !0,
            new li(i)
        }
        var li = function(t) {
            function e(e) {
                var r;
                return (r = t.call(this, e.error.message) || this).data = void 0,
                r.data = e,
                r
            }
            return l(e, t),
            e
        }(c(Error))
          , ui = function() {
            function t(t, e) {
                this.subtle = void 0,
                this.aesIV = void 0,
                this.subtle = t,
                this.aesIV = e
            }
            return t.prototype.decrypt = function(t, e) {
                return this.subtle.decrypt({
                    name: &quot;AES-CBC&quot;,
                    iv: this.aesIV
                }, e, t)
            }
            ,
            t
        }()
          , hi = function() {
            function t(t, e) {
                this.subtle = void 0,
                this.key = void 0,
                this.subtle = t,
                this.key = e
            }
            return t.prototype.expandKey = function() {
                return this.subtle.importKey(&quot;raw&quot;, this.key, {
                    name: &quot;AES-CBC&quot;
                }, !1, [&quot;encrypt&quot;, &quot;decrypt&quot;])
            }
            ,
            t
        }()
          , di = function() {
            function t() {
                this.rcon = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54],
                this.subMix = [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)],
                this.invSubMix = [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)],
                this.sBox = new Uint32Array(256),
                this.invSBox = new Uint32Array(256),
                this.key = new Uint32Array(0),
                this.ksRows = 0,
                this.keySize = 0,
                this.keySchedule = void 0,
                this.invKeySchedule = void 0,
                this.initTable()
            }
            var e = t.prototype;
            return e.uint8ArrayToUint32Array_ = function(t) {
                for (var e = new DataView(t), r = new Uint32Array(4), i = 0; i &lt; 4; i++)
                    r[i] = e.getUint32(4 * i);
                return r
            }
            ,
            e.initTable = function() {
                var t = this.sBox
                  , e = this.invSBox
                  , r = this.subMix
                  , i = r[0]
                  , n = r[1]
                  , a = r[2]
                  , s = r[3]
                  , o = this.invSubMix
                  , l = o[0]
                  , u = o[1]
                  , h = o[2]
                  , d = o[3]
                  , c = new Uint32Array(256)
                  , f = 0
                  , g = 0
                  , v = 0;
                for (v = 0; v &lt; 256; v++)
                    c[v] = v &lt; 128 ? v &lt;&lt; 1 : v &lt;&lt; 1 ^ 283;
                for (v = 0; v &lt; 256; v++) {
                    var m = g ^ g &lt;&lt; 1 ^ g &lt;&lt; 2 ^ g &lt;&lt; 3 ^ g &lt;&lt; 4;
                    m = m &gt;&gt;&gt; 8 ^ 255 &amp; m ^ 99,
                    t[f] = m,
                    e[m] = f;
                    var p = c[f]
                      , y = c[p]
                      , E = c[y]
                      , T = 257 * c[m] ^ 16843008 * m;
                    i[f] = T &lt;&lt; 24 | T &gt;&gt;&gt; 8,
                    n[f] = T &lt;&lt; 16 | T &gt;&gt;&gt; 16,
                    a[f] = T &lt;&lt; 8 | T &gt;&gt;&gt; 24,
                    s[f] = T,
                    T = 16843009 * E ^ 65537 * y ^ 257 * p ^ 16843008 * f,
                    l[m] = T &lt;&lt; 24 | T &gt;&gt;&gt; 8,
                    u[m] = T &lt;&lt; 16 | T &gt;&gt;&gt; 16,
                    h[m] = T &lt;&lt; 8 | T &gt;&gt;&gt; 24,
                    d[m] = T,
                    f ? (f = p ^ c[c[c[E ^ p]]],
                    g ^= c[c[g]]) : f = g = 1
                }
            }
            ,
            e.expandKey = function(t) {
                for (var e = this.uint8ArrayToUint32Array_(t), r = !0, i = 0; i &lt; e.length &amp;&amp; r; )
                    r = e[i] === this.key[i],
                    i++;
                if (!r) {
                    this.key = e;
                    var n = this.keySize = e.length;
                    if (4 !== n &amp;&amp; 6 !== n &amp;&amp; 8 !== n)
                        throw new Error(&quot;Invalid aes key size=&quot; + n);
                    var a, s, o, l, u = this.ksRows = 4 * (n + 6 + 1), h = this.keySchedule = new Uint32Array(u), d = this.invKeySchedule = new Uint32Array(u), c = this.sBox, f = this.rcon, g = this.invSubMix, v = g[0], m = g[1], p = g[2], y = g[3];
                    for (a = 0; a &lt; u; a++)
                        a &lt; n ? o = h[a] = e[a] : (l = o,
                        a % n == 0 ? (l = c[(l = l &lt;&lt; 8 | l &gt;&gt;&gt; 24) &gt;&gt;&gt; 24] &lt;&lt; 24 | c[l &gt;&gt;&gt; 16 &amp; 255] &lt;&lt; 16 | c[l &gt;&gt;&gt; 8 &amp; 255] &lt;&lt; 8 | c[255 &amp; l],
                        l ^= f[a / n | 0] &lt;&lt; 24) : n &gt; 6 &amp;&amp; a % n == 4 &amp;&amp; (l = c[l &gt;&gt;&gt; 24] &lt;&lt; 24 | c[l &gt;&gt;&gt; 16 &amp; 255] &lt;&lt; 16 | c[l &gt;&gt;&gt; 8 &amp; 255] &lt;&lt; 8 | c[255 &amp; l]),
                        h[a] = o = (h[a - n] ^ l) &gt;&gt;&gt; 0);
                    for (s = 0; s &lt; u; s++)
                        a = u - s,
                        l = 3 &amp; s ? h[a] : h[a - 4],
                        d[s] = s &lt; 4 || a &lt;= 4 ? l : v[c[l &gt;&gt;&gt; 24]] ^ m[c[l &gt;&gt;&gt; 16 &amp; 255]] ^ p[c[l &gt;&gt;&gt; 8 &amp; 255]] ^ y[c[255 &amp; l]],
                        d[s] = d[s] &gt;&gt;&gt; 0
                }
            }
            ,
            e.networkToHostOrderSwap = function(t) {
                return t &lt;&lt; 24 | (65280 &amp; t) &lt;&lt; 8 | (16711680 &amp; t) &gt;&gt; 8 | t &gt;&gt;&gt; 24
            }
            ,
            e.decrypt = function(t, e, r) {
                for (var i, n, a, s, o, l, u, h, d, c, f, g, v, m, p = this.keySize + 6, y = this.invKeySchedule, E = this.invSBox, T = this.invSubMix, S = T[0], L = T[1], A = T[2], R = T[3], k = this.uint8ArrayToUint32Array_(r), b = k[0], D = k[1], I = k[2], w = k[3], C = new Int32Array(t), _ = new Int32Array(C.length), x = this.networkToHostOrderSwap; e &lt; C.length; ) {
                    for (d = x(C[e]),
                    c = x(C[e + 1]),
                    f = x(C[e + 2]),
                    g = x(C[e + 3]),
                    o = d ^ y[0],
                    l = g ^ y[1],
                    u = f ^ y[2],
                    h = c ^ y[3],
                    v = 4,
                    m = 1; m &lt; p; m++)
                        i = S[o &gt;&gt;&gt; 24] ^ L[l &gt;&gt; 16 &amp; 255] ^ A[u &gt;&gt; 8 &amp; 255] ^ R[255 &amp; h] ^ y[v],
                        n = S[l &gt;&gt;&gt; 24] ^ L[u &gt;&gt; 16 &amp; 255] ^ A[h &gt;&gt; 8 &amp; 255] ^ R[255 &amp; o] ^ y[v + 1],
                        a = S[u &gt;&gt;&gt; 24] ^ L[h &gt;&gt; 16 &amp; 255] ^ A[o &gt;&gt; 8 &amp; 255] ^ R[255 &amp; l] ^ y[v + 2],
                        s = S[h &gt;&gt;&gt; 24] ^ L[o &gt;&gt; 16 &amp; 255] ^ A[l &gt;&gt; 8 &amp; 255] ^ R[255 &amp; u] ^ y[v + 3],
                        o = i,
                        l = n,
                        u = a,
                        h = s,
                        v += 4;
                    i = E[o &gt;&gt;&gt; 24] &lt;&lt; 24 ^ E[l &gt;&gt; 16 &amp; 255] &lt;&lt; 16 ^ E[u &gt;&gt; 8 &amp; 255] &lt;&lt; 8 ^ E[255 &amp; h] ^ y[v],
                    n = E[l &gt;&gt;&gt; 24] &lt;&lt; 24 ^ E[u &gt;&gt; 16 &amp; 255] &lt;&lt; 16 ^ E[h &gt;&gt; 8 &amp; 255] &lt;&lt; 8 ^ E[255 &amp; o] ^ y[v + 1],
                    a = E[u &gt;&gt;&gt; 24] &lt;&lt; 24 ^ E[h &gt;&gt; 16 &amp; 255] &lt;&lt; 16 ^ E[o &gt;&gt; 8 &amp; 255] &lt;&lt; 8 ^ E[255 &amp; l] ^ y[v + 2],
                    s = E[h &gt;&gt;&gt; 24] &lt;&lt; 24 ^ E[o &gt;&gt; 16 &amp; 255] &lt;&lt; 16 ^ E[l &gt;&gt; 8 &amp; 255] &lt;&lt; 8 ^ E[255 &amp; u] ^ y[v + 3],
                    _[e] = x(i ^ b),
                    _[e + 1] = x(s ^ D),
                    _[e + 2] = x(a ^ I),
                    _[e + 3] = x(n ^ w),
                    b = d,
                    D = c,
                    I = f,
                    w = g,
                    e += 4
                }
                return _.buffer
            }
            ,
            t
        }()
          , ci = function() {
            function t(t, e) {
                var r = (void 0 === e ? {} : e).removePKCS7Padding
                  , i = void 0 === r || r;
                if (this.logEnabled = !0,
                this.removePKCS7Padding = void 0,
                this.subtle = null,
                this.softwareDecrypter = null,
                this.key = null,
                this.fastAesKey = null,
                this.remainderData = null,
                this.currentIV = null,
                this.currentResult = null,
                this.useSoftware = void 0,
                this.useSoftware = t.enableSoftwareAES,
                this.removePKCS7Padding = i,
                i)
                    try {
                        var n = self.crypto;
                        n &amp;&amp; (this.subtle = n.subtle || n.webkitSubtle)
                    } catch (t) {}
                this.useSoftware = !this.subtle
            }
            var e = t.prototype;
            return e.destroy = function() {
                this.subtle = null,
                this.softwareDecrypter = null,
                this.key = null,
                this.fastAesKey = null,
                this.remainderData = null,
                this.currentIV = null,
                this.currentResult = null
            }
            ,
            e.isSync = function() {
                return this.useSoftware
            }
            ,
            e.flush = function() {
                var t = this.currentResult
                  , e = this.remainderData;
                if (!t || e)
                    return this.reset(),
                    null;
                var r, i, n, a = new Uint8Array(t);
                return this.reset(),
                this.removePKCS7Padding ? (i = (r = a).byteLength,
                (n = i &amp;&amp; new DataView(r.buffer).getUint8(i - 1)) ? nt(r, 0, i - n) : r) : a
            }
            ,
            e.reset = function() {
                this.currentResult = null,
                this.currentIV = null,
                this.remainderData = null,
                this.softwareDecrypter &amp;&amp; (this.softwareDecrypter = null)
            }
            ,
            e.decrypt = function(t, e, r) {
                var i = this;
                return this.useSoftware ? new Promise((function(n, a) {
                    i.softwareDecrypt(new Uint8Array(t), e, r);
                    var s = i.flush();
                    s ? n(s.buffer) : a(new Error(&quot;[softwareDecrypt] Failed to decrypt data&quot;))
                }
                )) : this.webCryptoDecrypt(new Uint8Array(t), e, r)
            }
            ,
            e.softwareDecrypt = function(t, e, r) {
                var i = this.currentIV
                  , n = this.currentResult
                  , a = this.remainderData;
                this.logOnce(&quot;JS AES decrypt&quot;),
                a &amp;&amp; (t = Kt(a, t),
                this.remainderData = null);
                var s = this.getValidChunk(t);
                if (!s.length)
                    return null;
                i &amp;&amp; (r = i);
                var o = this.softwareDecrypter;
                o || (o = this.softwareDecrypter = new di),
                o.expandKey(e);
                var l = n;
                return this.currentResult = o.decrypt(s.buffer, 0, r),
                this.currentIV = nt(s, -16).buffer,
                l || null
            }
            ,
            e.webCryptoDecrypt = function(t, e, r) {
                var i = this;
                if (this.key !== e || !this.fastAesKey) {
                    if (!this.subtle)
                        return Promise.resolve(this.onWebCryptoError(t, e, r));
                    this.key = e,
                    this.fastAesKey = new hi(this.subtle,e)
                }
                return this.fastAesKey.expandKey().then((function(e) {
                    return i.subtle ? (i.logOnce(&quot;WebCrypto AES decrypt&quot;),
                    new ui(i.subtle,new Uint8Array(r)).decrypt(t.buffer, e)) : Promise.reject(new Error(&quot;web crypto not initialized&quot;))
                }
                )).catch((function(n) {
                    return w.warn(&quot;[decrypter]: WebCrypto Error, disable WebCrypto API, &quot; + n.name + &quot;: &quot; + n.message),
                    i.onWebCryptoError(t, e, r)
                }
                ))
            }
            ,
            e.onWebCryptoError = function(t, e, r) {
                this.useSoftware = !0,
                this.logEnabled = !0,
                this.softwareDecrypt(t, e, r);
                var i = this.flush();
                if (i)
                    return i.buffer;
                throw new Error(&quot;WebCrypto and softwareDecrypt: failed to decrypt data&quot;)
            }
            ,
            e.getValidChunk = function(t) {
                var e = t
                  , r = t.length - t.length % 16;
                return r !== t.length &amp;&amp; (e = nt(t, 0, r),
                this.remainderData = nt(t, r)),
                e
            }
            ,
            e.logOnce = function(t) {
                this.logEnabled &amp;&amp; (w.log(&quot;[decrypter]: &quot; + t),
                this.logEnabled = !1)
            }
            ,
            t
        }()
          , fi = function(t) {
            for (var e = &quot;&quot;, r = t.length, i = 0; i &lt; r; i++)
                e += &quot;[&quot; + t.start(i).toFixed(3) + &quot;-&quot; + t.end(i).toFixed(3) + &quot;]&quot;;
            return e
        }
          , gi = &quot;STOPPED&quot;
          , vi = &quot;IDLE&quot;
          , mi = &quot;KEY_LOADING&quot;
          , pi = &quot;FRAG_LOADING&quot;
          , yi = &quot;FRAG_LOADING_WAITING_RETRY&quot;
          , Ei = &quot;WAITING_TRACK&quot;
          , Ti = &quot;PARSING&quot;
          , Si = &quot;PARSED&quot;
          , Li = &quot;ENDED&quot;
          , Ai = &quot;ERROR&quot;
          , Ri = &quot;WAITING_INIT_PTS&quot;
          , ki = &quot;WAITING_LEVEL&quot;
          , bi = function(t) {
            function e(e, r, i, n, a) {
                var s;
                return (s = t.call(this) || this).hls = void 0,
                s.fragPrevious = null,
                s.fragCurrent = null,
                s.fragmentTracker = void 0,
                s.transmuxer = null,
                s._state = gi,
                s.playlistType = void 0,
                s.media = null,
                s.mediaBuffer = null,
                s.config = void 0,
                s.bitrateTest = !1,
                s.lastCurrentTime = 0,
                s.nextLoadPosition = 0,
                s.startPosition = 0,
                s.startTimeOffset = null,
                s.loadedmetadata = !1,
                s.retryDate = 0,
                s.levels = null,
                s.fragmentLoader = void 0,
                s.keyLoader = void 0,
                s.levelLastLoaded = null,
                s.startFragRequested = !1,
                s.decrypter = void 0,
                s.initPTS = [],
                s.onvseeking = null,
                s.onvended = null,
                s.logPrefix = &quot;&quot;,
                s.log = void 0,
                s.warn = void 0,
                s.playlistType = a,
                s.logPrefix = n,
                s.log = w.log.bind(w, n + &quot;:&quot;),
                s.warn = w.warn.bind(w, n + &quot;:&quot;),
                s.hls = e,
                s.fragmentLoader = new ai(e.config),
                s.keyLoader = i,
                s.fragmentTracker = r,
                s.config = e.config,
                s.decrypter = new ci(e.config),
                e.on(S.MANIFEST_LOADED, s.onManifestLoaded, function(t) {
                    if (void 0 === t)
                        throw new ReferenceError(&quot;this hasn&#39;t been initialised - super() hasn&#39;t been called&quot;);
                    return t
                }(s)),
                s
            }
            l(e, t);
            var r = e.prototype;
            return r.doTick = function() {
                this.onTickEnd()
            }
            ,
            r.onTickEnd = function() {}
            ,
            r.startLoad = function(t) {}
            ,
            r.stopLoad = function() {
                this.fragmentLoader.abort(),
                this.keyLoader.abort(this.playlistType);
                var t = this.fragCurrent;
                null != t &amp;&amp; t.loader &amp;&amp; (t.abortRequests(),
                this.fragmentTracker.removeFragment(t)),
                this.resetTransmuxer(),
                this.fragCurrent = null,
                this.fragPrevious = null,
                this.clearInterval(),
                this.clearNextTick(),
                this.state = gi
            }
            ,
            r._streamEnded = function(t, e) {
                if (e.live || t.nextStart || !t.end || !this.media)
                    return !1;
                var r = e.partList;
                if (null != r &amp;&amp; r.length) {
                    var i = r[r.length - 1];
                    return Jr.isBuffered(this.media, i.start + i.duration / 2)
                }
                var n = e.fragments[e.fragments.length - 1].type;
                return this.fragmentTracker.isEndListAppended(n)
            }
            ,
            r.getLevelDetails = function() {
                var t;
                if (this.levels &amp;&amp; null !== this.levelLastLoaded)
                    return null == (t = this.levelLastLoaded) ? void 0 : t.details
            }
            ,
            r.onMediaAttached = function(t, e) {
                var r = this.media = this.mediaBuffer = e.media;
                this.onvseeking = this.onMediaSeeking.bind(this),
                this.onvended = this.onMediaEnded.bind(this),
                r.addEventListener(&quot;seeking&quot;, this.onvseeking),
                r.addEventListener(&quot;ended&quot;, this.onvended);
                var i = this.config;
                this.levels &amp;&amp; i.autoStartLoad &amp;&amp; this.state === gi &amp;&amp; this.startLoad(i.startPosition)
            }
            ,
            r.onMediaDetaching = function() {
                var t = this.media;
                null != t &amp;&amp; t.ended &amp;&amp; (this.log(&quot;MSE detaching and video ended, reset startPosition&quot;),
                this.startPosition = this.lastCurrentTime = 0),
                t &amp;&amp; this.onvseeking &amp;&amp; this.onvended &amp;&amp; (t.removeEventListener(&quot;seeking&quot;, this.onvseeking),
                t.removeEventListener(&quot;ended&quot;, this.onvended),
                this.onvseeking = this.onvended = null),
                this.keyLoader &amp;&amp; this.keyLoader.detach(),
                this.media = this.mediaBuffer = null,
                this.loadedmetadata = !1,
                this.fragmentTracker.removeAllFragments(),
                this.stopLoad()
            }
            ,
            r.onMediaSeeking = function() {
                var t = this.config
                  , e = this.fragCurrent
                  , r = this.media
                  , i = this.mediaBuffer
                  , n = this.state
                  , a = r ? r.currentTime : 0
                  , s = Jr.bufferInfo(i || r, a, t.maxBufferHole);
                if (this.log(&quot;media seeking to &quot; + (y(a) ? a.toFixed(3) : a) + &quot;, state: &quot; + n),
                this.state === Li)
                    this.resetLoadingState();
                else if (e) {
                    var o = t.maxFragLookUpTolerance
                      , l = e.start - o
                      , u = e.start + e.duration + o;
                    if (!s.len || u &lt; s.start || l &gt; s.end) {
                        var h = a &gt; u;
                        (a &lt; l || h) &amp;&amp; (h &amp;&amp; e.loader &amp;&amp; (this.log(&quot;seeking outside of buffer while fragment load in progress, cancel fragment load&quot;),
                        e.abortRequests(),
                        this.resetLoadingState()),
                        this.fragPrevious = null)
                    }
                }
                r &amp;&amp; (this.fragmentTracker.removeFragmentsInRange(a, 1 / 0, this.playlistType, !0),
                this.lastCurrentTime = a),
                this.loadedmetadata || s.len || (this.nextLoadPosition = this.startPosition = a),
                this.tickImmediate()
            }
            ,
            r.onMediaEnded = function() {
                this.startPosition = this.lastCurrentTime = 0
            }
            ,
            r.onManifestLoaded = function(t, e) {
                this.startTimeOffset = e.startTimeOffset,
                this.initPTS = []
            }
            ,
            r.onHandlerDestroying = function() {
                this.hls.off(S.MANIFEST_LOADED, this.onManifestLoaded, this),
                this.stopLoad(),
                t.prototype.onHandlerDestroying.call(this),
                this.hls = null
            }
            ,
            r.onHandlerDestroyed = function() {
                this.state = gi,
                this.fragmentLoader &amp;&amp; this.fragmentLoader.destroy(),
                this.keyLoader &amp;&amp; this.keyLoader.destroy(),
                this.decrypter &amp;&amp; this.decrypter.destroy(),
                this.hls = this.log = this.warn = this.decrypter = this.keyLoader = this.fragmentLoader = this.fragmentTracker = null,
                t.prototype.onHandlerDestroyed.call(this)
            }
            ,
            r.loadFragment = function(t, e, r) {
                this._loadFragForPlayback(t, e, r)
            }
            ,
            r._loadFragForPlayback = function(t, e, r) {
                var i = this;
                this._doFragLoad(t, e, r, (function(e) {
                    if (i.fragContextChanged(t))
                        return i.warn(&quot;Fragment &quot; + t.sn + (e.part ? &quot; p: &quot; + e.part.index : &quot;&quot;) + &quot; of level &quot; + t.level + &quot; was dropped during download.&quot;),
                        void i.fragmentTracker.removeFragment(t);
                    t.stats.chunkCount++,
                    i._handleFragmentLoadProgress(e)
                }
                )).then((function(e) {
                    if (e) {
                        var r = i.state;
                        i.fragContextChanged(t) ? (r === pi || !i.fragCurrent &amp;&amp; r === Ti) &amp;&amp; (i.fragmentTracker.removeFragment(t),
                        i.state = vi) : (&quot;payload&quot;in e &amp;&amp; (i.log(&quot;Loaded fragment &quot; + t.sn + &quot; of level &quot; + t.level),
                        i.hls.trigger(S.FRAG_LOADED, e)),
                        i._handleFragmentLoadComplete(e))
                    }
                }
                )).catch((function(e) {
                    i.state !== gi &amp;&amp; i.state !== Ai &amp;&amp; (i.warn(&quot;Frag error: &quot; + ((null == e ? void 0 : e.message) || e)),
                    i.resetFragmentLoading(t))
                }
                ))
            }
            ,
            r.clearTrackerIfNeeded = function(t) {
                var e, r = this.fragmentTracker;
                if (r.getState(t) === Yr) {
                    var i = t.type
                      , n = this.getFwdBufferInfo(this.mediaBuffer, i)
                      , a = Math.max(t.duration, n ? n.len : this.config.maxBufferLength)
                      , s = this.backtrackFragment;
                    (1 == (s ? t.sn - s.sn : 0) || this.reduceMaxBufferLength(a)) &amp;&amp; r.removeFragment(t)
                } else
                    0 === (null == (e = this.mediaBuffer) ? void 0 : e.buffered.length) ? r.removeAllFragments() : r.hasParts(t.type) &amp;&amp; (r.detectPartialFragments({
                        frag: t,
                        part: null,
                        stats: t.stats,
                        id: t.type
                    }),
                    r.getState(t) === Wr &amp;&amp; r.removeFragment(t))
            }
            ,
            r.checkLiveUpdate = function(t) {
                if (t.updated &amp;&amp; !t.live) {
                    var e = t.fragments[t.fragments.length - 1];
                    this.fragmentTracker.detectPartialFragments({
                        frag: e,
                        part: null,
                        stats: e.stats,
                        id: e.type
                    })
                }
                t.fragments[0] || (t.deltaUpdateFailed = !0)
            }
            ,
            r.flushMainBuffer = function(t, e, r) {
                if (void 0 === r &amp;&amp; (r = null),
                t - e) {
                    var i = {
                        startOffset: t,
                        endOffset: e,
                        type: r
                    };
                    this.hls.trigger(S.BUFFER_FLUSHING, i)
                }
            }
            ,
            r._loadInitSegment = function(t, e) {
                var r = this;
                this._doFragLoad(t, e).then((function(e) {
                    if (!e || r.fragContextChanged(t) || !r.levels)
                        throw new Error(&quot;init load aborted&quot;);
                    return e
                }
                )).then((function(e) {
                    var i = r.hls
                      , n = e.payload
                      , a = t.decryptdata;
                    if (n &amp;&amp; n.byteLength &gt; 0 &amp;&amp; null != a &amp;&amp; a.key &amp;&amp; a.iv &amp;&amp; &quot;AES-128&quot; === a.method) {
                        var s = self.performance.now();
                        return r.decrypter.decrypt(new Uint8Array(n), a.key.buffer, a.iv.buffer).catch((function(e) {
                            throw i.trigger(S.ERROR, {
                                type: L.MEDIA_ERROR,
                                details: A.FRAG_DECRYPT_ERROR,
                                fatal: !1,
                                error: e,
                                reason: e.message,
                                frag: t
                            }),
                            e
                        }
                        )).then((function(n) {
                            var a = self.performance.now();
                            return i.trigger(S.FRAG_DECRYPTED, {
                                frag: t,
                                payload: n,
                                stats: {
                                    tstart: s,
                                    tdecrypt: a
                                }
                            }),
                            e.payload = n,
                            r.completeInitSegmentLoad(e)
                        }
                        ))
                    }
                    return r.completeInitSegmentLoad(e)
                }
                )).catch((function(e) {
                    r.state !== gi &amp;&amp; r.state !== Ai &amp;&amp; (r.warn(e),
                    r.resetFragmentLoading(t))
                }
                ))
            }
            ,
            r.completeInitSegmentLoad = function(t) {
                if (!this.levels)
                    throw new Error(&quot;init load aborted, missing levels&quot;);
                var e = t.frag.stats;
                this.state = vi,
                t.frag.data = new Uint8Array(t.payload),
                e.parsing.start = e.buffering.start = self.performance.now(),
                e.parsing.end = e.buffering.end = self.performance.now(),
                this.tick()
            }
            ,
            r.fragContextChanged = function(t) {
                var e = this.fragCurrent;
                return !t || !e || t.sn !== e.sn || t.level !== e.level
            }
            ,
            r.fragBufferedComplete = function(t, e) {
                var r, i, n, a, s = this.mediaBuffer ? this.mediaBuffer : this.media;
                if (this.log(&quot;Buffered &quot; + t.type + &quot; sn: &quot; + t.sn + (e ? &quot; part: &quot; + e.index : &quot;&quot;) + &quot; of &quot; + (this.playlistType === we ? &quot;level&quot; : &quot;track&quot;) + &quot; &quot; + t.level + &quot; (frag:[&quot; + (null != (r = t.startPTS) ? r : NaN).toFixed(3) + &quot;-&quot; + (null != (i = t.endPTS) ? i : NaN).toFixed(3) + &quot;] &gt; buffer:&quot; + (s ? fi(Jr.getBuffered(s)) : &quot;(detached)&quot;) + &quot;)&quot;),
                &quot;initSegment&quot; !== t.sn) {
                    var o;
                    if (t.type !== _e) {
                        var l = t.elementaryStreams;
                        if (!Object.keys(l).some((function(t) {
                            return !!l[t]
                        }
                        )))
                            return void (this.state = vi)
                    }
                    var u = null == (o = this.levels) ? void 0 : o[t.level];
                    null != u &amp;&amp; u.fragmentError &amp;&amp; (this.log(&quot;Resetting level fragment error count of &quot; + u.fragmentError + &quot; on frag buffered&quot;),
                    u.fragmentError = 0)
                }
                this.state = vi,
                s &amp;&amp; (!this.loadedmetadata &amp;&amp; t.type == we &amp;&amp; s.buffered.length &amp;&amp; (null == (n = this.fragCurrent) ? void 0 : n.sn) === (null == (a = this.fragPrevious) ? void 0 : a.sn) &amp;&amp; (this.loadedmetadata = !0,
                this.seekToStartPos()),
                this.tick())
            }
            ,
            r.seekToStartPos = function() {}
            ,
            r._handleFragmentLoadComplete = function(t) {
                var e = this.transmuxer;
                if (e) {
                    var r = t.frag
                      , i = t.part
                      , n = t.partsLoaded
                      , a = !n || 0 === n.length || n.some((function(t) {
                        return !t
                    }
                    ))
                      , s = new $r(r.level,r.sn,r.stats.chunkCount + 1,0,i ? i.index : -1,!a);
                    e.flush(s)
                }
            }
            ,
            r._handleFragmentLoadProgress = function(t) {}
            ,
            r._doFragLoad = function(t, e, r, i) {
                var n, a = this;
                void 0 === r &amp;&amp; (r = null);
                var s = null == e ? void 0 : e.details;
                if (!this.levels || !s)
                    throw new Error(&quot;frag load aborted, missing level&quot; + (s ? &quot;&quot; : &quot; detail&quot;) + &quot;s&quot;);
                var o = null;
                if (!t.encrypted || null != (n = t.decryptdata) &amp;&amp; n.key ? !t.encrypted &amp;&amp; s.encryptedFragments.length &amp;&amp; this.keyLoader.loadClear(t, s.encryptedFragments) : (this.log(&quot;Loading key for &quot; + t.sn + &quot; of [&quot; + s.startSN + &quot;-&quot; + s.endSN + &quot;], &quot; + (&quot;[stream-controller]&quot; === this.logPrefix ? &quot;level&quot; : &quot;track&quot;) + &quot; &quot; + t.level),
                this.state = mi,
                this.fragCurrent = t,
                o = this.keyLoader.load(t).then((function(t) {
                    if (!a.fragContextChanged(t.frag))
                        return a.hls.trigger(S.KEY_LOADED, t),
                        a.state === mi &amp;&amp; (a.state = vi),
                        t
                }
                )),
                this.hls.trigger(S.KEY_LOADING, {
                    frag: t
                }),
                null === this.fragCurrent &amp;&amp; (o = Promise.reject(new Error(&quot;frag load aborted, context changed in KEY_LOADING&quot;)))),
                r = Math.max(t.start, r || 0),
                this.config.lowLatencyMode &amp;&amp; &quot;initSegment&quot; !== t.sn) {
                    var l = s.partList;
                    if (l &amp;&amp; i) {
                        r &gt; t.end &amp;&amp; s.fragmentHint &amp;&amp; (t = s.fragmentHint);
                        var u = this.getNextPart(l, t, r);
                        if (u &gt; -1) {
                            var h, d = l[u];
                            return this.log(&quot;Loading part sn: &quot; + t.sn + &quot; p: &quot; + d.index + &quot; cc: &quot; + t.cc + &quot; of playlist [&quot; + s.startSN + &quot;-&quot; + s.endSN + &quot;] parts [0-&quot; + u + &quot;-&quot; + (l.length - 1) + &quot;] &quot; + (&quot;[stream-controller]&quot; === this.logPrefix ? &quot;level&quot; : &quot;track&quot;) + &quot;: &quot; + t.level + &quot;, target: &quot; + parseFloat(r.toFixed(3))),
                            this.nextLoadPosition = d.start + d.duration,
                            this.state = pi,
                            h = o ? o.then((function(r) {
                                return !r || a.fragContextChanged(r.frag) ? null : a.doFragPartsLoad(t, d, e, i)
                            }
                            )).catch((function(t) {
                                return a.handleFragLoadError(t)
                            }
                            )) : this.doFragPartsLoad(t, d, e, i).catch((function(t) {
                                return a.handleFragLoadError(t)
                            }
                            )),
                            this.hls.trigger(S.FRAG_LOADING, {
                                frag: t,
                                part: d,
                                targetBufferTime: r
                            }),
                            null === this.fragCurrent ? Promise.reject(new Error(&quot;frag load aborted, context changed in FRAG_LOADING parts&quot;)) : h
                        }
                        if (!t.url || this.loadedEndOfParts(l, r))
                            return Promise.resolve(null)
                    }
                }
                this.log(&quot;Loading fragment &quot; + t.sn + &quot; cc: &quot; + t.cc + &quot; &quot; + (s ? &quot;of [&quot; + s.startSN + &quot;-&quot; + s.endSN + &quot;] &quot; : &quot;&quot;) + (&quot;[stream-controller]&quot; === this.logPrefix ? &quot;level&quot; : &quot;track&quot;) + &quot;: &quot; + t.level + &quot;, target: &quot; + parseFloat(r.toFixed(3))),
                y(t.sn) &amp;&amp; !this.bitrateTest &amp;&amp; (this.nextLoadPosition = t.start + t.duration),
                this.state = pi;
                var c, f = this.config.progressive;
                return c = f &amp;&amp; o ? o.then((function(e) {
                    return !e || a.fragContextChanged(null == e ? void 0 : e.frag) ? null : a.fragmentLoader.load(t, i)
                }
                )).catch((function(t) {
                    return a.handleFragLoadError(t)
                }
                )) : Promise.all([this.fragmentLoader.load(t, f ? i : void 0), o]).then((function(t) {
                    var e = t[0];
                    return !f &amp;&amp; e &amp;&amp; i &amp;&amp; i(e),
                    e
                }
                )).catch((function(t) {
                    return a.handleFragLoadError(t)
                }
                )),
                this.hls.trigger(S.FRAG_LOADING, {
                    frag: t,
                    targetBufferTime: r
                }),
                null === this.fragCurrent ? Promise.reject(new Error(&quot;frag load aborted, context changed in FRAG_LOADING&quot;)) : c
            }
            ,
            r.doFragPartsLoad = function(t, e, r, i) {
                var n = this;
                return new Promise((function(a, s) {
                    var o, l = [], u = null == (o = r.details) ? void 0 : o.partList;
                    !function e(o) {
                        n.fragmentLoader.loadPart(t, o, i).then((function(i) {
                            l[o.index] = i;
                            var s = i.part;
                            n.hls.trigger(S.FRAG_LOADED, i);
                            var h = ur(r, t.sn, o.index + 1) || hr(u, t.sn, o.index + 1);
                            if (!h)
                                return a({
                                    frag: t,
                                    part: s,
                                    partsLoaded: l
                                });
                            e(h)
                        }
                        )).catch(s)
                    }(e)
                }
                ))
            }
            ,
            r.handleFragLoadError = function(t) {
                if (&quot;data&quot;in t) {
                    var e = t.data;
                    t.data &amp;&amp; e.details === A.INTERNAL_ABORTED ? this.handleFragLoadAborted(e.frag, e.part) : this.hls.trigger(S.ERROR, e)
                } else
                    this.hls.trigger(S.ERROR, {
                        type: L.OTHER_ERROR,
                        details: A.INTERNAL_EXCEPTION,
                        err: t,
                        error: t,
                        fatal: !0
                    });
                return null
            }
            ,
            r._handleTransmuxerFlush = function(t) {
                var e = this.getCurrentContext(t);
                if (e &amp;&amp; this.state === Ti) {
                    var r = e.frag
                      , i = e.part
                      , n = e.level
                      , a = self.performance.now();
                    r.stats.parsing.end = a,
                    i &amp;&amp; (i.stats.parsing.end = a),
                    this.updateLevelTiming(r, i, n, t.partial)
                } else
                    this.fragCurrent || this.state === gi || this.state === Ai || (this.state = vi)
            }
            ,
            r.getCurrentContext = function(t) {
                var e = this.levels
                  , r = this.fragCurrent
                  , i = t.level
                  , n = t.sn
                  , a = t.part;
                if (null == e || !e[i])
                    return this.warn(&quot;Levels object was unset while buffering fragment &quot; + n + &quot; of level &quot; + i + &quot;. The current chunk will not be buffered.&quot;),
                    null;
                var s = e[i]
                  , o = a &gt; -1 ? ur(s, n, a) : null
                  , l = o ? o.fragment : function(t, e, r) {
                    if (null == t || !t.details)
                        return null;
                    var i = t.details
                      , n = i.fragments[e - i.startSN];
                    return n || ((n = i.fragmentHint) &amp;&amp; n.sn === e ? n : e &lt; i.startSN &amp;&amp; r &amp;&amp; r.sn === e ? r : null)
                }(s, n, r);
                return l ? (r &amp;&amp; r !== l &amp;&amp; (l.stats = r.stats),
                {
                    frag: l,
                    part: o,
                    level: s
                }) : null
            }
            ,
            r.bufferFragmentData = function(t, e, r, i, n) {
                var a;
                if (t &amp;&amp; this.state === Ti) {
                    var s = t.data1
                      , o = t.data2
                      , l = s;
                    if (s &amp;&amp; o &amp;&amp; (l = Kt(s, o)),
                    null != (a = l) &amp;&amp; a.length) {
                        var u = {
                            type: t.type,
                            frag: e,
                            part: r,
                            chunkMeta: i,
                            parent: e.type,
                            data: l
                        };
                        if (this.hls.trigger(S.BUFFER_APPENDING, u),
                        t.dropped &amp;&amp; t.independent &amp;&amp; !r) {
                            if (n)
                                return;
                            this.flushBufferGap(e)
                        }
                    }
                }
            }
            ,
            r.flushBufferGap = function(t) {
                var e = this.media;
                if (e)
                    if (Jr.isBuffered(e, e.currentTime)) {
                        var r = e.currentTime
                          , i = Jr.bufferInfo(e, r, 0)
                          , n = t.duration
                          , a = Math.min(2 * this.config.maxFragLookUpTolerance, .25 * n)
                          , s = Math.max(Math.min(t.start - a, i.end - a), r + a);
                        t.start - s &gt; a &amp;&amp; this.flushMainBuffer(s, t.start)
                    } else
                        this.flushMainBuffer(0, t.start)
            }
            ,
            r.getFwdBufferInfo = function(t, e) {
                var r = this.getLoadPosition();
                return y(r) ? this.getFwdBufferInfoAtPos(t, r, e) : null
            }
            ,
            r.getFwdBufferInfoAtPos = function(t, e, r) {
                var i = this.config.maxBufferHole
                  , n = Jr.bufferInfo(t, e, i);
                if (0 === n.len &amp;&amp; void 0 !== n.nextStart) {
                    var a = this.fragmentTracker.getBufferedFrag(e, r);
                    if (a &amp;&amp; n.nextStart &lt; a.end)
                        return Jr.bufferInfo(t, e, Math.max(n.nextStart, i))
                }
                return n
            }
            ,
            r.getMaxBufferLength = function(t) {
                var e, r = this.config;
                return e = t ? Math.max(8 * r.maxBufferSize / t, r.maxBufferLength) : r.maxBufferLength,
                Math.min(e, r.maxMaxBufferLength)
            }
            ,
            r.reduceMaxBufferLength = function(t) {
                var e = this.config
                  , r = t || e.maxBufferLength
                  , i = e.maxMaxBufferLength / 2;
                return i &gt;= r &amp;&amp; (e.maxMaxBufferLength = i,
                this.warn(&quot;Reduce max buffer length to &quot; + i + &quot;s&quot;),
                !0)
            }
            ,
            r.getAppendedFrag = function(t, e) {
                var r = this.fragmentTracker.getAppendedFrag(t, we);
                return r &amp;&amp; &quot;fragment&quot;in r ? r.fragment : r
            }
            ,
            r.getNextFragment = function(t, e) {
                var r = e.fragments
                  , i = r.length;
                if (!i)
                    return null;
                var n, a = this.config, s = r[0].start;
                if (e.live) {
                    var o = a.initialLiveManifestSize;
                    if (i &lt; o)
                        return this.warn(&quot;Not enough fragments to start playback (have: &quot; + i + &quot;, need: &quot; + o + &quot;)&quot;),
                        null;
                    (!e.PTSKnown &amp;&amp; !this.startFragRequested &amp;&amp; -1 === this.startPosition || t &lt; s) &amp;&amp; (n = this.getInitialLiveFragment(e, r),
                    this.startPosition = this.nextLoadPosition = n ? this.hls.liveSyncPosition || n.start : t)
                } else
                    t &lt;= s &amp;&amp; (n = r[0]);
                if (!n) {
                    var l = a.lowLatencyMode ? e.partEnd : e.fragmentEnd;
                    n = this.getFragmentAtPosition(t, l, e)
                }
                return this.mapToInitFragWhenRequired(n)
            }
            ,
            r.isLoopLoading = function(t, e) {
                var r = this.fragmentTracker.getState(t);
                return (r === jr || r === Wr &amp;&amp; !!t.gap) &amp;&amp; this.nextLoadPosition &gt; e
            }
            ,
            r.getNextFragmentLoopLoading = function(t, e, r, i, n) {
                var a = t.gap
                  , s = this.getNextFragment(this.nextLoadPosition, e);
                if (null === s)
                    return s;
                if (t = s,
                a &amp;&amp; t &amp;&amp; !t.gap &amp;&amp; r.nextStart) {
                    var o = this.getFwdBufferInfoAtPos(this.mediaBuffer ? this.mediaBuffer : this.media, r.nextStart, i);
                    if (null !== o &amp;&amp; r.len + o.len &gt;= n)
                        return this.log(&#39;buffer full after gaps in &quot;&#39; + i + &#39;&quot; playlist starting at sn: &#39; + t.sn),
                        null
                }
                return t
            }
            ,
            r.mapToInitFragWhenRequired = function(t) {
                return null == t || !t.initSegment || null != t &amp;&amp; t.initSegment.data || this.bitrateTest ? t : t.initSegment
            }
            ,
            r.getNextPart = function(t, e, r) {
                for (var i = -1, n = !1, a = !0, s = 0, o = t.length; s &lt; o; s++) {
                    var l = t[s];
                    if (a = a &amp;&amp; !l.independent,
                    i &gt; -1 &amp;&amp; r &lt; l.start)
                        break;
                    var u = l.loaded;
                    u ? i = -1 : (n || l.independent || a) &amp;&amp; l.fragment === e &amp;&amp; (i = s),
                    n = u
                }
                return i
            }
            ,
            r.loadedEndOfParts = function(t, e) {
                var r = t[t.length - 1];
                return r &amp;&amp; e &gt; r.start &amp;&amp; r.loaded
            }
            ,
            r.getInitialLiveFragment = function(t, e) {
                var r = this.fragPrevious
                  , i = null;
                if (r) {
                    if (t.hasProgramDateTime &amp;&amp; (this.log(&quot;Live playlist, switching playlist, load frag with same PDT: &quot; + r.programDateTime),
                    i = function(t, e, r) {
                        if (null === e || !Array.isArray(t) || !t.length || !y(e))
                            return null;
                        if (e &lt; (t[0].programDateTime || 0))
                            return null;
                        if (e &gt;= (t[t.length - 1].endProgramDateTime || 0))
                            return null;
                        r = r || 0;
                        for (var i = 0; i &lt; t.length; ++i) {
                            var n = t[i];
                            if (Tr(e, r, n))
                                return n
                        }
                        return null
                    }(e, r.endProgramDateTime, this.config.maxFragLookUpTolerance)),
                    !i) {
                        var n = r.sn + 1;
                        if (n &gt;= t.startSN &amp;&amp; n &lt;= t.endSN) {
                            var a = e[n - t.startSN];
                            r.cc === a.cc &amp;&amp; (i = a,
                            this.log(&quot;Live playlist, switching playlist, load frag with next SN: &quot; + i.sn))
                        }
                        i || (i = function(t, e) {
                            return pr(t, (function(t) {
                                return t.cc &lt; e ? 1 : t.cc &gt; e ? -1 : 0
                            }
                            ))
                        }(e, r.cc),
                        i &amp;&amp; this.log(&quot;Live playlist, switching playlist, load frag with same CC: &quot; + i.sn))
                    }
                } else {
                    var s = this.hls.liveSyncPosition;
                    null !== s &amp;&amp; (i = this.getFragmentAtPosition(s, this.bitrateTest ? t.fragmentEnd : t.edge, t))
                }
                return i
            }
            ,
            r.getFragmentAtPosition = function(t, e, r) {
                var i, n = this.config, a = this.fragPrevious, s = r.fragments, o = r.endSN, l = r.fragmentHint, u = n.maxFragLookUpTolerance, h = r.partList, d = !!(n.lowLatencyMode &amp;&amp; null != h &amp;&amp; h.length &amp;&amp; l);
                if (d &amp;&amp; l &amp;&amp; !this.bitrateTest &amp;&amp; (s = s.concat(l),
                o = l.sn),
                i = t &lt; e ? yr(a, s, t, t &gt; e - u ? 0 : u) : s[s.length - 1]) {
                    var c = i.sn - r.startSN
                      , f = this.fragmentTracker.getState(i);
                    if ((f === jr || f === Wr &amp;&amp; i.gap) &amp;&amp; (a = i),
                    a &amp;&amp; i.sn === a.sn &amp;&amp; (!d || h[0].fragment.sn &gt; i.sn) &amp;&amp; a &amp;&amp; i.level === a.level) {
                        var g = s[c + 1];
                        i = i.sn &lt; o &amp;&amp; this.fragmentTracker.getState(g) !== jr ? g : null
                    }
                }
                return i
            }
            ,
            r.synchronizeToLiveEdge = function(t) {
                var e = this.config
                  , r = this.media;
                if (r) {
                    var i = this.hls.liveSyncPosition
                      , n = r.currentTime
                      , a = t.fragments[0].start
                      , s = t.edge
                      , o = n &gt;= a - e.maxFragLookUpTolerance &amp;&amp; n &lt;= s;
                    if (null !== i &amp;&amp; r.duration &gt; i &amp;&amp; (n &lt; i || !o)) {
                        var l = void 0 !== e.liveMaxLatencyDuration ? e.liveMaxLatencyDuration : e.liveMaxLatencyDurationCount * t.targetduration;
                        (!o &amp;&amp; r.readyState &lt; 4 || n &lt; s - l) &amp;&amp; (this.loadedmetadata || (this.nextLoadPosition = i),
                        r.readyState &amp;&amp; (this.warn(&quot;Playback: &quot; + n.toFixed(3) + &quot; is located too far from the end of live sliding playlist: &quot; + s + &quot;, reset currentTime to : &quot; + i.toFixed(3)),
                        r.currentTime = i))
                    }
                }
            }
            ,
            r.alignPlaylists = function(t, e, r) {
                var i = t.fragments.length;
                if (!i)
                    return this.warn(&quot;No fragments in live playlist&quot;),
                    0;
                var n = t.fragments[0].start
                  , a = !e
                  , s = t.alignedSliding &amp;&amp; y(n);
                if (a || !s &amp;&amp; !n) {
                    var o = this.fragPrevious;
                    ri(o, r, t);
                    var l = t.fragments[0].start;
                    return this.log(&quot;Live playlist sliding: &quot; + l.toFixed(2) + &quot; start-sn: &quot; + (e ? e.startSN : &quot;na&quot;) + &quot;-&gt;&quot; + t.startSN + &quot; prev-sn: &quot; + (o ? o.sn : &quot;na&quot;) + &quot; fragments: &quot; + i),
                    l
                }
                return n
            }
            ,
            r.waitForCdnTuneIn = function(t) {
                return t.live &amp;&amp; t.canBlockReload &amp;&amp; t.partTarget &amp;&amp; t.tuneInGoal &gt; Math.max(t.partHoldBack, 3 * t.partTarget)
            }
            ,
            r.setStartPosition = function(t, e) {
                var r = this.startPosition;
                if (r &lt; e &amp;&amp; (r = -1),
                -1 === r || -1 === this.lastCurrentTime) {
                    var i = null !== this.startTimeOffset
                      , n = i ? this.startTimeOffset : t.startTimeOffset;
                    null !== n &amp;&amp; y(n) ? (r = e + n,
                    n &lt; 0 &amp;&amp; (r += t.totalduration),
                    r = Math.min(Math.max(e, r), e + t.totalduration),
                    this.log(&quot;Start time offset &quot; + n + &quot; found in &quot; + (i ? &quot;multivariant&quot; : &quot;media&quot;) + &quot; playlist, adjust startPosition to &quot; + r),
                    this.startPosition = r) : t.live ? r = this.hls.liveSyncPosition || e : this.startPosition = r = 0,
                    this.lastCurrentTime = r
                }
                this.nextLoadPosition = r
            }
            ,
            r.getLoadPosition = function() {
                var t = this.media
                  , e = 0;
                return this.loadedmetadata &amp;&amp; t ? e = t.currentTime : this.nextLoadPosition &amp;&amp; (e = this.nextLoadPosition),
                e
            }
            ,
            r.handleFragLoadAborted = function(t, e) {
                this.transmuxer &amp;&amp; &quot;initSegment&quot; !== t.sn &amp;&amp; t.stats.aborted &amp;&amp; (this.warn(&quot;Fragment &quot; + t.sn + (e ? &quot; part &quot; + e.index : &quot;&quot;) + &quot; of level &quot; + t.level + &quot; was aborted&quot;),
                this.resetFragmentLoading(t))
            }
            ,
            r.resetFragmentLoading = function(t) {
                this.fragCurrent &amp;&amp; (this.fragContextChanged(t) || this.state === yi) || (this.state = vi)
            }
            ,
            r.onFragmentOrKeyLoadError = function(t, e) {
                if (e.chunkMeta &amp;&amp; !e.frag) {
                    var r = this.getCurrentContext(e.chunkMeta);
                    r &amp;&amp; (e.frag = r.frag)
                }
                var i = e.frag;
                if (i &amp;&amp; i.type === t &amp;&amp; this.levels)
                    if (this.fragContextChanged(i)) {
                        var n;
                        this.warn(&quot;Frag load error must match current frag to retry &quot; + i.url + &quot; &gt; &quot; + (null == (n = this.fragCurrent) ? void 0 : n.url))
                    } else {
                        var a = e.details === A.FRAG_GAP;
                        a &amp;&amp; this.fragmentTracker.fragBuffered(i, !0);
                        var s = e.errorAction
                          , o = s || {}
                          , l = o.action
                          , u = o.retryCount
                          , h = void 0 === u ? 0 : u
                          , d = o.retryConfig;
                        if (s &amp;&amp; l === Rr &amp;&amp; d) {
                            this.resetStartWhenNotLoaded(this.levelLastLoaded);
                            var c = gr(d, h);
                            this.warn(&quot;Fragment &quot; + i.sn + &quot; of &quot; + t + &quot; &quot; + i.level + &quot; errored with &quot; + e.details + &quot;, retrying loading &quot; + (h + 1) + &quot;/&quot; + d.maxNumRetry + &quot; in &quot; + c + &quot;ms&quot;),
                            s.resolved = !0,
                            this.retryDate = self.performance.now() + c,
                            this.state = yi
                        } else if (d &amp;&amp; s) {
                            if (this.resetFragmentErrors(t),
                            !(h &lt; d.maxNumRetry))
                                return void w.warn(e.details + &quot; reached or exceeded max retry (&quot; + h + &quot;)&quot;);
                            a || l === Ar || (s.resolved = !0)
                        } else
                            (null == s ? void 0 : s.action) === Lr ? this.state = ki : this.state = Ai;
                        this.tickImmediate()
                    }
            }
            ,
            r.reduceLengthAndFlushBuffer = function(t) {
                if (this.state === Ti || this.state === Si) {
                    var e = t.parent
                      , r = this.getFwdBufferInfo(this.mediaBuffer, e)
                      , i = r &amp;&amp; r.len &gt; .5;
                    i &amp;&amp; this.reduceMaxBufferLength(r.len);
                    var n = !i;
                    return n &amp;&amp; this.warn(&quot;Buffer full error while media.currentTime is not buffered, flush &quot; + e + &quot; buffer&quot;),
                    t.frag &amp;&amp; (this.fragmentTracker.removeFragment(t.frag),
                    this.nextLoadPosition = t.frag.start),
                    this.resetLoadingState(),
                    n
                }
                return !1
            }
            ,
            r.resetFragmentErrors = function(t) {
                t === Ce &amp;&amp; (this.fragCurrent = null),
                this.loadedmetadata || (this.startFragRequested = !1),
                this.state !== gi &amp;&amp; (this.state = vi)
            }
            ,
            r.afterBufferFlushed = function(t, e, r) {
                if (t) {
                    var i = Jr.getBuffered(t);
                    this.fragmentTracker.detectEvictedFragments(e, i, r),
                    this.state === Li &amp;&amp; this.resetLoadingState()
                }
            }
            ,
            r.resetLoadingState = function() {
                this.log(&quot;Reset loading state&quot;),
                this.fragCurrent = null,
                this.fragPrevious = null,
                this.state = vi
            }
            ,
            r.resetStartWhenNotLoaded = function(t) {
                if (!this.loadedmetadata) {
                    this.startFragRequested = !1;
                    var e = t ? t.details : null;
                    null != e &amp;&amp; e.live ? (this.startPosition = -1,
                    this.setStartPosition(e, 0),
                    this.resetLoadingState()) : this.nextLoadPosition = this.startPosition
                }
            }
            ,
            r.resetWhenMissingContext = function(t) {
                this.warn(&quot;The loading context changed while buffering fragment &quot; + t.sn + &quot; of level &quot; + t.level + &quot;. This chunk will not be buffered.&quot;),
                this.removeUnbufferedFrags(),
                this.resetStartWhenNotLoaded(this.levelLastLoaded),
                this.resetLoadingState()
            }
            ,
            r.removeUnbufferedFrags = function(t) {
                void 0 === t &amp;&amp; (t = 0),
                this.fragmentTracker.removeFragmentsInRange(t, 1 / 0, this.playlistType, !1, !0)
            }
            ,
            r.updateLevelTiming = function(t, e, r, i) {
                var n, a = this, s = r.details;
                if (s) {
                    if (!Object.keys(t.elementaryStreams).reduce((function(e, n) {
                        var o = t.elementaryStreams[n];
                        if (o) {
                            var l = o.endPTS - o.startPTS;
                            if (l &lt;= 0)
                                return a.warn(&quot;Could not parse fragment &quot; + t.sn + &quot; &quot; + n + &quot; duration reliably (&quot; + l + &quot;)&quot;),
                                e || !1;
                            var u = i ? 0 : ar(s, t, o.startPTS, o.endPTS, o.startDTS, o.endDTS);
                            return a.hls.trigger(S.LEVEL_PTS_UPDATED, {
                                details: s,
                                level: r,
                                drift: u,
                                type: n,
                                frag: t,
                                start: o.startPTS,
                                end: o.endPTS
                            }),
                            !0
                        }
                        return e
                    }
                    ), !1) &amp;&amp; null === (null == (n = this.transmuxer) ? void 0 : n.error)) {
                        var o = new Error(&quot;Found no media in fragment &quot; + t.sn + &quot; of level &quot; + t.level + &quot; resetting transmuxer to fallback to playlist timing&quot;);
                        if (0 === r.fragmentError &amp;&amp; (r.fragmentError++,
                        t.gap = !0,
                        this.fragmentTracker.removeFragment(t),
                        this.fragmentTracker.fragBuffered(t, !0)),
                        this.warn(o.message),
                        this.hls.trigger(S.ERROR, {
                            type: L.MEDIA_ERROR,
                            details: A.FRAG_PARSING_ERROR,
                            fatal: !1,
                            error: o,
                            frag: t,
                            reason: &quot;Found no media in msn &quot; + t.sn + &#39; of level &quot;&#39; + r.url + &#39;&quot;&#39;
                        }),
                        !this.hls)
                            return;
                        this.resetTransmuxer()
                    }
                    this.state = Si,
                    this.hls.trigger(S.FRAG_PARSED, {
                        frag: t,
                        part: e
                    })
                } else
                    this.warn(&quot;level.details undefined&quot;)
            }
            ,
            r.resetTransmuxer = function() {
                this.transmuxer &amp;&amp; (this.transmuxer.destroy(),
                this.transmuxer = null)
            }
            ,
            r.recoverWorkerError = function(t) {
                &quot;demuxerWorker&quot; === t.event &amp;&amp; (this.fragmentTracker.removeAllFragments(),
                this.resetTransmuxer(),
                this.resetStartWhenNotLoaded(this.levelLastLoaded),
                this.resetLoadingState())
            }
            ,
            s(e, [{
                key: &quot;state&quot;,
                get: function() {
                    return this._state
                },
                set: function(t) {
                    var e = this._state;
                    e !== t &amp;&amp; (this._state = t,
                    this.log(e + &quot;-&gt;&quot; + t))
                }
            }]),
            e
        }(Hr)
          , Di = function() {
            function t() {
                this.chunks = [],
                this.dataLength = 0
            }
            var e = t.prototype;
            return e.push = function(t) {
                this.chunks.push(t),
                this.dataLength += t.length
            }
            ,
            e.flush = function() {
                var t, e = this.chunks, r = this.dataLength;
                return e.length ? (t = 1 === e.length ? e[0] : function(t, e) {
                    for (var r = new Uint8Array(e), i = 0, n = 0; n &lt; t.length; n++) {
                        var a = t[n];
                        r.set(a, i),
                        i += a.length
                    }
                    return r
                }(e, r),
                this.reset(),
                t) : new Uint8Array(0)
            }
            ,
            e.reset = function() {
                this.chunks.length = 0,
                this.dataLength = 0
            }
            ,
            t
        }();
        function Ii(t, e) {
            return void 0 === t &amp;&amp; (t = &quot;&quot;),
            void 0 === e &amp;&amp; (e = 9e4),
            {
                type: t,
                id: -1,
                pid: -1,
                inputTimeScale: e,
                sequenceNumber: -1,
                samples: [],
                dropped: 0
            }
        }
        var wi = function() {
            function t() {
                this._audioTrack = void 0,
                this._id3Track = void 0,
                this.frameIndex = 0,
                this.cachedData = null,
                this.basePTS = null,
                this.initPTS = null,
                this.lastPTS = null
            }
            var e = t.prototype;
            return e.resetInitSegment = function(t, e, r, i) {
                this._id3Track = {
                    type: &quot;id3&quot;,
                    id: 3,
                    pid: -1,
                    inputTimeScale: 9e4,
                    sequenceNumber: 0,
                    samples: [],
                    dropped: 0
                }
            }
            ,
            e.resetTimeStamp = function(t) {
                this.initPTS = t,
                this.resetContiguity()
            }
            ,
            e.resetContiguity = function() {
                this.basePTS = null,
                this.lastPTS = null,
                this.frameIndex = 0
            }
            ,
            e.canParse = function(t, e) {
                return !1
            }
            ,
            e.appendFrame = function(t, e, r) {}
            ,
            e.demux = function(t, e) {
                this.cachedData &amp;&amp; (t = Kt(this.cachedData, t),
                this.cachedData = null);
                var r, i = lt(t, 0), n = i ? i.length : 0, a = this._audioTrack, s = this._id3Track, o = i ? dt(i) : void 0, l = t.length;
                for ((null === this.basePTS || 0 === this.frameIndex &amp;&amp; y(o)) &amp;&amp; (this.basePTS = Ci(o, e, this.initPTS),
                this.lastPTS = this.basePTS),
                null === this.lastPTS &amp;&amp; (this.lastPTS = this.basePTS),
                i &amp;&amp; i.length &gt; 0 &amp;&amp; s.samples.push({
                    pts: this.lastPTS,
                    dts: this.lastPTS,
                    data: i,
                    type: Ge,
                    duration: Number.POSITIVE_INFINITY
                }); n &lt; l; ) {
                    if (this.canParse(t, n)) {
                        var u = this.appendFrame(a, t, n);
                        u ? (this.frameIndex++,
                        this.lastPTS = u.sample.pts,
                        r = n += u.length) : n = l
                    } else
                        ht(t, n) ? (i = lt(t, n),
                        s.samples.push({
                            pts: this.lastPTS,
                            dts: this.lastPTS,
                            data: i,
                            type: Ge,
                            duration: Number.POSITIVE_INFINITY
                        }),
                        r = n += i.length) : n++;
                    if (n === l &amp;&amp; r !== l) {
                        var h = nt(t, r);
                        this.cachedData ? this.cachedData = Kt(this.cachedData, h) : this.cachedData = h
                    }
                }
                return {
                    audioTrack: a,
                    videoTrack: Ii(),
                    id3Track: s,
                    textTrack: Ii()
                }
            }
            ,
            e.demuxSampleAes = function(t, e, r) {
                return Promise.reject(new Error(&quot;[&quot; + this + &quot;] This demuxer does not support Sample-AES decryption&quot;))
            }
            ,
            e.flush = function(t) {
                var e = this.cachedData;
                return e &amp;&amp; (this.cachedData = null,
                this.demux(e, 0)),
                {
                    audioTrack: this._audioTrack,
                    videoTrack: Ii(),
                    id3Track: this._id3Track,
                    textTrack: Ii()
                }
            }
            ,
            e.destroy = function() {}
            ,
            t
        }()
          , Ci = function(t, e, r) {
            return y(t) ? 90 * t : 9e4 * e + (r ? 9e4 * r.baseTime / r.timescale : 0)
        };
        function _i(t, e) {
            return 255 === t[e] &amp;&amp; 240 == (246 &amp; t[e + 1])
        }
        function xi(t, e) {
            return 1 &amp; t[e + 1] ? 7 : 9
        }
        function Pi(t, e) {
            return (3 &amp; t[e + 3]) &lt;&lt; 11 | t[e + 4] &lt;&lt; 3 | (224 &amp; t[e + 5]) &gt;&gt;&gt; 5
        }
        function Fi(t, e) {
            return e + 1 &lt; t.length &amp;&amp; _i(t, e)
        }
        function Mi(t, e) {
            if (Fi(t, e)) {
                var r = xi(t, e);
                if (e + r &gt;= t.length)
                    return !1;
                var i = Pi(t, e);
                if (i &lt;= r)
                    return !1;
                var n = e + i;
                return n === t.length || Fi(t, n)
            }
            return !1
        }
        function Oi(t, e, r, i, n) {
            if (!t.samplerate) {
                var a = function(t, e, r, i) {
                    var n, a, s, o, l = navigator.userAgent.toLowerCase(), u = i, h = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350];
                    n = 1 + ((192 &amp; e[r + 2]) &gt;&gt;&gt; 6);
                    var d = (60 &amp; e[r + 2]) &gt;&gt;&gt; 2;
                    if (!(d &gt; h.length - 1))
                        return s = (1 &amp; e[r + 2]) &lt;&lt; 2,
                        s |= (192 &amp; e[r + 3]) &gt;&gt;&gt; 6,
                        w.log(&quot;manifest codec:&quot; + i + &quot;, ADTS type:&quot; + n + &quot;, samplingIndex:&quot; + d),
                        /firefox/i.test(l) ? d &gt;= 6 ? (n = 5,
                        o = new Array(4),
                        a = d - 3) : (n = 2,
                        o = new Array(2),
                        a = d) : -1 !== l.indexOf(&quot;android&quot;) ? (n = 2,
                        o = new Array(2),
                        a = d) : (n = 5,
                        o = new Array(4),
                        i &amp;&amp; (-1 !== i.indexOf(&quot;mp4a.40.29&quot;) || -1 !== i.indexOf(&quot;mp4a.40.5&quot;)) || !i &amp;&amp; d &gt;= 6 ? a = d - 3 : ((i &amp;&amp; -1 !== i.indexOf(&quot;mp4a.40.2&quot;) &amp;&amp; (d &gt;= 6 &amp;&amp; 1 === s || /vivaldi/i.test(l)) || !i &amp;&amp; 1 === s) &amp;&amp; (n = 2,
                        o = new Array(2)),
                        a = d)),
                        o[0] = n &lt;&lt; 3,
                        o[0] |= (14 &amp; d) &gt;&gt; 1,
                        o[1] |= (1 &amp; d) &lt;&lt; 7,
                        o[1] |= s &lt;&lt; 3,
                        5 === n &amp;&amp; (o[1] |= (14 &amp; a) &gt;&gt; 1,
                        o[2] = (1 &amp; a) &lt;&lt; 7,
                        o[2] |= 8,
                        o[3] = 0),
                        {
                            config: o,
                            samplerate: h[d],
                            channelCount: s,
                            codec: &quot;mp4a.40.&quot; + n,
                            manifestCodec: u
                        };
                    var c = new Error(&quot;invalid ADTS sampling index:&quot; + d);
                    t.emit(S.ERROR, S.ERROR, {
                        type: L.MEDIA_ERROR,
                        details: A.FRAG_PARSING_ERROR,
                        fatal: !0,
                        error: c,
                        reason: c.message
                    })
                }(e, r, i, n);
                if (!a)
                    return;
                t.config = a.config,
                t.samplerate = a.samplerate,
                t.channelCount = a.channelCount,
                t.codec = a.codec,
                t.manifestCodec = a.manifestCodec,
                w.log(&quot;parsed codec:&quot; + t.codec + &quot;, rate:&quot; + a.samplerate + &quot;, channels:&quot; + a.channelCount)
            }
        }
        function Ni(t) {
            return 9216e4 / t
        }
        function Ui(t, e, r, i, n) {
            var a, s = i + n * Ni(t.samplerate), o = function(t, e) {
                var r = xi(t, e);
                if (e + r &lt;= t.length) {
                    var i = Pi(t, e) - r;
                    if (i &gt; 0)
                        return {
                            headerLength: r,
                            frameLength: i
                        }
                }
            }(e, r);
            if (o) {
                var l = o.frameLength
                  , u = o.headerLength
                  , h = u + l
                  , d = Math.max(0, r + h - e.length);
                d ? (a = new Uint8Array(h - u)).set(e.subarray(r + u, e.length), 0) : a = e.subarray(r + u, r + h);
                var c = {
                    unit: a,
                    pts: s
                };
                return d || t.samples.push(c),
                {
                    sample: c,
                    length: h,
                    missing: d
                }
            }
            var f = e.length - r;
            return (a = new Uint8Array(f)).set(e.subarray(r, e.length), 0),
            {
                sample: {
                    unit: a,
                    pts: s
                },
                length: f,
                missing: -1
            }
        }
        var Bi = null
          , Gi = [32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160]
          , Ki = [44100, 48e3, 32e3, 22050, 24e3, 16e3, 11025, 12e3, 8e3]
          , Hi = [[0, 72, 144, 12], [0, 0, 0, 0], [0, 72, 144, 12], [0, 144, 144, 12]]
          , Vi = [0, 1, 1, 4];
        function Yi(t, e, r, i, n) {
            if (!(r + 24 &gt; e.length)) {
                var a = Wi(e, r);
                if (a &amp;&amp; r + a.frameLength &lt;= e.length) {
                    var s = i + n * (9e4 * a.samplesPerFrame / a.sampleRate)
                      , o = {
                        unit: e.subarray(r, r + a.frameLength),
                        pts: s,
                        dts: s
                    };
                    return t.config = [],
                    t.channelCount = a.channelCount,
                    t.samplerate = a.sampleRate,
                    t.samples.push(o),
                    {
                        sample: o,
                        length: a.frameLength,
                        missing: 0
                    }
                }
            }
        }
        function Wi(t, e) {
            var r = t[e + 1] &gt;&gt; 3 &amp; 3
              , i = t[e + 1] &gt;&gt; 1 &amp; 3
              , n = t[e + 2] &gt;&gt; 4 &amp; 15
              , a = t[e + 2] &gt;&gt; 2 &amp; 3;
            if (1 !== r &amp;&amp; 0 !== n &amp;&amp; 15 !== n &amp;&amp; 3 !== a) {
                var s = t[e + 2] &gt;&gt; 1 &amp; 1
                  , o = t[e + 3] &gt;&gt; 6
                  , l = 1e3 * Gi[14 * (3 === r ? 3 - i : 3 === i ? 3 : 4) + n - 1]
                  , u = Ki[3 * (3 === r ? 0 : 2 === r ? 1 : 2) + a]
                  , h = 3 === o ? 1 : 2
                  , d = Hi[r][i]
                  , c = Vi[i]
                  , f = 8 * d * c
                  , g = Math.floor(d * l / u + s) * c;
                if (null === Bi) {
                    var v = (navigator.userAgent || &quot;&quot;).match(/Chrome\/(\d+)/i);
                    Bi = v ? parseInt(v[1]) : 0
                }
                return !!Bi &amp;&amp; Bi &lt;= 87 &amp;&amp; 2 === i &amp;&amp; l &gt;= 224e3 &amp;&amp; 0 === o &amp;&amp; (t[e + 3] = 128 | t[e + 3]),
                {
                    sampleRate: u,
                    channelCount: h,
                    frameLength: g,
                    samplesPerFrame: f
                }
            }
        }
        function ji(t, e) {
            return 255 === t[e] &amp;&amp; 224 == (224 &amp; t[e + 1]) &amp;&amp; 0 != (6 &amp; t[e + 1])
        }
        function qi(t, e) {
            return e + 1 &lt; t.length &amp;&amp; ji(t, e)
        }
        function Xi(t, e) {
            if (e + 1 &lt; t.length &amp;&amp; ji(t, e)) {
                var r = Wi(t, e)
                  , i = 4;
                null != r &amp;&amp; r.frameLength &amp;&amp; (i = r.frameLength);
                var n = e + i;
                return n === t.length || qi(t, n)
            }
            return !1
        }
        var zi = function(t) {
            function e(e, r) {
                var i;
                return (i = t.call(this) || this).observer = void 0,
                i.config = void 0,
                i.observer = e,
                i.config = r,
                i
            }
            l(e, t);
            var r = e.prototype;
            return r.resetInitSegment = function(e, r, i, n) {
                t.prototype.resetInitSegment.call(this, e, r, i, n),
                this._audioTrack = {
                    container: &quot;audio/adts&quot;,
                    type: &quot;audio&quot;,
                    id: 2,
                    pid: -1,
                    sequenceNumber: 0,
                    segmentCodec: &quot;aac&quot;,
                    samples: [],
                    manifestCodec: r,
                    duration: n,
                    inputTimeScale: 9e4,
                    dropped: 0
                }
            }
            ,
            e.probe = function(t) {
                if (!t)
                    return !1;
                var e = lt(t, 0)
                  , r = (null == e ? void 0 : e.length) || 0;
                if (Xi(t, r))
                    return !1;
                for (var i = t.length; r &lt; i; r++)
                    if (Mi(t, r))
                        return w.log(&quot;ADTS sync word found !&quot;),
                        !0;
                return !1
            }
            ,
            r.canParse = function(t, e) {
                return function(t, e) {
                    return function(t, e) {
                        return e + 5 &lt; t.length
                    }(t, e) &amp;&amp; _i(t, e) &amp;&amp; Pi(t, e) &lt;= t.length - e
                }(t, e)
            }
            ,
            r.appendFrame = function(t, e, r) {
                Oi(t, this.observer, e, r, t.manifestCodec);
                var i = Ui(t, e, r, this.basePTS, this.frameIndex);
                if (i &amp;&amp; 0 === i.missing)
                    return i
            }
            ,
            e
        }(wi)
          , Qi = /\/emsg[-/]ID3/i
          , Ji = function() {
            function t(t, e) {
                this.remainderData = null,
                this.timeOffset = 0,
                this.config = void 0,
                this.videoTrack = void 0,
                this.audioTrack = void 0,
                this.id3Track = void 0,
                this.txtTrack = void 0,
                this.config = e
            }
            var e = t.prototype;
            return e.resetTimeStamp = function() {}
            ,
            e.resetInitSegment = function(t, e, r, i) {
                var n = this.videoTrack = Ii(&quot;video&quot;, 1)
                  , a = this.audioTrack = Ii(&quot;audio&quot;, 1)
                  , s = this.txtTrack = Ii(&quot;text&quot;, 1);
                if (this.id3Track = Ii(&quot;id3&quot;, 1),
                this.timeOffset = 0,
                null != t &amp;&amp; t.byteLength) {
                    var o = Ft(t);
                    if (o.video) {
                        var l = o.video
                          , u = l.id
                          , h = l.timescale
                          , d = l.codec;
                        n.id = u,
                        n.timescale = s.timescale = h,
                        n.codec = d
                    }
                    if (o.audio) {
                        var c = o.audio
                          , f = c.id
                          , g = c.timescale
                          , v = c.codec;
                        a.id = f,
                        a.timescale = g,
                        a.codec = v
                    }
                    s.id = kt.text,
                    n.sampleDuration = 0,
                    n.duration = a.duration = i
                }
            }
            ,
            e.resetContiguity = function() {
                this.remainderData = null
            }
            ,
            t.probe = function(t) {
                return function(t) {
                    for (var e = t.byteLength, r = 0; r &lt; e; ) {
                        var i = It(t, r);
                        if (i &gt; 8 &amp;&amp; 109 === t[r + 4] &amp;&amp; 111 === t[r + 5] &amp;&amp; 111 === t[r + 6] &amp;&amp; 102 === t[r + 7])
                            return !0;
                        r = i &gt; 1 ? r + i : e
                    }
                    return !1
                }(t)
            }
            ,
            e.demux = function(t, e) {
                this.timeOffset = e;
                var r = t
                  , i = this.videoTrack
                  , n = this.txtTrack;
                if (this.config.progressive) {
                    this.remainderData &amp;&amp; (r = Kt(this.remainderData, t));
                    var a = function(t) {
                        var e = {
                            valid: null,
                            remainder: null
                        }
                          , r = xt(t, [&quot;moof&quot;]);
                        if (r.length &lt; 2)
                            return e.remainder = t,
                            e;
                        var i = r[r.length - 1];
                        return e.valid = nt(t, 0, i.byteOffset - 8),
                        e.remainder = nt(t, i.byteOffset - 8),
                        e
                    }(r);
                    this.remainderData = a.remainder,
                    i.samples = a.valid || new Uint8Array
                } else
                    i.samples = r;
                var s = this.extractID3Track(i, e);
                return n.samples = Ht(e, i),
                {
                    videoTrack: i,
                    audioTrack: this.audioTrack,
                    id3Track: s,
                    textTrack: this.txtTrack
                }
            }
            ,
            e.flush = function() {
                var t = this.timeOffset
                  , e = this.videoTrack
                  , r = this.txtTrack;
                e.samples = this.remainderData || new Uint8Array,
                this.remainderData = null;
                var i = this.extractID3Track(e, this.timeOffset);
                return r.samples = Ht(t, e),
                {
                    videoTrack: e,
                    audioTrack: Ii(),
                    id3Track: i,
                    textTrack: Ii()
                }
            }
            ,
            e.extractID3Track = function(t, e) {
                var r = this.id3Track;
                if (t.samples.length) {
                    var i = xt(t.samples, [&quot;emsg&quot;]);
                    i &amp;&amp; i.forEach((function(t) {
                        var i = function(t) {
                            var e = t[0]
                              , r = &quot;&quot;
                              , i = &quot;&quot;
                              , n = 0
                              , a = 0
                              , s = 0
                              , o = 0
                              , l = 0
                              , u = 0;
                            if (0 === e) {
                                for (; &quot;\0&quot; !== bt(t.subarray(u, u + 1)); )
                                    r += bt(t.subarray(u, u + 1)),
                                    u += 1;
                                for (r += bt(t.subarray(u, u + 1)),
                                u += 1; &quot;\0&quot; !== bt(t.subarray(u, u + 1)); )
                                    i += bt(t.subarray(u, u + 1)),
                                    u += 1;
                                i += bt(t.subarray(u, u + 1)),
                                u += 1,
                                n = It(t, 12),
                                a = It(t, 16),
                                o = It(t, 20),
                                l = It(t, 24),
                                u = 28
                            } else if (1 === e) {
                                n = It(t, u += 4);
                                var h = It(t, u += 4)
                                  , d = It(t, u += 4);
                                for (u += 4,
                                s = Math.pow(2, 32) * h + d,
                                E(s) || (s = Number.MAX_SAFE_INTEGER,
                                w.warn(&quot;Presentation time exceeds safe integer limit and wrapped to max safe integer in parsing emsg box&quot;)),
                                o = It(t, u),
                                l = It(t, u += 4),
                                u += 4; &quot;\0&quot; !== bt(t.subarray(u, u + 1)); )
                                    r += bt(t.subarray(u, u + 1)),
                                    u += 1;
                                for (r += bt(t.subarray(u, u + 1)),
                                u += 1; &quot;\0&quot; !== bt(t.subarray(u, u + 1)); )
                                    i += bt(t.subarray(u, u + 1)),
                                    u += 1;
                                i += bt(t.subarray(u, u + 1)),
                                u += 1
                            }
                            return {
                                schemeIdUri: r,
                                value: i,
                                timeScale: n,
                                presentationTime: s,
                                presentationTimeDelta: a,
                                eventDuration: o,
                                id: l,
                                payload: t.subarray(u, t.byteLength)
                            }
                        }(t);
                        if (Qi.test(i.schemeIdUri)) {
                            var n = y(i.presentationTime) ? i.presentationTime / i.timeScale : e + i.presentationTimeDelta / i.timeScale
                              , a = 4294967295 === i.eventDuration ? Number.POSITIVE_INFINITY : i.eventDuration / i.timeScale;
                            a &lt;= .001 &amp;&amp; (a = Number.POSITIVE_INFINITY);
                            var s = i.payload;
                            r.samples.push({
                                data: s,
                                len: s.byteLength,
                                dts: n,
                                pts: n,
                                type: He,
                                duration: a
                            })
                        }
                    }
                    ))
                }
                return r
            }
            ,
            e.demuxSampleAes = function(t, e, r) {
                return Promise.reject(new Error(&quot;The MP4 demuxer does not support SAMPLE-AES decryption&quot;))
            }
            ,
            e.destroy = function() {}
            ,
            t
        }()
          , $i = function(t, e) {
            var r = 0
              , i = 5;
            e += i;
            for (var n = new Uint32Array(1), a = new Uint32Array(1), s = new Uint8Array(1); i &gt; 0; ) {
                s[0] = t[e];
                var o = Math.min(i, 8)
                  , l = 8 - o;
                a[0] = 4278190080 &gt;&gt;&gt; 24 + l &lt;&lt; l,
                n[0] = (s[0] &amp; a[0]) &gt;&gt; l,
                r = r ? r &lt;&lt; o | n[0] : n[0],
                e += 1,
                i -= o
            }
            return r
        }
          , Zi = function(t) {
            function e(e) {
                var r;
                return (r = t.call(this) || this).observer = void 0,
                r.observer = e,
                r
            }
            l(e, t);
            var r = e.prototype;
            return r.resetInitSegment = function(e, r, i, n) {
                t.prototype.resetInitSegment.call(this, e, r, i, n),
                this._audioTrack = {
                    container: &quot;audio/ac-3&quot;,
                    type: &quot;audio&quot;,
                    id: 2,
                    pid: -1,
                    sequenceNumber: 0,
                    segmentCodec: &quot;ac3&quot;,
                    samples: [],
                    manifestCodec: r,
                    duration: n,
                    inputTimeScale: 9e4,
                    dropped: 0
                }
            }
            ,
            r.canParse = function(t, e) {
                return e + 64 &lt; t.length
            }
            ,
            r.appendFrame = function(t, e, r) {
                var i = tn(t, e, r, this.basePTS, this.frameIndex);
                if (-1 !== i)
                    return {
                        sample: t.samples[t.samples.length - 1],
                        length: i,
                        missing: 0
                    }
            }
            ,
            e.probe = function(t) {
                if (!t)
                    return !1;
                var e = lt(t, 0);
                if (!e)
                    return !1;
                var r = e.length;
                return 11 === t[r] &amp;&amp; 119 === t[r + 1] &amp;&amp; void 0 !== dt(e) &amp;&amp; $i(t, r) &lt; 16
            }
            ,
            e
        }(wi);
        function tn(t, e, r, i, n) {
            if (r + 8 &gt; e.length)
                return -1;
            if (11 !== e[r] || 119 !== e[r + 1])
                return -1;
            var a = e[r + 4] &gt;&gt; 6;
            if (a &gt;= 3)
                return -1;
            var s = [48e3, 44100, 32e3][a]
              , o = 63 &amp; e[r + 4]
              , l = 2 * [64, 69, 96, 64, 70, 96, 80, 87, 120, 80, 88, 120, 96, 104, 144, 96, 105, 144, 112, 121, 168, 112, 122, 168, 128, 139, 192, 128, 140, 192, 160, 174, 240, 160, 175, 240, 192, 208, 288, 192, 209, 288, 224, 243, 336, 224, 244, 336, 256, 278, 384, 256, 279, 384, 320, 348, 480, 320, 349, 480, 384, 417, 576, 384, 418, 576, 448, 487, 672, 448, 488, 672, 512, 557, 768, 512, 558, 768, 640, 696, 960, 640, 697, 960, 768, 835, 1152, 768, 836, 1152, 896, 975, 1344, 896, 976, 1344, 1024, 1114, 1536, 1024, 1115, 1536, 1152, 1253, 1728, 1152, 1254, 1728, 1280, 1393, 1920, 1280, 1394, 1920][3 * o + a];
            if (r + l &gt; e.length)
                return -1;
            var u = e[r + 6] &gt;&gt; 5
              , h = 0;
            2 === u ? h += 2 : (1 &amp; u &amp;&amp; 1 !== u &amp;&amp; (h += 2),
            4 &amp; u &amp;&amp; (h += 2));
            var d = (e[r + 6] &lt;&lt; 8 | e[r + 7]) &gt;&gt; 12 - h &amp; 1
              , c = [2, 1, 2, 3, 3, 4, 4, 5][u] + d
              , f = e[r + 5] &gt;&gt; 3
              , g = 7 &amp; e[r + 5]
              , v = new Uint8Array([a &lt;&lt; 6 | f &lt;&lt; 1 | g &gt;&gt; 2, (3 &amp; g) &lt;&lt; 6 | u &lt;&lt; 3 | d &lt;&lt; 2 | o &gt;&gt; 4, o &lt;&lt; 4 &amp; 224])
              , m = i + n * (1536 / s * 9e4)
              , p = e.subarray(r, r + l);
            return t.config = v,
            t.channelCount = c,
            t.samplerate = s,
            t.samples.push({
                unit: p,
                pts: m
            }),
            l
        }
        var en = function() {
            function t() {
                this.VideoSample = null
            }
            var e = t.prototype;
            return e.createVideoSample = function(t, e, r, i) {
                return {
                    key: t,
                    frame: !1,
                    pts: e,
                    dts: r,
                    units: [],
                    debug: i,
                    length: 0
                }
            }
            ,
            e.getLastNalUnit = function(t) {
                var e, r, i = this.VideoSample;
                if (i &amp;&amp; 0 !== i.units.length || (i = t[t.length - 1]),
                null != (e = i) &amp;&amp; e.units) {
                    var n = i.units;
                    r = n[n.length - 1]
                }
                return r
            }
            ,
            e.pushAccessUnit = function(t, e) {
                if (t.units.length &amp;&amp; t.frame) {
                    if (void 0 === t.pts) {
                        var r = e.samples
                          , i = r.length;
                        if (!i)
                            return void e.dropped++;
                        var n = r[i - 1];
                        t.pts = n.pts,
                        t.dts = n.dts
                    }
                    e.samples.push(t)
                }
                t.debug.length &amp;&amp; w.log(t.pts + &quot;/&quot; + t.dts + &quot;:&quot; + t.debug)
            }
            ,
            t
        }()
          , rn = function() {
            function t(t) {
                this.data = void 0,
                this.bytesAvailable = void 0,
                this.word = void 0,
                this.bitsAvailable = void 0,
                this.data = t,
                this.bytesAvailable = t.byteLength,
                this.word = 0,
                this.bitsAvailable = 0
            }
            var e = t.prototype;
            return e.loadWord = function() {
                var t = this.data
                  , e = this.bytesAvailable
                  , r = t.byteLength - e
                  , i = new Uint8Array(4)
                  , n = Math.min(4, e);
                if (0 === n)
                    throw new Error(&quot;no bytes available&quot;);
                i.set(t.subarray(r, r + n)),
                this.word = new DataView(i.buffer).getUint32(0),
                this.bitsAvailable = 8 * n,
                this.bytesAvailable -= n
            }
            ,
            e.skipBits = function(t) {
                var e;
                t = Math.min(t, 8 * this.bytesAvailable + this.bitsAvailable),
                this.bitsAvailable &gt; t ? (this.word &lt;&lt;= t,
                this.bitsAvailable -= t) : (t -= this.bitsAvailable,
                t -= (e = t &gt;&gt; 3) &lt;&lt; 3,
                this.bytesAvailable -= e,
                this.loadWord(),
                this.word &lt;&lt;= t,
                this.bitsAvailable -= t)
            }
            ,
            e.readBits = function(t) {
                var e = Math.min(this.bitsAvailable, t)
                  , r = this.word &gt;&gt;&gt; 32 - e;
                if (t &gt; 32 &amp;&amp; w.error(&quot;Cannot read more than 32 bits at a time&quot;),
                this.bitsAvailable -= e,
                this.bitsAvailable &gt; 0)
                    this.word &lt;&lt;= e;
                else {
                    if (!(this.bytesAvailable &gt; 0))
                        throw new Error(&quot;no bits available&quot;);
                    this.loadWord()
                }
                return (e = t - e) &gt; 0 &amp;&amp; this.bitsAvailable ? r &lt;&lt; e | this.readBits(e) : r
            }
            ,
            e.skipLZ = function() {
                var t;
                for (t = 0; t &lt; this.bitsAvailable; ++t)
                    if (0 != (this.word &amp; 2147483648 &gt;&gt;&gt; t))
                        return this.word &lt;&lt;= t,
                        this.bitsAvailable -= t,
                        t;
                return this.loadWord(),
                t + this.skipLZ()
            }
            ,
            e.skipUEG = function() {
                this.skipBits(1 + this.skipLZ())
            }
            ,
            e.skipEG = function() {
                this.skipBits(1 + this.skipLZ())
            }
            ,
            e.readUEG = function() {
                var t = this.skipLZ();
                return this.readBits(t + 1) - 1
            }
            ,
            e.readEG = function() {
                var t = this.readUEG();
                return 1 &amp; t ? 1 + t &gt;&gt;&gt; 1 : -1 * (t &gt;&gt;&gt; 1)
            }
            ,
            e.readBoolean = function() {
                return 1 === this.readBits(1)
            }
            ,
            e.readUByte = function() {
                return this.readBits(8)
            }
            ,
            e.readUShort = function() {
                return this.readBits(16)
            }
            ,
            e.readUInt = function() {
                return this.readBits(32)
            }
            ,
            e.skipScalingList = function(t) {
                for (var e = 8, r = 8, i = 0; i &lt; t; i++)
                    0 !== r &amp;&amp; (r = (e + this.readEG() + 256) % 256),
                    e = 0 === r ? e : r
            }
            ,
            e.readSPS = function() {
                var t, e, r, i = 0, n = 0, a = 0, s = 0, o = this.readUByte.bind(this), l = this.readBits.bind(this), u = this.readUEG.bind(this), h = this.readBoolean.bind(this), d = this.skipBits.bind(this), c = this.skipEG.bind(this), f = this.skipUEG.bind(this), g = this.skipScalingList.bind(this);
                o();
                var v = o();
                if (l(5),
                d(3),
                o(),
                f(),
                100 === v || 110 === v || 122 === v || 244 === v || 44 === v || 83 === v || 86 === v || 118 === v || 128 === v) {
                    var m = u();
                    if (3 === m &amp;&amp; d(1),
                    f(),
                    f(),
                    d(1),
                    h())
                        for (e = 3 !== m ? 8 : 12,
                        r = 0; r &lt; e; r++)
                            h() &amp;&amp; g(r &lt; 6 ? 16 : 64)
                }
                f();
                var p = u();
                if (0 === p)
                    u();
                else if (1 === p)
                    for (d(1),
                    c(),
                    c(),
                    t = u(),
                    r = 0; r &lt; t; r++)
                        c();
                f(),
                d(1);
                var y = u()
                  , E = u()
                  , T = l(1);
                0 === T &amp;&amp; d(1),
                d(1),
                h() &amp;&amp; (i = u(),
                n = u(),
                a = u(),
                s = u());
                var S = [1, 1];
                if (h() &amp;&amp; h())
                    switch (o()) {
                    case 1:
                        S = [1, 1];
                        break;
                    case 2:
                        S = [12, 11];
                        break;
                    case 3:
                        S = [10, 11];
                        break;
                    case 4:
                        S = [16, 11];
                        break;
                    case 5:
                        S = [40, 33];
                        break;
                    case 6:
                        S = [24, 11];
                        break;
                    case 7:
                        S = [20, 11];
                        break;
                    case 8:
                        S = [32, 11];
                        break;
                    case 9:
                        S = [80, 33];
                        break;
                    case 10:
                        S = [18, 11];
                        break;
                    case 11:
                        S = [15, 11];
                        break;
                    case 12:
                        S = [64, 33];
                        break;
                    case 13:
                        S = [160, 99];
                        break;
                    case 14:
                        S = [4, 3];
                        break;
                    case 15:
                        S = [3, 2];
                        break;
                    case 16:
                        S = [2, 1];
                        break;
                    case 255:
                        S = [o() &lt;&lt; 8 | o(), o() &lt;&lt; 8 | o()]
                    }
                return {
                    width: Math.ceil(16 * (y + 1) - 2 * i - 2 * n),
                    height: (2 - T) * (E + 1) * 16 - (T ? 2 : 4) * (a + s),
                    pixelRatio: S
                }
            }
            ,
            e.readSliceType = function() {
                return this.readUByte(),
                this.readUEG(),
                this.readUEG()
            }
            ,
            t
        }()
          , nn = function(t) {
            function e() {
                return t.apply(this, arguments) || this
            }
            l(e, t);
            var r = e.prototype;
            return r.parseAVCPES = function(t, e, r, i, n) {
                var a, s = this, o = this.parseAVCNALu(t, r.data), l = this.VideoSample, u = !1;
                r.data = null,
                l &amp;&amp; o.length &amp;&amp; !t.audFound &amp;&amp; (this.pushAccessUnit(l, t),
                l = this.VideoSample = this.createVideoSample(!1, r.pts, r.dts, &quot;&quot;)),
                o.forEach((function(i) {
                    var o;
                    switch (i.type) {
                    case 1:
                        var h = !1;
                        a = !0;
                        var d, c = i.data;
                        if (u &amp;&amp; c.length &gt; 4) {
                            var f = new rn(c).readSliceType();
                            2 !== f &amp;&amp; 4 !== f &amp;&amp; 7 !== f &amp;&amp; 9 !== f || (h = !0)
                        }
                        h &amp;&amp; null != (d = l) &amp;&amp; d.frame &amp;&amp; !l.key &amp;&amp; (s.pushAccessUnit(l, t),
                        l = s.VideoSample = null),
                        l || (l = s.VideoSample = s.createVideoSample(!0, r.pts, r.dts, &quot;&quot;)),
                        l.frame = !0,
                        l.key = h;
                        break;
                    case 5:
                        a = !0,
                        null != (o = l) &amp;&amp; o.frame &amp;&amp; !l.key &amp;&amp; (s.pushAccessUnit(l, t),
                        l = s.VideoSample = null),
                        l || (l = s.VideoSample = s.createVideoSample(!0, r.pts, r.dts, &quot;&quot;)),
                        l.key = !0,
                        l.frame = !0;
                        break;
                    case 6:
                        a = !0,
                        Yt(i.data, 1, r.pts, e.samples);
                        break;
                    case 7:
                        var g, v;
                        a = !0,
                        u = !0;
                        var m = i.data
                          , p = new rn(m).readSPS();
                        if (!t.sps || t.width !== p.width || t.height !== p.height || (null == (g = t.pixelRatio) ? void 0 : g[0]) !== p.pixelRatio[0] || (null == (v = t.pixelRatio) ? void 0 : v[1]) !== p.pixelRatio[1]) {
                            t.width = p.width,
                            t.height = p.height,
                            t.pixelRatio = p.pixelRatio,
                            t.sps = [m],
                            t.duration = n;
                            for (var y = m.subarray(1, 4), E = &quot;avc1.&quot;, T = 0; T &lt; 3; T++) {
                                var S = y[T].toString(16);
                                S.length &lt; 2 &amp;&amp; (S = &quot;0&quot; + S),
                                E += S
                            }
                            t.codec = E
                        }
                        break;
                    case 8:
                        a = !0,
                        t.pps = [i.data];
                        break;
                    case 9:
                        a = !0,
                        t.audFound = !0,
                        l &amp;&amp; s.pushAccessUnit(l, t),
                        l = s.VideoSample = s.createVideoSample(!1, r.pts, r.dts, &quot;&quot;);
                        break;
                    case 12:
                        a = !0;
                        break;
                    default:
                        a = !1,
                        l &amp;&amp; (l.debug += &quot;unknown NAL &quot; + i.type + &quot; &quot;)
                    }
                    l &amp;&amp; a &amp;&amp; l.units.push(i)
                }
                )),
                i &amp;&amp; l &amp;&amp; (this.pushAccessUnit(l, t),
                this.VideoSample = null)
            }
            ,
            r.parseAVCNALu = function(t, e) {
                var r, i, n = e.byteLength, a = t.naluState || 0, s = a, o = [], l = 0, u = -1, h = 0;
                for (-1 === a &amp;&amp; (u = 0,
                h = 31 &amp; e[0],
                a = 0,
                l = 1); l &lt; n; )
                    if (r = e[l++],
                    a)
                        if (1 !== a)
                            if (r)
                                if (1 === r) {
                                    if (i = l - a - 1,
                                    u &gt;= 0) {
                                        var d = {
                                            data: e.subarray(u, i),
                                            type: h
                                        };
                                        o.push(d)
                                    } else {
                                        var c = this.getLastNalUnit(t.samples);
                                        c &amp;&amp; (s &amp;&amp; l &lt;= 4 - s &amp;&amp; c.state &amp;&amp; (c.data = c.data.subarray(0, c.data.byteLength - s)),
                                        i &gt; 0 &amp;&amp; (c.data = Kt(c.data, e.subarray(0, i)),
                                        c.state = 0))
                                    }
                                    l &lt; n ? (u = l,
                                    h = 31 &amp; e[l],
                                    a = 0) : a = -1
                                } else
                                    a = 0;
                            else
                                a = 3;
                        else
                            a = r ? 0 : 2;
                    else
                        a = r ? 0 : 1;
                if (u &gt;= 0 &amp;&amp; a &gt;= 0) {
                    var f = {
                        data: e.subarray(u, n),
                        type: h,
                        state: a
                    };
                    o.push(f)
                }
                if (0 === o.length) {
                    var g = this.getLastNalUnit(t.samples);
                    g &amp;&amp; (g.data = Kt(g.data, e))
                }
                return t.naluState = a,
                o
            }
            ,
            e
        }(en)
          , an = function() {
            function t(t, e, r) {
                this.keyData = void 0,
                this.decrypter = void 0,
                this.keyData = r,
                this.decrypter = new ci(e,{
                    removePKCS7Padding: !1
                })
            }
            var e = t.prototype;
            return e.decryptBuffer = function(t) {
                return this.decrypter.decrypt(t, this.keyData.key.buffer, this.keyData.iv.buffer)
            }
            ,
            e.decryptAacSample = function(t, e, r) {
                var i = this
                  , n = t[e].unit;
                if (!(n.length &lt;= 16)) {
                    var a = n.subarray(16, n.length - n.length % 16)
                      , s = a.buffer.slice(a.byteOffset, a.byteOffset + a.length);
                    this.decryptBuffer(s).then((function(a) {
                        var s = new Uint8Array(a);
                        n.set(s, 16),
                        i.decrypter.isSync() || i.decryptAacSamples(t, e + 1, r)
                    }
                    ))
                }
            }
            ,
            e.decryptAacSamples = function(t, e, r) {
                for (; ; e++) {
                    if (e &gt;= t.length)
                        return void r();
                    if (!(t[e].unit.length &lt; 32 || (this.decryptAacSample(t, e, r),
                    this.decrypter.isSync())))
                        return
                }
            }
            ,
            e.getAvcEncryptedData = function(t) {
                for (var e = 16 * Math.floor((t.length - 48) / 160) + 16, r = new Int8Array(e), i = 0, n = 32; n &lt; t.length - 16; n += 160,
                i += 16)
                    r.set(t.subarray(n, n + 16), i);
                return r
            }
            ,
            e.getAvcDecryptedUnit = function(t, e) {
                for (var r = new Uint8Array(e), i = 0, n = 32; n &lt; t.length - 16; n += 160,
                i += 16)
                    t.set(r.subarray(i, i + 16), n);
                return t
            }
            ,
            e.decryptAvcSample = function(t, e, r, i, n) {
                var a = this
                  , s = Wt(n.data)
                  , o = this.getAvcEncryptedData(s);
                this.decryptBuffer(o.buffer).then((function(o) {
                    n.data = a.getAvcDecryptedUnit(s, o),
                    a.decrypter.isSync() || a.decryptAvcSamples(t, e, r + 1, i)
                }
                ))
            }
            ,
            e.decryptAvcSamples = function(t, e, r, i) {
                if (t instanceof Uint8Array)
                    throw new Error(&quot;Cannot decrypt samples of type Uint8Array&quot;);
                for (; ; e++,
                r = 0) {
                    if (e &gt;= t.length)
                        return void i();
                    for (var n = t[e].units; !(r &gt;= n.length); r++) {
                        var a = n[r];
                        if (!(a.data.length &lt;= 48 || 1 !== a.type &amp;&amp; 5 !== a.type || (this.decryptAvcSample(t, e, r, i, a),
                        this.decrypter.isSync())))
                            return
                    }
                }
            }
            ,
            t
        }()
          , sn = 188
          , on = function() {
            function t(t, e, r) {
                this.observer = void 0,
                this.config = void 0,
                this.typeSupported = void 0,
                this.sampleAes = null,
                this.pmtParsed = !1,
                this.audioCodec = void 0,
                this.videoCodec = void 0,
                this._duration = 0,
                this._pmtId = -1,
                this._videoTrack = void 0,
                this._audioTrack = void 0,
                this._id3Track = void 0,
                this._txtTrack = void 0,
                this.aacOverFlow = null,
                this.remainderData = null,
                this.videoParser = void 0,
                this.observer = t,
                this.config = e,
                this.typeSupported = r,
                this.videoParser = new nn
            }
            t.probe = function(e) {
                var r = t.syncOffset(e);
                return r &gt; 0 &amp;&amp; w.warn(&quot;MPEG2-TS detected but first sync word found @ offset &quot; + r),
                -1 !== r
            }
            ,
            t.syncOffset = function(t) {
                for (var e = t.length, r = Math.min(940, e - sn) + 1, i = 0; i &lt; r; ) {
                    for (var n = !1, a = -1, s = 0, o = i; o &lt; e; o += sn) {
                        if (71 !== t[o] || e - o !== sn &amp;&amp; 71 !== t[o + sn]) {
                            if (s)
                                return -1;
                            break
                        }
                        if (s++,
                        -1 === a &amp;&amp; 0 !== (a = o) &amp;&amp; (r = Math.min(a + 18612, t.length - sn) + 1),
                        n || (n = 0 === ln(t, o)),
                        n &amp;&amp; s &gt; 1 &amp;&amp; (0 === a &amp;&amp; s &gt; 2 || o + sn &gt; r))
                            return a
                    }
                    i++
                }
                return -1
            }
            ,
            t.createTrack = function(t, e) {
                return {
                    container: &quot;video&quot; === t || &quot;audio&quot; === t ? &quot;video/mp2t&quot; : void 0,
                    type: t,
                    id: kt[t],
                    pid: -1,
                    inputTimeScale: 9e4,
                    sequenceNumber: 0,
                    samples: [],
                    dropped: 0,
                    duration: &quot;audio&quot; === t ? e : void 0
                }
            }
            ;
            var e = t.prototype;
            return e.resetInitSegment = function(e, r, i, n) {
                this.pmtParsed = !1,
                this._pmtId = -1,
                this._videoTrack = t.createTrack(&quot;video&quot;),
                this._audioTrack = t.createTrack(&quot;audio&quot;, n),
                this._id3Track = t.createTrack(&quot;id3&quot;),
                this._txtTrack = t.createTrack(&quot;text&quot;),
                this._audioTrack.segmentCodec = &quot;aac&quot;,
                this.aacOverFlow = null,
                this.remainderData = null,
                this.audioCodec = r,
                this.videoCodec = i,
                this._duration = n
            }
            ,
            e.resetTimeStamp = function() {}
            ,
            e.resetContiguity = function() {
                var t = this._audioTrack
                  , e = this._videoTrack
                  , r = this._id3Track;
                t &amp;&amp; (t.pesData = null),
                e &amp;&amp; (e.pesData = null),
                r &amp;&amp; (r.pesData = null),
                this.aacOverFlow = null,
                this.remainderData = null
            }
            ,
            e.demux = function(e, r, i, n) {
                var a;
                void 0 === i &amp;&amp; (i = !1),
                void 0 === n &amp;&amp; (n = !1),
                i || (this.sampleAes = null);
                var s = this._videoTrack
                  , o = this._audioTrack
                  , l = this._id3Track
                  , u = this._txtTrack
                  , h = s.pid
                  , d = s.pesData
                  , c = o.pid
                  , f = l.pid
                  , g = o.pesData
                  , v = l.pesData
                  , m = null
                  , p = this.pmtParsed
                  , y = this._pmtId
                  , E = e.length;
                if (this.remainderData &amp;&amp; (E = (e = Kt(this.remainderData, e)).length,
                this.remainderData = null),
                E &lt; sn &amp;&amp; !n)
                    return this.remainderData = e,
                    {
                        audioTrack: o,
                        videoTrack: s,
                        id3Track: l,
                        textTrack: u
                    };
                var T = Math.max(0, t.syncOffset(e));
                (E -= (E - T) % sn) &lt; e.byteLength &amp;&amp; !n &amp;&amp; (this.remainderData = new Uint8Array(e.buffer,E,e.buffer.byteLength - E));
                for (var S = 0, L = T; L &lt; E; L += sn)
                    if (71 === e[L]) {
                        var A = !!(64 &amp; e[L + 1])
                          , R = ln(e, L)
                          , k = void 0;
                        if ((48 &amp; e[L + 3]) &gt;&gt; 4 &gt; 1) {
                            if ((k = L + 5 + e[L + 4]) === L + sn)
                                continue
                        } else
                            k = L + 4;
                        switch (R) {
                        case h:
                            A &amp;&amp; (d &amp;&amp; (a = fn(d)) &amp;&amp; this.videoParser.parseAVCPES(s, u, a, !1, this._duration),
                            d = {
                                data: [],
                                size: 0
                            }),
                            d &amp;&amp; (d.data.push(e.subarray(k, L + sn)),
                            d.size += L + sn - k);
                            break;
                        case c:
                            if (A) {
                                if (g &amp;&amp; (a = fn(g)))
                                    switch (o.segmentCodec) {
                                    case &quot;aac&quot;:
                                        this.parseAACPES(o, a);
                                        break;
                                    case &quot;mp3&quot;:
                                        this.parseMPEGPES(o, a);
                                        break;
                                    case &quot;ac3&quot;:
                                        this.parseAC3PES(o, a)
                                    }
                                g = {
                                    data: [],
                                    size: 0
                                }
                            }
                            g &amp;&amp; (g.data.push(e.subarray(k, L + sn)),
                            g.size += L + sn - k);
                            break;
                        case f:
                            A &amp;&amp; (v &amp;&amp; (a = fn(v)) &amp;&amp; this.parseID3PES(l, a),
                            v = {
                                data: [],
                                size: 0
                            }),
                            v &amp;&amp; (v.data.push(e.subarray(k, L + sn)),
                            v.size += L + sn - k);
                            break;
                        case 0:
                            A &amp;&amp; (k += e[k] + 1),
                            y = this._pmtId = un(e, k);
                            break;
                        case y:
                            A &amp;&amp; (k += e[k] + 1);
                            var b = hn(e, k, this.typeSupported, i, this.observer);
                            (h = b.videoPid) &gt; 0 &amp;&amp; (s.pid = h,
                            s.segmentCodec = b.segmentVideoCodec),
                            (c = b.audioPid) &gt; 0 &amp;&amp; (o.pid = c,
                            o.segmentCodec = b.segmentAudioCodec),
                            (f = b.id3Pid) &gt; 0 &amp;&amp; (l.pid = f),
                            null === m || p || (w.warn(&quot;MPEG-TS PMT found at &quot; + L + &quot; after unknown PID &#39;&quot; + m + &quot;&#39;. Backtracking to sync byte @&quot; + T + &quot; to parse all TS packets.&quot;),
                            m = null,
                            L = T - 188),
                            p = this.pmtParsed = !0;
                            break;
                        case 17:
                        case 8191:
                            break;
                        default:
                            m = R
                        }
                    } else
                        S++;
                S &gt; 0 &amp;&amp; dn(this.observer, new Error(&quot;Found &quot; + S + &quot; TS packet/s that do not start with 0x47&quot;)),
                s.pesData = d,
                o.pesData = g,
                l.pesData = v;
                var D = {
                    audioTrack: o,
                    videoTrack: s,
                    id3Track: l,
                    textTrack: u
                };
                return n &amp;&amp; this.extractRemainingSamples(D),
                D
            }
            ,
            e.flush = function() {
                var t, e = this.remainderData;
                return this.remainderData = null,
                t = e ? this.demux(e, -1, !1, !0) : {
                    videoTrack: this._videoTrack,
                    audioTrack: this._audioTrack,
                    id3Track: this._id3Track,
                    textTrack: this._txtTrack
                },
                this.extractRemainingSamples(t),
                this.sampleAes ? this.decrypt(t, this.sampleAes) : t
            }
            ,
            e.extractRemainingSamples = function(t) {
                var e, r = t.audioTrack, i = t.videoTrack, n = t.id3Track, a = t.textTrack, s = i.pesData, o = r.pesData, l = n.pesData;
                if (s &amp;&amp; (e = fn(s)) ? (this.videoParser.parseAVCPES(i, a, e, !0, this._duration),
                i.pesData = null) : i.pesData = s,
                o &amp;&amp; (e = fn(o))) {
                    switch (r.segmentCodec) {
                    case &quot;aac&quot;:
                        this.parseAACPES(r, e);
                        break;
                    case &quot;mp3&quot;:
                        this.parseMPEGPES(r, e);
                        break;
                    case &quot;ac3&quot;:
                        this.parseAC3PES(r, e)
                    }
                    r.pesData = null
                } else
                    null != o &amp;&amp; o.size &amp;&amp; w.log(&quot;last AAC PES packet truncated,might overlap between fragments&quot;),
                    r.pesData = o;
                l &amp;&amp; (e = fn(l)) ? (this.parseID3PES(n, e),
                n.pesData = null) : n.pesData = l
            }
            ,
            e.demuxSampleAes = function(t, e, r) {
                var i = this.demux(t, r, !0, !this.config.progressive)
                  , n = this.sampleAes = new an(this.observer,this.config,e);
                return this.decrypt(i, n)
            }
            ,
            e.decrypt = function(t, e) {
                return new Promise((function(r) {
                    var i = t.audioTrack
                      , n = t.videoTrack;
                    i.samples &amp;&amp; &quot;aac&quot; === i.segmentCodec ? e.decryptAacSamples(i.samples, 0, (function() {
                        n.samples ? e.decryptAvcSamples(n.samples, 0, 0, (function() {
                            r(t)
                        }
                        )) : r(t)
                    }
                    )) : n.samples &amp;&amp; e.decryptAvcSamples(n.samples, 0, 0, (function() {
                        r(t)
                    }
                    ))
                }
                ))
            }
            ,
            e.destroy = function() {
                this._duration = 0
            }
            ,
            e.parseAACPES = function(t, e) {
                var r, i, n, a = 0, s = this.aacOverFlow, o = e.data;
                if (s) {
                    this.aacOverFlow = null;
                    var l = s.missing
                      , u = s.sample.unit.byteLength;
                    if (-1 === l)
                        o = Kt(s.sample.unit, o);
                    else {
                        var h = u - l;
                        s.sample.unit.set(o.subarray(0, l), h),
                        t.samples.push(s.sample),
                        a = s.missing
                    }
                }
                for (r = a,
                i = o.length; r &lt; i - 1 &amp;&amp; !Fi(o, r); r++)
                    ;
                if (r !== a) {
                    var d, c = r &lt; i - 1;
                    if (d = c ? &quot;AAC PES did not start with ADTS header,offset:&quot; + r : &quot;No ADTS header found in AAC PES&quot;,
                    dn(this.observer, new Error(d), c),
                    !c)
                        return
                }
                if (Oi(t, this.observer, o, r, this.audioCodec),
                void 0 !== e.pts)
                    n = e.pts;
                else {
                    if (!s)
                        return void w.warn(&quot;[tsdemuxer]: AAC PES unknown PTS&quot;);
                    var f = Ni(t.samplerate);
                    n = s.sample.pts + f
                }
                for (var g, v = 0; r &lt; i; ) {
                    if (r += (g = Ui(t, o, r, n, v)).length,
                    g.missing) {
                        this.aacOverFlow = g;
                        break
                    }
                    for (v++; r &lt; i - 1 &amp;&amp; !Fi(o, r); r++)
                        ;
                }
            }
            ,
            e.parseMPEGPES = function(t, e) {
                var r = e.data
                  , i = r.length
                  , n = 0
                  , a = 0
                  , s = e.pts;
                if (void 0 !== s)
                    for (; a &lt; i; )
                        if (qi(r, a)) {
                            var o = Yi(t, r, a, s, n);
                            if (!o)
                                break;
                            a += o.length,
                            n++
                        } else
                            a++;
                else
                    w.warn(&quot;[tsdemuxer]: MPEG PES unknown PTS&quot;)
            }
            ,
            e.parseAC3PES = function(t, e) {
                var r = e.data
                  , i = e.pts;
                if (void 0 !== i)
                    for (var n, a = r.length, s = 0, o = 0; o &lt; a &amp;&amp; (n = tn(t, r, o, i, s++)) &gt; 0; )
                        o += n;
                else
                    w.warn(&quot;[tsdemuxer]: AC3 PES unknown PTS&quot;)
            }
            ,
            e.parseID3PES = function(t, e) {
                if (void 0 !== e.pts) {
                    var r = o({}, e, {
                        type: this._videoTrack ? He : Ge,
                        duration: Number.POSITIVE_INFINITY
                    });
                    t.samples.push(r)
                } else
                    w.warn(&quot;[tsdemuxer]: ID3 PES unknown PTS&quot;)
            }
            ,
            t
        }();
        function ln(t, e) {
            return ((31 &amp; t[e + 1]) &lt;&lt; 8) + t[e + 2]
        }
        function un(t, e) {
            return (31 &amp; t[e + 10]) &lt;&lt; 8 | t[e + 11]
        }
        function hn(t, e, r, i, n) {
            var a = {
                audioPid: -1,
                videoPid: -1,
                id3Pid: -1,
                segmentVideoCodec: &quot;avc&quot;,
                segmentAudioCodec: &quot;aac&quot;
            }
              , s = e + 3 + ((15 &amp; t[e + 1]) &lt;&lt; 8 | t[e + 2]) - 4;
            for (e += 12 + ((15 &amp; t[e + 10]) &lt;&lt; 8 | t[e + 11]); e &lt; s; ) {
                var o = ln(t, e)
                  , l = (15 &amp; t[e + 3]) &lt;&lt; 8 | t[e + 4];
                switch (t[e]) {
                case 207:
                    if (!i) {
                        cn(&quot;ADTS AAC&quot;);
                        break
                    }
                case 15:
                    -1 === a.audioPid &amp;&amp; (a.audioPid = o);
                    break;
                case 21:
                    -1 === a.id3Pid &amp;&amp; (a.id3Pid = o);
                    break;
                case 219:
                    if (!i) {
                        cn(&quot;H.264&quot;);
                        break
                    }
                case 27:
                    -1 === a.videoPid &amp;&amp; (a.videoPid = o,
                    a.segmentVideoCodec = &quot;avc&quot;);
                    break;
                case 3:
                case 4:
                    r.mpeg || r.mp3 ? -1 === a.audioPid &amp;&amp; (a.audioPid = o,
                    a.segmentAudioCodec = &quot;mp3&quot;) : w.log(&quot;MPEG audio found, not supported in this browser&quot;);
                    break;
                case 193:
                    if (!i) {
                        cn(&quot;AC-3&quot;);
                        break
                    }
                case 129:
                    r.ac3 ? -1 === a.audioPid &amp;&amp; (a.audioPid = o,
                    a.segmentAudioCodec = &quot;ac3&quot;) : w.log(&quot;AC-3 audio found, not supported in this browser&quot;);
                    break;
                case 6:
                    if (-1 === a.audioPid &amp;&amp; l &gt; 0)
                        for (var u = e + 5, h = l; h &gt; 2; ) {
                            106 === t[u] &amp;&amp; (!0 !== r.ac3 ? w.log(&quot;AC-3 audio found, not supported in this browser for now&quot;) : (a.audioPid = o,
                            a.segmentAudioCodec = &quot;ac3&quot;));
                            var d = t[u + 1] + 2;
                            u += d,
                            h -= d
                        }
                    break;
                case 194:
                case 135:
                    return dn(n, new Error(&quot;Unsupported EC-3 in M2TS found&quot;)),
                    a;
                case 36:
                    return dn(n, new Error(&quot;Unsupported HEVC in M2TS found&quot;)),
                    a
                }
                e += l + 5
            }
            return a
        }
        function dn(t, e, r) {
            w.warn(&quot;parsing error: &quot; + e.message),
            t.emit(S.ERROR, S.ERROR, {
                type: L.MEDIA_ERROR,
                details: A.FRAG_PARSING_ERROR,
                fatal: !1,
                levelRetry: r,
                error: e,
                reason: e.message
            })
        }
        function cn(t) {
            w.log(t + &quot; with AES-128-CBC encryption found in unencrypted stream&quot;)
        }
        function fn(t) {
            var e, r, i, n, a, s = 0, o = t.data;
            if (!t || 0 === t.size)
                return null;
            for (; o[0].length &lt; 19 &amp;&amp; o.length &gt; 1; )
                o[0] = Kt(o[0], o[1]),
                o.splice(1, 1);
            if (1 === ((e = o[0])[0] &lt;&lt; 16) + (e[1] &lt;&lt; 8) + e[2]) {
                if ((r = (e[4] &lt;&lt; 8) + e[5]) &amp;&amp; r &gt; t.size - 6)
                    return null;
                var l = e[7];
                192 &amp; l &amp;&amp; (n = 536870912 * (14 &amp; e[9]) + 4194304 * (255 &amp; e[10]) + 16384 * (254 &amp; e[11]) + 128 * (255 &amp; e[12]) + (254 &amp; e[13]) / 2,
                64 &amp; l ? n - (a = 536870912 * (14 &amp; e[14]) + 4194304 * (255 &amp; e[15]) + 16384 * (254 &amp; e[16]) + 128 * (255 &amp; e[17]) + (254 &amp; e[18]) / 2) &gt; 54e5 &amp;&amp; (w.warn(Math.round((n - a) / 9e4) + &quot;s delta between PTS and DTS, align them&quot;),
                n = a) : a = n);
                var u = (i = e[8]) + 9;
                if (t.size &lt;= u)
                    return null;
                t.size -= u;
                for (var h = new Uint8Array(t.size), d = 0, c = o.length; d &lt; c; d++) {
                    var f = (e = o[d]).byteLength;
                    if (u) {
                        if (u &gt; f) {
                            u -= f;
                            continue
                        }
                        e = e.subarray(u),
                        f -= u,
                        u = 0
                    }
                    h.set(e, s),
                    s += f
                }
                return r &amp;&amp; (r -= i + 3),
                {
                    data: h,
                    pts: n,
                    dts: a,
                    len: r
                }
            }
            return null
        }
        var gn = function(t) {
            function e() {
                return t.apply(this, arguments) || this
            }
            l(e, t);
            var r = e.prototype;
            return r.resetInitSegment = function(e, r, i, n) {
                t.prototype.resetInitSegment.call(this, e, r, i, n),
                this._audioTrack = {
                    container: &quot;audio/mpeg&quot;,
                    type: &quot;audio&quot;,
                    id: 2,
                    pid: -1,
                    sequenceNumber: 0,
                    segmentCodec: &quot;mp3&quot;,
                    samples: [],
                    manifestCodec: r,
                    duration: n,
                    inputTimeScale: 9e4,
                    dropped: 0
                }
            }
            ,
            e.probe = function(t) {
                if (!t)
                    return !1;
                var e = lt(t, 0)
                  , r = (null == e ? void 0 : e.length) || 0;
                if (e &amp;&amp; 11 === t[r] &amp;&amp; 119 === t[r + 1] &amp;&amp; void 0 !== dt(e) &amp;&amp; $i(t, r) &lt;= 16)
                    return !1;
                for (var i = t.length; r &lt; i; r++)
                    if (Xi(t, r))
                        return w.log(&quot;MPEG Audio sync word found !&quot;),
                        !0;
                return !1
            }
            ,
            r.canParse = function(t, e) {
                return function(t, e) {
                    return ji(t, e) &amp;&amp; 4 &lt;= t.length - e
                }(t, e)
            }
            ,
            r.appendFrame = function(t, e, r) {
                if (null !== this.basePTS)
                    return Yi(t, e, r, this.basePTS, this.frameIndex)
            }
            ,
            e
        }(wi)
          , vn = function() {
            function t() {}
            return t.getSilentFrame = function(t, e) {
                if (&quot;mp4a.40.2&quot; === t) {
                    if (1 === e)
                        return new Uint8Array([0, 200, 0, 128, 35, 128]);
                    if (2 === e)
                        return new Uint8Array([33, 0, 73, 144, 2, 25, 0, 35, 128]);
                    if (3 === e)
                        return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 142]);
                    if (4 === e)
                        return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 128, 44, 128, 8, 2, 56]);
                    if (5 === e)
                        return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 130, 48, 4, 153, 0, 33, 144, 2, 56]);
                    if (6 === e)
                        return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 130, 48, 4, 153, 0, 33, 144, 2, 0, 178, 0, 32, 8, 224])
                } else {
                    if (1 === e)
                        return new Uint8Array([1, 64, 34, 128, 163, 78, 230, 128, 186, 8, 0, 0, 0, 28, 6, 241, 193, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]);
                    if (2 === e)
                        return new Uint8Array([1, 64, 34, 128, 163, 94, 230, 128, 186, 8, 0, 0, 0, 0, 149, 0, 6, 241, 161, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]);
                    if (3 === e)
                        return new Uint8Array([1, 64, 34, 128, 163, 94, 230, 128, 186, 8, 0, 0, 0, 0, 149, 0, 6, 241, 161, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94])
                }
            }
            ,
            t
        }()
          , mn = Math.pow(2, 32) - 1
          , pn = function() {
            function t() {}
            return t.init = function() {
                var e;
                for (e in t.types = {
                    avc1: [],
                    avcC: [],
                    btrt: [],
                    dinf: [],
                    dref: [],
                    esds: [],
                    ftyp: [],
                    hdlr: [],
                    mdat: [],
                    mdhd: [],
                    mdia: [],
                    mfhd: [],
                    minf: [],
                    moof: [],
                    moov: [],
                    mp4a: [],
                    &quot;.mp3&quot;: [],
                    dac3: [],
                    &quot;ac-3&quot;: [],
                    mvex: [],
                    mvhd: [],
                    pasp: [],
                    sdtp: [],
                    stbl: [],
                    stco: [],
                    stsc: [],
                    stsd: [],
                    stsz: [],
                    stts: [],
                    tfdt: [],
                    tfhd: [],
                    traf: [],
                    trak: [],
                    trun: [],
                    trex: [],
                    tkhd: [],
                    vmhd: [],
                    smhd: []
                },
                t.types)
                    t.types.hasOwnProperty(e) &amp;&amp; (t.types[e] = [e.charCodeAt(0), e.charCodeAt(1), e.charCodeAt(2), e.charCodeAt(3)]);
                var r = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 118, 105, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 105, 100, 101, 111, 72, 97, 110, 100, 108, 101, 114, 0])
                  , i = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 115, 111, 117, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 111, 117, 110, 100, 72, 97, 110, 100, 108, 101, 114, 0]);
                t.HDLR_TYPES = {
                    video: r,
                    audio: i
                };
                var n = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 117, 114, 108, 32, 0, 0, 0, 1])
                  , a = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0]);
                t.STTS = t.STSC = t.STCO = a,
                t.STSZ = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
                t.VMHD = new Uint8Array([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]),
                t.SMHD = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0]),
                t.STSD = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1]);
                var s = new Uint8Array([105, 115, 111, 109])
                  , o = new Uint8Array([97, 118, 99, 49])
                  , l = new Uint8Array([0, 0, 0, 1]);
                t.FTYP = t.box(t.types.ftyp, s, l, s, o),
                t.DINF = t.box(t.types.dinf, t.box(t.types.dref, n))
            }
            ,
            t.box = function(t) {
                for (var e = 8, r = arguments.length, i = new Array(r &gt; 1 ? r - 1 : 0), n = 1; n &lt; r; n++)
                    i[n - 1] = arguments[n];
                for (var a = i.length, s = a; a--; )
                    e += i[a].byteLength;
                var o = new Uint8Array(e);
                for (o[0] = e &gt;&gt; 24 &amp; 255,
                o[1] = e &gt;&gt; 16 &amp; 255,
                o[2] = e &gt;&gt; 8 &amp; 255,
                o[3] = 255 &amp; e,
                o.set(t, 4),
                a = 0,
                e = 8; a &lt; s; a++)
                    o.set(i[a], e),
                    e += i[a].byteLength;
                return o
            }
            ,
            t.hdlr = function(e) {
                return t.box(t.types.hdlr, t.HDLR_TYPES[e])
            }
            ,
            t.mdat = function(e) {
                return t.box(t.types.mdat, e)
            }
            ,
            t.mdhd = function(e, r) {
                r *= e;
                var i = Math.floor(r / (mn + 1))
                  , n = Math.floor(r % (mn + 1));
                return t.box(t.types.mdhd, new Uint8Array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, e &gt;&gt; 24 &amp; 255, e &gt;&gt; 16 &amp; 255, e &gt;&gt; 8 &amp; 255, 255 &amp; e, i &gt;&gt; 24, i &gt;&gt; 16 &amp; 255, i &gt;&gt; 8 &amp; 255, 255 &amp; i, n &gt;&gt; 24, n &gt;&gt; 16 &amp; 255, n &gt;&gt; 8 &amp; 255, 255 &amp; n, 85, 196, 0, 0]))
            }
            ,
            t.mdia = function(e) {
                return t.box(t.types.mdia, t.mdhd(e.timescale, e.duration), t.hdlr(e.type), t.minf(e))
            }
            ,
            t.mfhd = function(e) {
                return t.box(t.types.mfhd, new Uint8Array([0, 0, 0, 0, e &gt;&gt; 24, e &gt;&gt; 16 &amp; 255, e &gt;&gt; 8 &amp; 255, 255 &amp; e]))
            }
            ,
            t.minf = function(e) {
                return &quot;audio&quot; === e.type ? t.box(t.types.minf, t.box(t.types.smhd, t.SMHD), t.DINF, t.stbl(e)) : t.box(t.types.minf, t.box(t.types.vmhd, t.VMHD), t.DINF, t.stbl(e))
            }
            ,
            t.moof = function(e, r, i) {
                return t.box(t.types.moof, t.mfhd(e), t.traf(i, r))
            }
            ,
            t.moov = function(e) {
                for (var r = e.length, i = []; r--; )
                    i[r] = t.trak(e[r]);
                return t.box.apply(null, [t.types.moov, t.mvhd(e[0].timescale, e[0].duration)].concat(i).concat(t.mvex(e)))
            }
            ,
            t.mvex = function(e) {
                for (var r = e.length, i = []; r--; )
                    i[r] = t.trex(e[r]);
                return t.box.apply(null, [t.types.mvex].concat(i))
            }
            ,
            t.mvhd = function(e, r) {
                r *= e;
                var i = Math.floor(r / (mn + 1))
                  , n = Math.floor(r % (mn + 1))
                  , a = new Uint8Array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, e &gt;&gt; 24 &amp; 255, e &gt;&gt; 16 &amp; 255, e &gt;&gt; 8 &amp; 255, 255 &amp; e, i &gt;&gt; 24, i &gt;&gt; 16 &amp; 255, i &gt;&gt; 8 &amp; 255, 255 &amp; i, n &gt;&gt; 24, n &gt;&gt; 16 &amp; 255, n &gt;&gt; 8 &amp; 255, 255 &amp; n, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255]);
                return t.box(t.types.mvhd, a)
            }
            ,
            t.sdtp = function(e) {
                var r, i, n = e.samples || [], a = new Uint8Array(4 + n.length);
                for (r = 0; r &lt; n.length; r++)
                    i = n[r].flags,
                    a[r + 4] = i.dependsOn &lt;&lt; 4 | i.isDependedOn &lt;&lt; 2 | i.hasRedundancy;
                return t.box(t.types.sdtp, a)
            }
            ,
            t.stbl = function(e) {
                return t.box(t.types.stbl, t.stsd(e), t.box(t.types.stts, t.STTS), t.box(t.types.stsc, t.STSC), t.box(t.types.stsz, t.STSZ), t.box(t.types.stco, t.STCO))
            }
            ,
            t.avc1 = function(e) {
                var r, i, n, a = [], s = [];
                for (r = 0; r &lt; e.sps.length; r++)
                    n = (i = e.sps[r]).byteLength,
                    a.push(n &gt;&gt;&gt; 8 &amp; 255),
                    a.push(255 &amp; n),
                    a = a.concat(Array.prototype.slice.call(i));
                for (r = 0; r &lt; e.pps.length; r++)
                    n = (i = e.pps[r]).byteLength,
                    s.push(n &gt;&gt;&gt; 8 &amp; 255),
                    s.push(255 &amp; n),
                    s = s.concat(Array.prototype.slice.call(i));
                var o = t.box(t.types.avcC, new Uint8Array([1, a[3], a[4], a[5], 255, 224 | e.sps.length].concat(a).concat([e.pps.length]).concat(s)))
                  , l = e.width
                  , u = e.height
                  , h = e.pixelRatio[0]
                  , d = e.pixelRatio[1];
                return t.box(t.types.avc1, new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, l &gt;&gt; 8 &amp; 255, 255 &amp; l, u &gt;&gt; 8 &amp; 255, 255 &amp; u, 0, 72, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 1, 18, 100, 97, 105, 108, 121, 109, 111, 116, 105, 111, 110, 47, 104, 108, 115, 46, 106, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 17, 17]), o, t.box(t.types.btrt, new Uint8Array([0, 28, 156, 128, 0, 45, 198, 192, 0, 45, 198, 192])), t.box(t.types.pasp, new Uint8Array([h &gt;&gt; 24, h &gt;&gt; 16 &amp; 255, h &gt;&gt; 8 &amp; 255, 255 &amp; h, d &gt;&gt; 24, d &gt;&gt; 16 &amp; 255, d &gt;&gt; 8 &amp; 255, 255 &amp; d])))
            }
            ,
            t.esds = function(t) {
                var e = t.config.length;
                return new Uint8Array([0, 0, 0, 0, 3, 23 + e, 0, 1, 0, 4, 15 + e, 64, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5].concat([e]).concat(t.config).concat([6, 1, 2]))
            }
            ,
            t.audioStsd = function(t) {
                var e = t.samplerate;
                return new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, t.channelCount, 0, 16, 0, 0, 0, 0, e &gt;&gt; 8 &amp; 255, 255 &amp; e, 0, 0])
            }
            ,
            t.mp4a = function(e) {
                return t.box(t.types.mp4a, t.audioStsd(e), t.box(t.types.esds, t.esds(e)))
            }
            ,
            t.mp3 = function(e) {
                return t.box(t.types[&quot;.mp3&quot;], t.audioStsd(e))
            }
            ,
            t.ac3 = function(e) {
                return t.box(t.types[&quot;ac-3&quot;], t.audioStsd(e), t.box(t.types.dac3, e.config))
            }
            ,
            t.stsd = function(e) {
                return &quot;audio&quot; === e.type ? &quot;mp3&quot; === e.segmentCodec &amp;&amp; &quot;mp3&quot; === e.codec ? t.box(t.types.stsd, t.STSD, t.mp3(e)) : &quot;ac3&quot; === e.segmentCodec ? t.box(t.types.stsd, t.STSD, t.ac3(e)) : t.box(t.types.stsd, t.STSD, t.mp4a(e)) : t.box(t.types.stsd, t.STSD, t.avc1(e))
            }
            ,
            t.tkhd = function(e) {
                var r = e.id
                  , i = e.duration * e.timescale
                  , n = e.width
                  , a = e.height
                  , s = Math.floor(i / (mn + 1))
                  , o = Math.floor(i % (mn + 1));
                return t.box(t.types.tkhd, new Uint8Array([1, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, r &gt;&gt; 24 &amp; 255, r &gt;&gt; 16 &amp; 255, r &gt;&gt; 8 &amp; 255, 255 &amp; r, 0, 0, 0, 0, s &gt;&gt; 24, s &gt;&gt; 16 &amp; 255, s &gt;&gt; 8 &amp; 255, 255 &amp; s, o &gt;&gt; 24, o &gt;&gt; 16 &amp; 255, o &gt;&gt; 8 &amp; 255, 255 &amp; o, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, n &gt;&gt; 8 &amp; 255, 255 &amp; n, 0, 0, a &gt;&gt; 8 &amp; 255, 255 &amp; a, 0, 0]))
            }
            ,
            t.traf = function(e, r) {
                var i = t.sdtp(e)
                  , n = e.id
                  , a = Math.floor(r / (mn + 1))
                  , s = Math.floor(r % (mn + 1));
                return t.box(t.types.traf, t.box(t.types.tfhd, new Uint8Array([0, 0, 0, 0, n &gt;&gt; 24, n &gt;&gt; 16 &amp; 255, n &gt;&gt; 8 &amp; 255, 255 &amp; n])), t.box(t.types.tfdt, new Uint8Array([1, 0, 0, 0, a &gt;&gt; 24, a &gt;&gt; 16 &amp; 255, a &gt;&gt; 8 &amp; 255, 255 &amp; a, s &gt;&gt; 24, s &gt;&gt; 16 &amp; 255, s &gt;&gt; 8 &amp; 255, 255 &amp; s])), t.trun(e, i.length + 16 + 20 + 8 + 16 + 8 + 8), i)
            }
            ,
            t.trak = function(e) {
                return e.duration = e.duration || 4294967295,
                t.box(t.types.trak, t.tkhd(e), t.mdia(e))
            }
            ,
            t.trex = function(e) {
                var r = e.id;
                return t.box(t.types.trex, new Uint8Array([0, 0, 0, 0, r &gt;&gt; 24, r &gt;&gt; 16 &amp; 255, r &gt;&gt; 8 &amp; 255, 255 &amp; r, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1]))
            }
            ,
            t.trun = function(e, r) {
                var i, n, a, s, o, l, u = e.samples || [], h = u.length, d = 12 + 16 * h, c = new Uint8Array(d);
                for (r += 8 + d,
                c.set([&quot;video&quot; === e.type ? 1 : 0, 0, 15, 1, h &gt;&gt;&gt; 24 &amp; 255, h &gt;&gt;&gt; 16 &amp; 255, h &gt;&gt;&gt; 8 &amp; 255, 255 &amp; h, r &gt;&gt;&gt; 24 &amp; 255, r &gt;&gt;&gt; 16 &amp; 255, r &gt;&gt;&gt; 8 &amp; 255, 255 &amp; r], 0),
                i = 0; i &lt; h; i++)
                    a = (n = u[i]).duration,
                    s = n.size,
                    o = n.flags,
                    l = n.cts,
                    c.set([a &gt;&gt;&gt; 24 &amp; 255, a &gt;&gt;&gt; 16 &amp; 255, a &gt;&gt;&gt; 8 &amp; 255, 255 &amp; a, s &gt;&gt;&gt; 24 &amp; 255, s &gt;&gt;&gt; 16 &amp; 255, s &gt;&gt;&gt; 8 &amp; 255, 255 &amp; s, o.isLeading &lt;&lt; 2 | o.dependsOn, o.isDependedOn &lt;&lt; 6 | o.hasRedundancy &lt;&lt; 4 | o.paddingValue &lt;&lt; 1 | o.isNonSync, 61440 &amp; o.degradPrio, 15 &amp; o.degradPrio, l &gt;&gt;&gt; 24 &amp; 255, l &gt;&gt;&gt; 16 &amp; 255, l &gt;&gt;&gt; 8 &amp; 255, 255 &amp; l], 12 + 16 * i);
                return t.box(t.types.trun, c)
            }
            ,
            t.initSegment = function(e) {
                t.types || t.init();
                var r = t.moov(e);
                return Kt(t.FTYP, r)
            }
            ,
            t
        }();
        pn.types = void 0,
        pn.HDLR_TYPES = void 0,
        pn.STTS = void 0,
        pn.STSC = void 0,
        pn.STCO = void 0,
        pn.STSZ = void 0,
        pn.VMHD = void 0,
        pn.SMHD = void 0,
        pn.STSD = void 0,
        pn.FTYP = void 0,
        pn.DINF = void 0;
        var yn = 9e4;
        function En(t, e, r, i) {
            void 0 === r &amp;&amp; (r = 1),
            void 0 === i &amp;&amp; (i = !1);
            var n = t * e * r;
            return i ? Math.round(n) : n
        }
        function Tn(t, e) {
            return void 0 === e &amp;&amp; (e = !1),
            En(t, 1e3, 1 / yn, e)
        }
        var Sn = null
          , Ln = null
          , An = function() {
            function t(t, e, r, i) {
                if (this.observer = void 0,
                this.config = void 0,
                this.typeSupported = void 0,
                this.ISGenerated = !1,
                this._initPTS = null,
                this._initDTS = null,
                this.nextAvcDts = null,
                this.nextAudioPts = null,
                this.videoSampleDuration = null,
                this.isAudioContiguous = !1,
                this.isVideoContiguous = !1,
                this.videoTrackConfig = void 0,
                this.observer = t,
                this.config = e,
                this.typeSupported = r,
                this.ISGenerated = !1,
                null === Sn) {
                    var n = (navigator.userAgent || &quot;&quot;).match(/Chrome\/(\d+)/i);
                    Sn = n ? parseInt(n[1]) : 0
                }
                if (null === Ln) {
                    var a = navigator.userAgent.match(/Safari\/(\d+)/i);
                    Ln = a ? parseInt(a[1]) : 0
                }
            }
            var e = t.prototype;
            return e.destroy = function() {
                this.config = this.videoTrackConfig = this._initPTS = this._initDTS = null
            }
            ,
            e.resetTimeStamp = function(t) {
                w.log(&quot;[mp4-remuxer]: initPTS &amp; initDTS reset&quot;),
                this._initPTS = this._initDTS = t
            }
            ,
            e.resetNextTimestamp = function() {
                w.log(&quot;[mp4-remuxer]: reset next timestamp&quot;),
                this.isVideoContiguous = !1,
                this.isAudioContiguous = !1
            }
            ,
            e.resetInitSegment = function() {
                w.log(&quot;[mp4-remuxer]: ISGenerated flag reset&quot;),
                this.ISGenerated = !1,
                this.videoTrackConfig = void 0
            }
            ,
            e.getVideoStartPts = function(t) {
                var e = !1
                  , r = t.reduce((function(t, r) {
                    var i = r.pts - t;
                    return i &lt; -4294967296 ? (e = !0,
                    Rn(t, r.pts)) : i &gt; 0 ? t : r.pts
                }
                ), t[0].pts);
                return e &amp;&amp; w.debug(&quot;PTS rollover detected&quot;),
                r
            }
            ,
            e.remux = function(t, e, r, i, n, a, s, o) {
                var l, u, h, d, c, f, g = n, v = n, m = t.pid &gt; -1, p = e.pid &gt; -1, y = e.samples.length, E = t.samples.length &gt; 0, T = s &amp;&amp; y &gt; 0 || y &gt; 1;
                if ((!m || E) &amp;&amp; (!p || T) || this.ISGenerated || s) {
                    if (this.ISGenerated) {
                        var S, L, A, R, k = this.videoTrackConfig;
                        !k || e.width === k.width &amp;&amp; e.height === k.height &amp;&amp; (null == (S = e.pixelRatio) ? void 0 : S[0]) === (null == (L = k.pixelRatio) ? void 0 : L[0]) &amp;&amp; (null == (A = e.pixelRatio) ? void 0 : A[1]) === (null == (R = k.pixelRatio) ? void 0 : R[1]) || this.resetInitSegment()
                    } else
                        h = this.generateIS(t, e, n, a);
                    var b, D = this.isVideoContiguous, I = -1;
                    if (T &amp;&amp; (I = function(t) {
                        for (var e = 0; e &lt; t.length; e++)
                            if (t[e].key)
                                return e;
                        return -1
                    }(e.samples),
                    !D &amp;&amp; this.config.forceKeyFrameOnDiscontinuity))
                        if (f = !0,
                        I &gt; 0) {
                            w.warn(&quot;[mp4-remuxer]: Dropped &quot; + I + &quot; out of &quot; + y + &quot; video samples due to a missing keyframe&quot;);
                            var C = this.getVideoStartPts(e.samples);
                            e.samples = e.samples.slice(I),
                            e.dropped += I,
                            b = v += (e.samples[0].pts - C) / e.inputTimeScale
                        } else
                            -1 === I &amp;&amp; (w.warn(&quot;[mp4-remuxer]: No keyframe found out of &quot; + y + &quot; video samples&quot;),
                            f = !1);
                    if (this.ISGenerated) {
                        if (E &amp;&amp; T) {
                            var _ = this.getVideoStartPts(e.samples)
                              , x = (Rn(t.samples[0].pts, _) - _) / e.inputTimeScale;
                            g += Math.max(0, x),
                            v += Math.max(0, -x)
                        }
                        if (E) {
                            if (t.samplerate || (w.warn(&quot;[mp4-remuxer]: regenerate InitSegment as audio detected&quot;),
                            h = this.generateIS(t, e, n, a)),
                            u = this.remuxAudio(t, g, this.isAudioContiguous, a, p || T || o === Ce ? v : void 0),
                            T) {
                                var P = u ? u.endPTS - u.startPTS : 0;
                                e.inputTimeScale || (w.warn(&quot;[mp4-remuxer]: regenerate InitSegment as video detected&quot;),
                                h = this.generateIS(t, e, n, a)),
                                l = this.remuxVideo(e, v, D, P)
                            }
                        } else
                            T &amp;&amp; (l = this.remuxVideo(e, v, D, 0));
                        l &amp;&amp; (l.firstKeyFrame = I,
                        l.independent = -1 !== I,
                        l.firstKeyFramePTS = b)
                    }
                }
                return this.ISGenerated &amp;&amp; this._initPTS &amp;&amp; this._initDTS &amp;&amp; (r.samples.length &amp;&amp; (c = kn(r, n, this._initPTS, this._initDTS)),
                i.samples.length &amp;&amp; (d = bn(i, n, this._initPTS))),
                {
                    audio: u,
                    video: l,
                    initSegment: h,
                    independent: f,
                    text: d,
                    id3: c
                }
            }
            ,
            e.generateIS = function(t, e, r, i) {
                var n, a, s, o = t.samples, l = e.samples, u = this.typeSupported, h = {}, d = this._initPTS, c = !d || i, f = &quot;audio/mp4&quot;;
                if (c &amp;&amp; (n = a = 1 / 0),
                t.config &amp;&amp; o.length) {
                    switch (t.timescale = t.samplerate,
                    t.segmentCodec) {
                    case &quot;mp3&quot;:
                        u.mpeg ? (f = &quot;audio/mpeg&quot;,
                        t.codec = &quot;&quot;) : u.mp3 &amp;&amp; (t.codec = &quot;mp3&quot;);
                        break;
                    case &quot;ac3&quot;:
                        t.codec = &quot;ac-3&quot;
                    }
                    h.audio = {
                        id: &quot;audio&quot;,
                        container: f,
                        codec: t.codec,
                        initSegment: &quot;mp3&quot; === t.segmentCodec &amp;&amp; u.mpeg ? new Uint8Array(0) : pn.initSegment([t]),
                        metadata: {
                            channelCount: t.channelCount
                        }
                    },
                    c &amp;&amp; (s = t.inputTimeScale,
                    d &amp;&amp; s === d.timescale ? c = !1 : n = a = o[0].pts - Math.round(s * r))
                }
                if (e.sps &amp;&amp; e.pps &amp;&amp; l.length) {
                    if (e.timescale = e.inputTimeScale,
                    h.video = {
                        id: &quot;main&quot;,
                        container: &quot;video/mp4&quot;,
                        codec: e.codec,
                        initSegment: pn.initSegment([e]),
                        metadata: {
                            width: e.width,
                            height: e.height
                        }
                    },
                    c)
                        if (s = e.inputTimeScale,
                        d &amp;&amp; s === d.timescale)
                            c = !1;
                        else {
                            var g = this.getVideoStartPts(l)
                              , v = Math.round(s * r);
                            a = Math.min(a, Rn(l[0].dts, g) - v),
                            n = Math.min(n, g - v)
                        }
                    this.videoTrackConfig = {
                        width: e.width,
                        height: e.height,
                        pixelRatio: e.pixelRatio
                    }
                }
                if (Object.keys(h).length)
                    return this.ISGenerated = !0,
                    c ? (this._initPTS = {
                        baseTime: n,
                        timescale: s
                    },
                    this._initDTS = {
                        baseTime: a,
                        timescale: s
                    }) : n = s = void 0,
                    {
                        tracks: h,
                        initPTS: n,
                        timescale: s
                    }
            }
            ,
            e.remuxVideo = function(t, e, r, i) {
                var n, a, s = t.inputTimeScale, l = t.samples, u = [], h = l.length, d = this._initPTS, c = this.nextAvcDts, f = 8, g = this.videoSampleDuration, v = Number.POSITIVE_INFINITY, m = Number.NEGATIVE_INFINITY, p = !1;
                if (!r || null === c) {
                    var y = e * s
                      , E = l[0].pts - Rn(l[0].dts, l[0].pts);
                    Sn &amp;&amp; null !== c &amp;&amp; Math.abs(y - E - c) &lt; 15e3 ? r = !0 : c = y - E
                }
                for (var T = d.baseTime * s / d.timescale, R = 0; R &lt; h; R++) {
                    var k = l[R];
                    k.pts = Rn(k.pts - T, c),
                    k.dts = Rn(k.dts - T, c),
                    k.dts &lt; l[R &gt; 0 ? R - 1 : R].dts &amp;&amp; (p = !0)
                }
                p &amp;&amp; l.sort((function(t, e) {
                    var r = t.dts - e.dts
                      , i = t.pts - e.pts;
                    return r || i
                }
                )),
                n = l[0].dts;
                var b = (a = l[l.length - 1].dts) - n
                  , D = b ? Math.round(b / (h - 1)) : g || t.inputTimeScale / 30;
                if (r) {
                    var I = n - c
                      , C = I &gt; D
                      , _ = I &lt; -1;
                    if ((C || _) &amp;&amp; (C ? w.warn(&quot;AVC: &quot; + Tn(I, !0) + &quot; ms (&quot; + I + &quot;dts) hole between fragments detected at &quot; + e.toFixed(3)) : w.warn(&quot;AVC: &quot; + Tn(-I, !0) + &quot; ms (&quot; + I + &quot;dts) overlapping between fragments detected at &quot; + e.toFixed(3)),
                    !_ || c &gt;= l[0].pts || Sn)) {
                        n = c;
                        var x = l[0].pts - I;
                        if (C)
                            l[0].dts = n,
                            l[0].pts = x;
                        else
                            for (var P = 0; P &lt; l.length &amp;&amp; !(l[P].dts &gt; x); P++)
                                l[P].dts -= I,
                                l[P].pts -= I;
                        w.log(&quot;Video: Initial PTS/DTS adjusted: &quot; + Tn(x, !0) + &quot;/&quot; + Tn(n, !0) + &quot;, delta: &quot; + Tn(I, !0) + &quot; ms&quot;)
                    }
                }
                for (var F = 0, M = 0, O = n = Math.max(0, n), N = 0; N &lt; h; N++) {
                    for (var U = l[N], B = U.units, G = B.length, K = 0, H = 0; H &lt; G; H++)
                        K += B[H].data.length;
                    M += K,
                    F += G,
                    U.length = K,
                    U.dts &lt; O ? (U.dts = O,
                    O += D / 4 | 0 || 1) : O = U.dts,
                    v = Math.min(U.pts, v),
                    m = Math.max(U.pts, m)
                }
                a = l[h - 1].dts;
                var V, Y = M + 4 * F + 8;
                try {
                    V = new Uint8Array(Y)
                } catch (t) {
                    return void this.observer.emit(S.ERROR, S.ERROR, {
                        type: L.MUX_ERROR,
                        details: A.REMUX_ALLOC_ERROR,
                        fatal: !1,
                        error: t,
                        bytes: Y,
                        reason: &quot;fail allocating video mdat &quot; + Y
                    })
                }
                var W = new DataView(V.buffer);
                W.setUint32(0, Y),
                V.set(pn.types.mdat, 4);
                for (var j = !1, q = Number.POSITIVE_INFINITY, X = Number.POSITIVE_INFINITY, z = Number.NEGATIVE_INFINITY, Q = Number.NEGATIVE_INFINITY, J = 0; J &lt; h; J++) {
                    for (var $ = l[J], Z = $.units, tt = 0, et = 0, rt = Z.length; et &lt; rt; et++) {
                        var it = Z[et]
                          , nt = it.data
                          , at = it.data.byteLength;
                        W.setUint32(f, at),
                        f += 4,
                        V.set(nt, f),
                        f += at,
                        tt += 4 + at
                    }
                    var st = void 0;
                    if (J &lt; h - 1)
                        g = l[J + 1].dts - $.dts,
                        st = l[J + 1].pts - $.pts;
                    else {
                        var ot = this.config
                          , lt = J &gt; 0 ? $.dts - l[J - 1].dts : D;
                        if (st = J &gt; 0 ? $.pts - l[J - 1].pts : D,
                        ot.stretchShortVideoTrack &amp;&amp; null !== this.nextAudioPts) {
                            var ut = Math.floor(ot.maxBufferHole * s)
                              , ht = (i ? v + i * s : this.nextAudioPts) - $.pts;
                            ht &gt; ut ? ((g = ht - lt) &lt; 0 ? g = lt : j = !0,
                            w.log(&quot;[mp4-remuxer]: It is approximately &quot; + ht / 90 + &quot; ms to the next segment; using duration &quot; + g / 90 + &quot; ms for the last video frame.&quot;)) : g = lt
                        } else
                            g = lt
                    }
                    var dt = Math.round($.pts - $.dts);
                    q = Math.min(q, g),
                    z = Math.max(z, g),
                    X = Math.min(X, st),
                    Q = Math.max(Q, st),
                    u.push(new In($.key,g,tt,dt))
                }
                if (u.length)
                    if (Sn) {
                        if (Sn &lt; 70) {
                            var ct = u[0].flags;
                            ct.dependsOn = 2,
                            ct.isNonSync = 0
                        }
                    } else if (Ln &amp;&amp; Q - X &lt; z - q &amp;&amp; D / z &lt; .025 &amp;&amp; 0 === u[0].cts) {
                        w.warn(&quot;Found irregular gaps in sample duration. Using PTS instead of DTS to determine MP4 sample duration.&quot;);
                        for (var ft = n, gt = 0, vt = u.length; gt &lt; vt; gt++) {
                            var mt = ft + u[gt].duration
                              , pt = ft + u[gt].cts;
                            if (gt &lt; vt - 1) {
                                var yt = mt + u[gt + 1].cts;
                                u[gt].duration = yt - pt
                            } else
                                u[gt].duration = gt ? u[gt - 1].duration : D;
                            u[gt].cts = 0,
                            ft = mt
                        }
                    }
                g = j || !g ? D : g,
                this.nextAvcDts = c = a + g,
                this.videoSampleDuration = g,
                this.isVideoContiguous = !0;
                var Et = {
                    data1: pn.moof(t.sequenceNumber++, n, o({}, t, {
                        samples: u
                    })),
                    data2: V,
                    startPTS: v / s,
                    endPTS: (m + g) / s,
                    startDTS: n / s,
                    endDTS: c / s,
                    type: &quot;video&quot;,
                    hasAudio: !1,
                    hasVideo: !0,
                    nb: u.length,
                    dropped: t.dropped
                };
                return t.samples = [],
                t.dropped = 0,
                Et
            }
            ,
            e.getSamplesPerFrame = function(t) {
                switch (t.segmentCodec) {
                case &quot;mp3&quot;:
                    return 1152;
                case &quot;ac3&quot;:
                    return 1536;
                default:
                    return 1024
                }
            }
            ,
            e.remuxAudio = function(t, e, r, i, n) {
                var a = t.inputTimeScale
                  , s = a / (t.samplerate ? t.samplerate : a)
                  , l = this.getSamplesPerFrame(t)
                  , u = l * s
                  , h = this._initPTS
                  , d = &quot;mp3&quot; === t.segmentCodec &amp;&amp; this.typeSupported.mpeg
                  , c = []
                  , f = void 0 !== n
                  , g = t.samples
                  , v = d ? 0 : 8
                  , m = this.nextAudioPts || -1
                  , p = e * a
                  , y = h.baseTime * a / h.timescale;
                if (this.isAudioContiguous = r = r || g.length &amp;&amp; m &gt; 0 &amp;&amp; (i &amp;&amp; Math.abs(p - m) &lt; 9e3 || Math.abs(Rn(g[0].pts - y, p) - m) &lt; 20 * u),
                g.forEach((function(t) {
                    t.pts = Rn(t.pts - y, p)
                }
                )),
                !r || m &lt; 0) {
                    if (g = g.filter((function(t) {
                        return t.pts &gt;= 0
                    }
                    )),
                    !g.length)
                        return;
                    m = 0 === n ? 0 : i &amp;&amp; !f ? Math.max(0, p) : g[0].pts
                }
                if (&quot;aac&quot; === t.segmentCodec)
                    for (var E = this.config.maxAudioFramesDrift, T = 0, R = m; T &lt; g.length; T++) {
                        var k = g[T]
                          , b = k.pts
                          , D = b - R
                          , I = Math.abs(1e3 * D / a);
                        if (D &lt;= -E * u &amp;&amp; f)
                            0 === T &amp;&amp; (w.warn(&quot;Audio frame @ &quot; + (b / a).toFixed(3) + &quot;s overlaps nextAudioPts by &quot; + Math.round(1e3 * D / a) + &quot; ms.&quot;),
                            this.nextAudioPts = m = R = b);
                        else if (D &gt;= E * u &amp;&amp; I &lt; 1e4 &amp;&amp; f) {
                            var C = Math.round(D / u);
                            (R = b - C * u) &lt; 0 &amp;&amp; (C--,
                            R += u),
                            0 === T &amp;&amp; (this.nextAudioPts = m = R),
                            w.warn(&quot;[mp4-remuxer]: Injecting &quot; + C + &quot; audio frame @ &quot; + (R / a).toFixed(3) + &quot;s due to &quot; + Math.round(1e3 * D / a) + &quot; ms gap.&quot;);
                            for (var _ = 0; _ &lt; C; _++) {
                                var x = Math.max(R, 0)
                                  , P = vn.getSilentFrame(t.manifestCodec || t.codec, t.channelCount);
                                P || (w.log(&quot;[mp4-remuxer]: Unable to get silent frame for given audio codec; duplicating last frame instead.&quot;),
                                P = k.unit.subarray()),
                                g.splice(T, 0, {
                                    unit: P,
                                    pts: x
                                }),
                                R += u,
                                T++
                            }
                        }
                        k.pts = R,
                        R += u
                    }
                for (var F, M = null, O = null, N = 0, U = g.length; U--; )
                    N += g[U].unit.byteLength;
                for (var B = 0, G = g.length; B &lt; G; B++) {
                    var K = g[B]
                      , H = K.unit
                      , V = K.pts;
                    if (null !== O)
                        c[B - 1].duration = Math.round((V - O) / s);
                    else {
                        if (r &amp;&amp; &quot;aac&quot; === t.segmentCodec &amp;&amp; (V = m),
                        M = V,
                        !(N &gt; 0))
                            return;
                        N += v;
                        try {
                            F = new Uint8Array(N)
                        } catch (t) {
                            return void this.observer.emit(S.ERROR, S.ERROR, {
                                type: L.MUX_ERROR,
                                details: A.REMUX_ALLOC_ERROR,
                                fatal: !1,
                                error: t,
                                bytes: N,
                                reason: &quot;fail allocating audio mdat &quot; + N
                            })
                        }
                        d || (new DataView(F.buffer).setUint32(0, N),
                        F.set(pn.types.mdat, 4))
                    }
                    F.set(H, v);
                    var Y = H.byteLength;
                    v += Y,
                    c.push(new In(!0,l,Y,0)),
                    O = V
                }
                var W = c.length;
                if (W) {
                    var j = c[c.length - 1];
                    this.nextAudioPts = m = O + s * j.duration;
                    var q = d ? new Uint8Array(0) : pn.moof(t.sequenceNumber++, M / s, o({}, t, {
                        samples: c
                    }));
                    t.samples = [];
                    var X = M / a
                      , z = m / a
                      , Q = {
                        data1: q,
                        data2: F,
                        startPTS: X,
                        endPTS: z,
                        startDTS: X,
                        endDTS: z,
                        type: &quot;audio&quot;,
                        hasAudio: !0,
                        hasVideo: !1,
                        nb: W
                    };
                    return this.isAudioContiguous = !0,
                    Q
                }
            }
            ,
            e.remuxEmptyAudio = function(t, e, r, i) {
                var n = t.inputTimeScale
                  , a = n / (t.samplerate ? t.samplerate : n)
                  , s = this.nextAudioPts
                  , o = this._initDTS
                  , l = 9e4 * o.baseTime / o.timescale
                  , u = (null !== s ? s : i.startDTS * n) + l
                  , h = i.endDTS * n + l
                  , d = 1024 * a
                  , c = Math.ceil((h - u) / d)
                  , f = vn.getSilentFrame(t.manifestCodec || t.codec, t.channelCount);
                if (w.warn(&quot;[mp4-remuxer]: remux empty Audio&quot;),
                f) {
                    for (var g = [], v = 0; v &lt; c; v++) {
                        var m = u + v * d;
                        g.push({
                            unit: f,
                            pts: m,
                            dts: m
                        })
                    }
                    return t.samples = g,
                    this.remuxAudio(t, e, r, !1)
                }
                w.trace(&quot;[mp4-remuxer]: Unable to remuxEmptyAudio since we were unable to get a silent frame for given audio codec&quot;)
            }
            ,
            t
        }();
        function Rn(t, e) {
            var r;
            if (null === e)
                return t;
            for (r = e &lt; t ? -8589934592 : 8589934592; Math.abs(t - e) &gt; 4294967296; )
                t += r;
            return t
        }
        function kn(t, e, r, i) {
            var n = t.samples.length;
            if (n) {
                for (var a = t.inputTimeScale, s = 0; s &lt; n; s++) {
                    var o = t.samples[s];
                    o.pts = Rn(o.pts - r.baseTime * a / r.timescale, e * a) / a,
                    o.dts = Rn(o.dts - i.baseTime * a / i.timescale, e * a) / a
                }
                var l = t.samples;
                return t.samples = [],
                {
                    samples: l
                }
            }
        }
        function bn(t, e, r) {
            var i = t.samples.length;
            if (i) {
                for (var n = t.inputTimeScale, a = 0; a &lt; i; a++) {
                    var s = t.samples[a];
                    s.pts = Rn(s.pts - r.baseTime * n / r.timescale, e * n) / n
                }
                t.samples.sort((function(t, e) {
                    return t.pts - e.pts
                }
                ));
                var o = t.samples;
                return t.samples = [],
                {
                    samples: o
                }
            }
        }
        var Dn, In = function(t, e, r, i) {
            this.size = void 0,
            this.duration = void 0,
            this.cts = void 0,
            this.flags = void 0,
            this.duration = e,
            this.size = r,
            this.cts = i,
            this.flags = {
                isLeading: 0,
                isDependedOn: 0,
                hasRedundancy: 0,
                degradPrio: 0,
                dependsOn: t ? 2 : 1,
                isNonSync: t ? 0 : 1
            }
        }, wn = function() {
            function t() {
                this.emitInitSegment = !1,
                this.audioCodec = void 0,
                this.videoCodec = void 0,
                this.initData = void 0,
                this.initPTS = null,
                this.initTracks = void 0,
                this.lastEndTime = null
            }
            var e = t.prototype;
            return e.destroy = function() {}
            ,
            e.resetTimeStamp = function(t) {
                this.initPTS = t,
                this.lastEndTime = null
            }
            ,
            e.resetNextTimestamp = function() {
                this.lastEndTime = null
            }
            ,
            e.resetInitSegment = function(t, e, r, i) {
                this.audioCodec = e,
                this.videoCodec = r,
                this.generateInitSegment(function(t, e) {
                    if (!t || !e)
                        return t;
                    var r = e.keyId;
                    return r &amp;&amp; e.isCommonEncryption &amp;&amp; xt(t, [&quot;moov&quot;, &quot;trak&quot;]).forEach((function(t) {
                        var e = xt(t, [&quot;mdia&quot;, &quot;minf&quot;, &quot;stbl&quot;, &quot;stsd&quot;])[0].subarray(8)
                          , i = xt(e, [&quot;enca&quot;])
                          , n = i.length &gt; 0;
                        n || (i = xt(e, [&quot;encv&quot;])),
                        i.forEach((function(t) {
                            xt(n ? t.subarray(28) : t.subarray(78), [&quot;sinf&quot;]).forEach((function(t) {
                                var e = Bt(t);
                                if (e) {
                                    var i = e.subarray(8, 24);
                                    i.some((function(t) {
                                        return 0 !== t
                                    }
                                    )) || (w.log(&quot;[eme] Patching keyId in &#39;enc&quot; + (n ? &quot;a&quot; : &quot;v&quot;) + &quot;&gt;sinf&gt;&gt;tenc&#39; box: &quot; + Lt(i) + &quot; -&gt; &quot; + Lt(r)),
                                    e.set(r, 8))
                                }
                            }
                            ))
                        }
                        ))
                    }
                    )),
                    t
                }(t, i)),
                this.emitInitSegment = !0
            }
            ,
            e.generateInitSegment = function(t) {
                var e = this.audioCodec
                  , r = this.videoCodec;
                if (null == t || !t.byteLength)
                    return this.initTracks = void 0,
                    void (this.initData = void 0);
                var i = this.initData = Ft(t);
                i.audio &amp;&amp; (e = Cn(i.audio, O)),
                i.video &amp;&amp; (r = Cn(i.video, N));
                var n = {};
                i.audio &amp;&amp; i.video ? n.audiovideo = {
                    container: &quot;video/mp4&quot;,
                    codec: e + &quot;,&quot; + r,
                    initSegment: t,
                    id: &quot;main&quot;
                } : i.audio ? n.audio = {
                    container: &quot;audio/mp4&quot;,
                    codec: e,
                    initSegment: t,
                    id: &quot;audio&quot;
                } : i.video ? n.video = {
                    container: &quot;video/mp4&quot;,
                    codec: r,
                    initSegment: t,
                    id: &quot;main&quot;
                } : w.warn(&quot;[passthrough-remuxer.ts]: initSegment does not contain moov or trak boxes.&quot;),
                this.initTracks = n
            }
            ,
            e.remux = function(t, e, r, i, n, a) {
                var s, o, l = this.initPTS, u = this.lastEndTime, h = {
                    audio: void 0,
                    video: void 0,
                    text: i,
                    id3: r,
                    initSegment: void 0
                };
                y(u) || (u = this.lastEndTime = n || 0);
                var d = e.samples;
                if (null == d || !d.length)
                    return h;
                var c = {
                    initPTS: void 0,
                    timescale: 1
                }
                  , f = this.initData;
                if (null != (s = f) &amp;&amp; s.length || (this.generateInitSegment(d),
                f = this.initData),
                null == (o = f) || !o.length)
                    return w.warn(&quot;[passthrough-remuxer.ts]: Failed to generate initSegment.&quot;),
                    h;
                this.emitInitSegment &amp;&amp; (c.tracks = this.initTracks,
                this.emitInitSegment = !1);
                var g = function(t, e) {
                    for (var r = 0, i = 0, n = 0, a = xt(t, [&quot;moof&quot;, &quot;traf&quot;]), s = 0; s &lt; a.length; s++) {
                        var o = a[s]
                          , l = xt(o, [&quot;tfhd&quot;])[0]
                          , u = e[It(l, 4)];
                        if (u) {
                            var h = u.default
                              , d = It(l, 0) | (null == h ? void 0 : h.flags)
                              , c = null == h ? void 0 : h.duration;
                            8 &amp; d &amp;&amp; (c = It(l, 2 &amp; d ? 12 : 8));
                            for (var f = u.timescale || 9e4, g = xt(o, [&quot;trun&quot;]), v = 0; v &lt; g.length; v++)
                                !(r = Gt(g[v])) &amp;&amp; c &amp;&amp; (r = c * It(g[v], 4)),
                                u.type === N ? i += r / f : u.type === O &amp;&amp; (n += r / f)
                        }
                    }
                    if (0 === i &amp;&amp; 0 === n) {
                        for (var m = 1 / 0, p = 0, E = 0, T = xt(t, [&quot;sidx&quot;]), S = 0; S &lt; T.length; S++) {
                            var L = Pt(T[S]);
                            if (null != L &amp;&amp; L.references) {
                                m = Math.min(m, L.earliestPresentationTime / L.timescale);
                                var A = L.references.reduce((function(t, e) {
                                    return t + e.info.duration || 0
                                }
                                ), 0);
                                E = (p = Math.max(p, A + L.earliestPresentationTime / L.timescale)) - m
                            }
                        }
                        if (E &amp;&amp; y(E))
                            return E
                    }
                    return i || n
                }(d, f)
                  , v = function(t, e) {
                    return xt(e, [&quot;moof&quot;, &quot;traf&quot;]).reduce((function(e, r) {
                        var i = xt(r, [&quot;tfdt&quot;])[0]
                          , n = i[0]
                          , a = xt(r, [&quot;tfhd&quot;]).reduce((function(e, r) {
                            var a = It(r, 4)
                              , s = t[a];
                            if (s) {
                                var o = It(i, 4);
                                if (1 === n) {
                                    if (o === At)
                                        return w.warn(&quot;[mp4-demuxer]: Ignoring assumed invalid signed 64-bit track fragment decode time&quot;),
                                        e;
                                    o *= At + 1,
                                    o += It(i, 8)
                                }
                                var l = o / (s.timescale || 9e4);
                                if (y(l) &amp;&amp; (null === e || l &lt; e))
                                    return l
                            }
                            return e
                        }
                        ), null);
                        return null !== a &amp;&amp; y(a) &amp;&amp; (null === e || a &lt; e) ? a : e
                    }
                    ), null)
                }(f, d)
                  , m = null === v ? n : v;
                (function(t, e, r, i) {
                    if (null === t)
                        return !0;
                    var n = Math.max(i, 1)
                      , a = e - t.baseTime / t.timescale;
                    return Math.abs(a - r) &gt; n
                }(l, m, n, g) || c.timescale !== l.timescale &amp;&amp; a) &amp;&amp; (c.initPTS = m - n,
                l &amp;&amp; 1 === l.timescale &amp;&amp; w.warn(&quot;Adjusting initPTS by &quot; + (c.initPTS - l.baseTime)),
                this.initPTS = l = {
                    baseTime: c.initPTS,
                    timescale: 1
                });
                var p = t ? m - l.baseTime / l.timescale : u
                  , E = p + g;
                !function(t, e, r) {
                    xt(e, [&quot;moof&quot;, &quot;traf&quot;]).forEach((function(e) {
                        xt(e, [&quot;tfhd&quot;]).forEach((function(i) {
                            var n = It(i, 4)
                              , a = t[n];
                            if (a) {
                                var s = a.timescale || 9e4;
                                xt(e, [&quot;tfdt&quot;]).forEach((function(t) {
                                    var e = t[0]
                                      , i = r * s;
                                    if (i) {
                                        var n = It(t, 4);
                                        if (0 === e)
                                            n -= i,
                                            _t(t, 4, n = Math.max(n, 0));
                                        else {
                                            n *= Math.pow(2, 32),
                                            n += It(t, 8),
                                            n -= i,
                                            n = Math.max(n, 0);
                                            var a = Math.floor(n / (At + 1))
                                              , o = Math.floor(n % (At + 1));
                                            _t(t, 4, a),
                                            _t(t, 8, o)
                                        }
                                    }
                                }
                                ))
                            }
                        }
                        ))
                    }
                    ))
                }(f, d, l.baseTime / l.timescale),
                g &gt; 0 ? this.lastEndTime = E : (w.warn(&quot;Duration parsed from mp4 should be greater than zero&quot;),
                this.resetNextTimestamp());
                var T = !!f.audio
                  , S = !!f.video
                  , L = &quot;&quot;;
                T &amp;&amp; (L += &quot;audio&quot;),
                S &amp;&amp; (L += &quot;video&quot;);
                var A = {
                    data1: d,
                    startPTS: p,
                    startDTS: p,
                    endPTS: E,
                    endDTS: E,
                    type: L,
                    hasAudio: T,
                    hasVideo: S,
                    nb: 1,
                    dropped: 0
                };
                return h.audio = &quot;audio&quot; === A.type ? A : void 0,
                h.video = &quot;audio&quot; !== A.type ? A : void 0,
                h.initSegment = c,
                h.id3 = kn(r, n, l, l),
                i.samples.length &amp;&amp; (h.text = bn(i, n, l)),
                h
            }
            ,
            t
        }();
        function Cn(t, e) {
            var r = null == t ? void 0 : t.codec;
            if (r &amp;&amp; r.length &gt; 4)
                return r;
            if (e === O) {
                if (&quot;ec-3&quot; === r || &quot;ac-3&quot; === r || &quot;alac&quot; === r)
                    return r;
                if (&quot;fLaC&quot; === r || &quot;Opus&quot; === r)
                    return he(r, !1);
                var i = &quot;mp4a.40.5&quot;;
                return w.info(&#39;Parsed audio codec &quot;&#39; + r + &#39;&quot; or audio object type not handled. Using &quot;&#39; + i + &#39;&quot;&#39;),
                i
            }
            return w.warn(&#39;Unhandled video codec &quot;&#39; + r + &#39;&quot;&#39;),
            &quot;hvc1&quot; === r || &quot;hev1&quot; === r ? &quot;hvc1.1.6.L120.90&quot; : &quot;av01&quot; === r ? &quot;av01.0.04M.08&quot; : &quot;avc1.42e01e&quot;
        }
        try {
            Dn = self.performance.now.bind(self.performance)
        } catch (t) {
            w.debug(&quot;Unable to use Performance API on this environment&quot;),
            Dn = null == j ? void 0 : j.Date.now
        }
        var _n = [{
            demux: Ji,
            remux: wn
        }, {
            demux: on,
            remux: An
        }, {
            demux: zi,
            remux: An
        }, {
            demux: gn,
            remux: An
        }];
        _n.splice(2, 0, {
            demux: Zi,
            remux: An
        });
        var xn = function() {
            function t(t, e, r, i, n) {
                this.async = !1,
                this.observer = void 0,
                this.typeSupported = void 0,
                this.config = void 0,
                this.vendor = void 0,
                this.id = void 0,
                this.demuxer = void 0,
                this.remuxer = void 0,
                this.decrypter = void 0,
                this.probe = void 0,
                this.decryptionPromise = null,
                this.transmuxConfig = void 0,
                this.currentTransmuxState = void 0,
                this.observer = t,
                this.typeSupported = e,
                this.config = r,
                this.vendor = i,
                this.id = n
            }
            var e = t.prototype;
            return e.configure = function(t) {
                this.transmuxConfig = t,
                this.decrypter &amp;&amp; this.decrypter.reset()
            }
            ,
            e.push = function(t, e, r, i) {
                var n = this
                  , a = r.transmuxing;
                a.executeStart = Dn();
                var s = new Uint8Array(t)
                  , o = this.currentTransmuxState
                  , l = this.transmuxConfig;
                i &amp;&amp; (this.currentTransmuxState = i);
                var u = i || o
                  , h = u.contiguous
                  , d = u.discontinuity
                  , c = u.trackSwitch
                  , f = u.accurateTimeOffset
                  , g = u.timeOffset
                  , v = u.initSegmentChange
                  , m = l.audioCodec
                  , p = l.videoCodec
                  , y = l.defaultInitPts
                  , E = l.duration
                  , T = l.initSegmentData
                  , R = function(t, e) {
                    var r = null;
                    return t.byteLength &gt; 0 &amp;&amp; null != (null == e ? void 0 : e.key) &amp;&amp; null !== e.iv &amp;&amp; null != e.method &amp;&amp; (r = e),
                    r
                }(s, e);
                if (R &amp;&amp; &quot;AES-128&quot; === R.method) {
                    var k = this.getDecrypter();
                    if (!k.isSync())
                        return this.decryptionPromise = k.webCryptoDecrypt(s, R.key.buffer, R.iv.buffer).then((function(t) {
                            var e = n.push(t, null, r);
                            return n.decryptionPromise = null,
                            e
                        }
                        )),
                        this.decryptionPromise;
                    var b = k.softwareDecrypt(s, R.key.buffer, R.iv.buffer);
                    if (r.part &gt; -1 &amp;&amp; (b = k.flush()),
                    !b)
                        return a.executeEnd = Dn(),
                        Pn(r);
                    s = new Uint8Array(b)
                }
                var D = this.needsProbing(d, c);
                if (D) {
                    var I = this.configureTransmuxer(s);
                    if (I)
                        return w.warn(&quot;[transmuxer] &quot; + I.message),
                        this.observer.emit(S.ERROR, S.ERROR, {
                            type: L.MEDIA_ERROR,
                            details: A.FRAG_PARSING_ERROR,
                            fatal: !1,
                            error: I,
                            reason: I.message
                        }),
                        a.executeEnd = Dn(),
                        Pn(r)
                }
                (d || c || v || D) &amp;&amp; this.resetInitSegment(T, m, p, E, e),
                (d || v || D) &amp;&amp; this.resetInitialTimestamp(y),
                h || this.resetContiguity();
                var C = this.transmux(s, R, g, f, r)
                  , _ = this.currentTransmuxState;
                return _.contiguous = !0,
                _.discontinuity = !1,
                _.trackSwitch = !1,
                a.executeEnd = Dn(),
                C
            }
            ,
            e.flush = function(t) {
                var e = this
                  , r = t.transmuxing;
                r.executeStart = Dn();
                var i = this.decrypter
                  , n = this.currentTransmuxState
                  , a = this.decryptionPromise;
                if (a)
                    return a.then((function() {
                        return e.flush(t)
                    }
                    ));
                var s = []
                  , o = n.timeOffset;
                if (i) {
                    var l = i.flush();
                    l &amp;&amp; s.push(this.push(l, null, t))
                }
                var u = this.demuxer
                  , h = this.remuxer;
                if (!u || !h)
                    return r.executeEnd = Dn(),
                    [Pn(t)];
                var d = u.flush(o);
                return Fn(d) ? d.then((function(r) {
                    return e.flushRemux(s, r, t),
                    s
                }
                )) : (this.flushRemux(s, d, t),
                s)
            }
            ,
            e.flushRemux = function(t, e, r) {
                var i = e.audioTrack
                  , n = e.videoTrack
                  , a = e.id3Track
                  , s = e.textTrack
                  , o = this.currentTransmuxState
                  , l = o.accurateTimeOffset
                  , u = o.timeOffset;
                w.log(&quot;[transmuxer.ts]: Flushed fragment &quot; + r.sn + (r.part &gt; -1 ? &quot; p: &quot; + r.part : &quot;&quot;) + &quot; of level &quot; + r.level);
                var h = this.remuxer.remux(i, n, a, s, u, l, !0, this.id);
                t.push({
                    remuxResult: h,
                    chunkMeta: r
                }),
                r.transmuxing.executeEnd = Dn()
            }
            ,
            e.resetInitialTimestamp = function(t) {
                var e = this.demuxer
                  , r = this.remuxer;
                e &amp;&amp; r &amp;&amp; (e.resetTimeStamp(t),
                r.resetTimeStamp(t))
            }
            ,
            e.resetContiguity = function() {
                var t = this.demuxer
                  , e = this.remuxer;
                t &amp;&amp; e &amp;&amp; (t.resetContiguity(),
                e.resetNextTimestamp())
            }
            ,
            e.resetInitSegment = function(t, e, r, i, n) {
                var a = this.demuxer
                  , s = this.remuxer;
                a &amp;&amp; s &amp;&amp; (a.resetInitSegment(t, e, r, i),
                s.resetInitSegment(t, e, r, n))
            }
            ,
            e.destroy = function() {
                this.demuxer &amp;&amp; (this.demuxer.destroy(),
                this.demuxer = void 0),
                this.remuxer &amp;&amp; (this.remuxer.destroy(),
                this.remuxer = void 0)
            }
            ,
            e.transmux = function(t, e, r, i, n) {
                return e &amp;&amp; &quot;SAMPLE-AES&quot; === e.method ? this.transmuxSampleAes(t, e, r, i, n) : this.transmuxUnencrypted(t, r, i, n)
            }
            ,
            e.transmuxUnencrypted = function(t, e, r, i) {
                var n = this.demuxer.demux(t, e, !1, !this.config.progressive)
                  , a = n.audioTrack
                  , s = n.videoTrack
                  , o = n.id3Track
                  , l = n.textTrack;
                return {
                    remuxResult: this.remuxer.remux(a, s, o, l, e, r, !1, this.id),
                    chunkMeta: i
                }
            }
            ,
            e.transmuxSampleAes = function(t, e, r, i, n) {
                var a = this;
                return this.demuxer.demuxSampleAes(t, e, r).then((function(t) {
                    return {
                        remuxResult: a.remuxer.remux(t.audioTrack, t.videoTrack, t.id3Track, t.textTrack, r, i, !1, a.id),
                        chunkMeta: n
                    }
                }
                ))
            }
            ,
            e.configureTransmuxer = function(t) {
                for (var e, r = this.config, i = this.observer, n = this.typeSupported, a = this.vendor, s = 0, o = _n.length; s &lt; o; s++) {
                    var l;
                    if (null != (l = _n[s].demux) &amp;&amp; l.probe(t)) {
                        e = _n[s];
                        break
                    }
                }
                if (!e)
                    return new Error(&quot;Failed to find demuxer by probing fragment data&quot;);
                var u = this.demuxer
                  , h = this.remuxer
                  , d = e.remux
                  , c = e.demux;
                h &amp;&amp; h instanceof d || (this.remuxer = new d(i,r,n,a)),
                u &amp;&amp; u instanceof c || (this.demuxer = new c(i,r,n),
                this.probe = c.probe)
            }
            ,
            e.needsProbing = function(t, e) {
                return !this.demuxer || !this.remuxer || t || e
            }
            ,
            e.getDecrypter = function() {
                var t = this.decrypter;
                return t || (t = this.decrypter = new ci(this.config)),
                t
            }
            ,
            t
        }()
          , Pn = function(t) {
            return {
                remuxResult: {},
                chunkMeta: t
            }
        };
        function Fn(t) {
            return &quot;then&quot;in t &amp;&amp; t.then instanceof Function
        }
        var Mn = function(t, e, r, i, n) {
            this.audioCodec = void 0,
            this.videoCodec = void 0,
            this.initSegmentData = void 0,
            this.duration = void 0,
            this.defaultInitPts = void 0,
            this.audioCodec = t,
            this.videoCodec = e,
            this.initSegmentData = r,
            this.duration = i,
            this.defaultInitPts = n || null
        }
          , On = function(t, e, r, i, n, a) {
            this.discontinuity = void 0,
            this.contiguous = void 0,
            this.accurateTimeOffset = void 0,
            this.trackSwitch = void 0,
            this.timeOffset = void 0,
            this.initSegmentChange = void 0,
            this.discontinuity = t,
            this.contiguous = e,
            this.accurateTimeOffset = r,
            this.trackSwitch = i,
            this.timeOffset = n,
            this.initSegmentChange = a
        }
          , Nn = {
            exports: {}
        };
        !function(t) {
            var e = Object.prototype.hasOwnProperty
              , r = &quot;~&quot;;
            function i() {}
            function n(t, e, r) {
                this.fn = t,
                this.context = e,
                this.once = r || !1
            }
            function a(t, e, i, a, s) {
                if (&quot;function&quot; != typeof i)
                    throw new TypeError(&quot;The listener must be a function&quot;);
                var o = new n(i,a || t,s)
                  , l = r ? r + e : e;
                return t._events[l] ? t._events[l].fn ? t._events[l] = [t._events[l], o] : t._events[l].push(o) : (t._events[l] = o,
                t._eventsCount++),
                t
            }
            function s(t, e) {
                0 == --t._eventsCount ? t._events = new i : delete t._events[e]
            }
            function o() {
                this._events = new i,
                this._eventsCount = 0
            }
            Object.create &amp;&amp; (i.prototype = Object.create(null),
            (new i).__proto__ || (r = !1)),
            o.prototype.eventNames = function() {
                var t, i, n = [];
                if (0 === this._eventsCount)
                    return n;
                for (i in t = this._events)
                    e.call(t, i) &amp;&amp; n.push(r ? i.slice(1) : i);
                return Object.getOwnPropertySymbols ? n.concat(Object.getOwnPropertySymbols(t)) : n
            }
            ,
            o.prototype.listeners = function(t) {
                var e = r ? r + t : t
                  , i = this._events[e];
                if (!i)
                    return [];
                if (i.fn)
                    return [i.fn];
                for (var n = 0, a = i.length, s = new Array(a); n &lt; a; n++)
                    s[n] = i[n].fn;
                return s
            }
            ,
            o.prototype.listenerCount = function(t) {
                var e = r ? r + t : t
                  , i = this._events[e];
                return i ? i.fn ? 1 : i.length : 0
            }
            ,
            o.prototype.emit = function(t, e, i, n, a, s) {
                var o = r ? r + t : t;
                if (!this._events[o])
                    return !1;
                var l, u, h = this._events[o], d = arguments.length;
                if (h.fn) {
                    switch (h.once &amp;&amp; this.removeListener(t, h.fn, void 0, !0),
                    d) {
                    case 1:
                        return h.fn.call(h.context),
                        !0;
                    case 2:
                        return h.fn.call(h.context, e),
                        !0;
                    case 3:
                        return h.fn.call(h.context, e, i),
                        !0;
                    case 4:
                        return h.fn.call(h.context, e, i, n),
                        !0;
                    case 5:
                        return h.fn.call(h.context, e, i, n, a),
                        !0;
                    case 6:
                        return h.fn.call(h.context, e, i, n, a, s),
                        !0
                    }
                    for (u = 1,
                    l = new Array(d - 1); u &lt; d; u++)
                        l[u - 1] = arguments[u];
                    h.fn.apply(h.context, l)
                } else {
                    var c, f = h.length;
                    for (u = 0; u &lt; f; u++)
                        switch (h[u].once &amp;&amp; this.removeListener(t, h[u].fn, void 0, !0),
                        d) {
                        case 1:
                            h[u].fn.call(h[u].context);
                            break;
                        case 2:
                            h[u].fn.call(h[u].context, e);
                            break;
                        case 3:
                            h[u].fn.call(h[u].context, e, i);
                            break;
                        case 4:
                            h[u].fn.call(h[u].context, e, i, n);
                            break;
                        default:
                            if (!l)
                                for (c = 1,
                                l = new Array(d - 1); c &lt; d; c++)
                                    l[c - 1] = arguments[c];
                            h[u].fn.apply(h[u].context, l)
                        }
                }
                return !0
            }
            ,
            o.prototype.on = function(t, e, r) {
                return a(this, t, e, r, !1)
            }
            ,
            o.prototype.once = function(t, e, r) {
                return a(this, t, e, r, !0)
            }
            ,
            o.prototype.removeListener = function(t, e, i, n) {
                var a = r ? r + t : t;
                if (!this._events[a])
                    return this;
                if (!e)
                    return s(this, a),
                    this;
                var o = this._events[a];
                if (o.fn)
                    o.fn !== e || n &amp;&amp; !o.once || i &amp;&amp; o.context !== i || s(this, a);
                else {
                    for (var l = 0, u = [], h = o.length; l &lt; h; l++)
                        (o[l].fn !== e || n &amp;&amp; !o[l].once || i &amp;&amp; o[l].context !== i) &amp;&amp; u.push(o[l]);
                    u.length ? this._events[a] = 1 === u.length ? u[0] : u : s(this, a)
                }
                return this
            }
            ,
            o.prototype.removeAllListeners = function(t) {
                var e;
                return t ? (e = r ? r + t : t,
                this._events[e] &amp;&amp; s(this, e)) : (this._events = new i,
                this._eventsCount = 0),
                this
            }
            ,
            o.prototype.off = o.prototype.removeListener,
            o.prototype.addListener = o.prototype.on,
            o.prefixed = r,
            o.EventEmitter = o,
            t.exports = o
        }(Nn);
        var Un = v(Nn.exports);
        function Bn(t, e) {
            if (!((r = e.remuxResult).audio || r.video || r.text || r.id3 || r.initSegment))
                return !1;
            var r, i = [], n = e.remuxResult, a = n.audio, s = n.video;
            return a &amp;&amp; Gn(i, a),
            s &amp;&amp; Gn(i, s),
            t.postMessage({
                event: &quot;transmuxComplete&quot;,
                data: e
            }, i),
            !0
        }
        function Gn(t, e) {
            e.data1 &amp;&amp; t.push(e.data1.buffer),
            e.data2 &amp;&amp; t.push(e.data2.buffer)
        }
        function Kn(t, e, r) {
            e.reduce((function(e, r) {
                return Bn(t, r) || e
            }
            ), !1) || t.postMessage({
                event: &quot;transmuxComplete&quot;,
                data: e[0]
            }),
            t.postMessage({
                event: &quot;flush&quot;,
                data: r
            })
        }
        void 0 !== e &amp;&amp; e &amp;&amp; function(t) {
            var e = new Un
              , r = function(e, r) {
                t.postMessage({
                    event: e,
                    data: r
                })
            };
            e.on(S.FRAG_DECRYPTED, r),
            e.on(S.ERROR, r);
            var i = function() {
                var t = function(t) {
                    var e = function(e) {
                        r(&quot;workerLog&quot;, {
                            logType: t,
                            message: e
                        })
                    };
                    w[t] = e
                };
                for (var e in w)
                    t(e)
            };
            t.addEventListener(&quot;message&quot;, (function(n) {
                var a = n.data;
                switch (a.cmd) {
                case &quot;init&quot;:
                    var s = JSON.parse(a.config);
                    t.transmuxer = new xn(e,a.typeSupported,s,&quot;&quot;,a.id),
                    I(s.debug, a.id),
                    i(),
                    r(&quot;init&quot;, null);
                    break;
                case &quot;configure&quot;:
                    t.transmuxer.configure(a.config);
                    break;
                case &quot;demux&quot;:
                    var o = t.transmuxer.push(a.data, a.decryptdata, a.chunkMeta, a.state);
                    Fn(o) ? (t.transmuxer.async = !0,
                    o.then((function(e) {
                        Bn(t, e)
                    }
                    )).catch((function(t) {
                        r(S.ERROR, {
                            type: L.MEDIA_ERROR,
                            details: A.FRAG_PARSING_ERROR,
                            chunkMeta: a.chunkMeta,
                            fatal: !1,
                            error: t,
                            err: t,
                            reason: &quot;transmuxer-worker push error&quot;
                        })
                    }
                    ))) : (t.transmuxer.async = !1,
                    Bn(t, o));
                    break;
                case &quot;flush&quot;:
                    var l = a.chunkMeta
                      , u = t.transmuxer.flush(l);
                    Fn(u) || t.transmuxer.async ? (Fn(u) || (u = Promise.resolve(u)),
                    u.then((function(e) {
                        Kn(t, e, l)
                    }
                    )).catch((function(t) {
                        r(S.ERROR, {
                            type: L.MEDIA_ERROR,
                            details: A.FRAG_PARSING_ERROR,
                            chunkMeta: a.chunkMeta,
                            fatal: !1,
                            error: t,
                            err: t,
                            reason: &quot;transmuxer-worker flush error&quot;
                        })
                    }
                    ))) : Kn(t, u, l)
                }
            }
            ))
        }(self);
        var Hn = function() {
            function e(e, r, i, n) {
                var a = this;
                this.error = null,
                this.hls = void 0,
                this.id = void 0,
                this.observer = void 0,
                this.frag = null,
                this.part = null,
                this.useWorker = void 0,
                this.workerContext = null,
                this.onwmsg = void 0,
                this.transmuxer = null,
                this.onTransmuxComplete = void 0,
                this.onFlush = void 0;
                var s = e.config;
                this.hls = e,
                this.id = r,
                this.useWorker = !!s.enableWorker,
                this.onTransmuxComplete = i,
                this.onFlush = n;
                var o = function(t, e) {
                    (e = e || {}).frag = a.frag,
                    e.id = a.id,
                    t === S.ERROR &amp;&amp; (a.error = e.error),
                    a.hls.trigger(t, e)
                };
                this.observer = new Un,
                this.observer.on(S.FRAG_DECRYPTED, o),
                this.observer.on(S.ERROR, o);
                var l, u, h, d, c = ee(s.preferManagedMediaSource) || {
                    isTypeSupported: function() {
                        return !1
                    }
                }, f = {
                    mpeg: c.isTypeSupported(&quot;audio/mpeg&quot;),
                    mp3: c.isTypeSupported(&#39;audio/mp4; codecs=&quot;mp3&quot;&#39;),
                    ac3: c.isTypeSupported(&#39;audio/mp4; codecs=&quot;ac-3&quot;&#39;)
                };
                if (!this.useWorker || &quot;undefined&quot; == typeof Worker || (s.workerPath,
                0))
                    this.transmuxer = new xn(this.observer,f,s,&quot;&quot;,r);
                else
                    try {
                        s.workerPath ? (w.log(&quot;loading Web Worker &quot; + s.workerPath + &#39; for &quot;&#39; + r + &#39;&quot;&#39;),
                        this.workerContext = (h = s.workerPath,
                        d = new self.URL(h,self.location.href).href,
                        {
                            worker: new self.Worker(d),
                            scriptURL: d
                        })) : (w.log(&#39;injecting Web Worker for &quot;&#39; + r + &#39;&quot;&#39;),
                        this.workerContext = (l = new self.Blob([&quot;var exports={};var module={exports:exports};function define(f){f()};define.amd=true;(&quot; + t.toString() + &quot;)(true);&quot;],{
                            type: &quot;text/javascript&quot;
                        }),
                        u = self.URL.createObjectURL(l),
                        {
                            worker: new self.Worker(u),
                            objectURL: u
                        })),
                        this.onwmsg = function(t) {
                            return a.onWorkerMessage(t)
                        }
                        ;
                        var g = this.workerContext.worker;
                        g.addEventListener(&quot;message&quot;, this.onwmsg),
                        g.onerror = function(t) {
                            var e = new Error(t.message + &quot;  (&quot; + t.filename + &quot;:&quot; + t.lineno + &quot;)&quot;);
                            s.enableWorker = !1,
                            w.warn(&#39;Error in &quot;&#39; + r + &#39;&quot; Web Worker, fallback to inline&#39;),
                            a.hls.trigger(S.ERROR, {
                                type: L.OTHER_ERROR,
                                details: A.INTERNAL_EXCEPTION,
                                fatal: !1,
                                event: &quot;demuxerWorker&quot;,
                                error: e
                            })
                        }
                        ,
                        g.postMessage({
                            cmd: &quot;init&quot;,
                            typeSupported: f,
                            vendor: &quot;&quot;,
                            id: r,
                            config: JSON.stringify(s)
                        })
                    } catch (t) {
                        w.warn(&#39;Error setting up &quot;&#39; + r + &#39;&quot; Web Worker, fallback to inline&#39;, t),
                        this.resetWorker(),
                        this.error = null,
                        this.transmuxer = new xn(this.observer,f,s,&quot;&quot;,r)
                    }
            }
            var r = e.prototype;
            return r.resetWorker = function() {
                if (this.workerContext) {
                    var t = this.workerContext
                      , e = t.worker
                      , r = t.objectURL;
                    r &amp;&amp; self.URL.revokeObjectURL(r),
                    e.removeEventListener(&quot;message&quot;, this.onwmsg),
                    e.onerror = null,
                    e.terminate(),
                    this.workerContext = null
                }
            }
            ,
            r.destroy = function() {
                if (this.workerContext)
                    this.resetWorker(),
                    this.onwmsg = void 0;
                else {
                    var t = this.transmuxer;
                    t &amp;&amp; (t.destroy(),
                    this.transmuxer = null)
                }
                var e = this.observer;
                e &amp;&amp; e.removeAllListeners(),
                this.frag = null,
                this.observer = null,
                this.hls = null
            }
            ,
            r.push = function(t, e, r, i, n, a, s, o, l, u) {
                var h, d, c = this;
                l.transmuxing.start = self.performance.now();
                var f = this.transmuxer
                  , g = a ? a.start : n.start
                  , v = n.decryptdata
                  , m = this.frag
                  , p = !(m &amp;&amp; n.cc === m.cc)
                  , y = !(m &amp;&amp; l.level === m.level)
                  , E = m ? l.sn - m.sn : -1
                  , T = this.part ? l.part - this.part.index : -1
                  , S = 0 === E &amp;&amp; l.id &gt; 1 &amp;&amp; l.id === (null == m ? void 0 : m.stats.chunkCount)
                  , L = !y &amp;&amp; (1 === E || 0 === E &amp;&amp; (1 === T || S &amp;&amp; T &lt;= 0))
                  , A = self.performance.now();
                (y || E || 0 === n.stats.parsing.start) &amp;&amp; (n.stats.parsing.start = A),
                !a || !T &amp;&amp; L || (a.stats.parsing.start = A);
                var R = !(m &amp;&amp; (null == (h = n.initSegment) ? void 0 : h.url) === (null == (d = m.initSegment) ? void 0 : d.url))
                  , k = new On(p,L,o,y,g,R);
                if (!L || p || R) {
                    w.log(&quot;[transmuxer-interface, &quot; + n.type + &quot;]: Starting new transmux session for sn: &quot; + l.sn + &quot; p: &quot; + l.part + &quot; level: &quot; + l.level + &quot; id: &quot; + l.id + &quot;\n        discontinuity: &quot; + p + &quot;\n        trackSwitch: &quot; + y + &quot;\n        contiguous: &quot; + L + &quot;\n        accurateTimeOffset: &quot; + o + &quot;\n        timeOffset: &quot; + g + &quot;\n        initSegmentChange: &quot; + R);
                    var b = new Mn(r,i,e,s,u);
                    this.configureTransmuxer(b)
                }
                if (this.frag = n,
                this.part = a,
                this.workerContext)
                    this.workerContext.worker.postMessage({
                        cmd: &quot;demux&quot;,
                        data: t,
                        decryptdata: v,
                        chunkMeta: l,
                        state: k
                    }, t instanceof ArrayBuffer ? [t] : []);
                else if (f) {
                    var D = f.push(t, v, l, k);
                    Fn(D) ? (f.async = !0,
                    D.then((function(t) {
                        c.handleTransmuxComplete(t)
                    }
                    )).catch((function(t) {
                        c.transmuxerError(t, l, &quot;transmuxer-interface push error&quot;)
                    }
                    ))) : (f.async = !1,
                    this.handleTransmuxComplete(D))
                }
            }
            ,
            r.flush = function(t) {
                var e = this;
                t.transmuxing.start = self.performance.now();
                var r = this.transmuxer;
                if (this.workerContext)
                    this.workerContext.worker.postMessage({
                        cmd: &quot;flush&quot;,
                        chunkMeta: t
                    });
                else if (r) {
                    var i = r.flush(t);
                    Fn(i) || r.async ? (Fn(i) || (i = Promise.resolve(i)),
                    i.then((function(r) {
                        e.handleFlushResult(r, t)
                    }
                    )).catch((function(r) {
                        e.transmuxerError(r, t, &quot;transmuxer-interface flush error&quot;)
                    }
                    ))) : this.handleFlushResult(i, t)
                }
            }
            ,
            r.transmuxerError = function(t, e, r) {
                this.hls &amp;&amp; (this.error = t,
                this.hls.trigger(S.ERROR, {
                    type: L.MEDIA_ERROR,
                    details: A.FRAG_PARSING_ERROR,
                    chunkMeta: e,
                    frag: this.frag || void 0,
                    fatal: !1,
                    error: t,
                    err: t,
                    reason: r
                }))
            }
            ,
            r.handleFlushResult = function(t, e) {
                var r = this;
                t.forEach((function(t) {
                    r.handleTransmuxComplete(t)
                }
                )),
                this.onFlush(e)
            }
            ,
            r.onWorkerMessage = function(t) {
                var e = t.data;
                if (null != e &amp;&amp; e.event) {
                    var r = this.hls;
                    if (this.hls)
                        switch (e.event) {
                        case &quot;init&quot;:
                            var i, n = null == (i = this.workerContext) ? void 0 : i.objectURL;
                            n &amp;&amp; self.URL.revokeObjectURL(n);
                            break;
                        case &quot;transmuxComplete&quot;:
                            this.handleTransmuxComplete(e.data);
                            break;
                        case &quot;flush&quot;:
                            this.onFlush(e.data);
                            break;
                        case &quot;workerLog&quot;:
                            w[e.data.logType] &amp;&amp; w[e.data.logType](e.data.message);
                            break;
                        default:
                            e.data = e.data || {},
                            e.data.frag = this.frag,
                            e.data.id = this.id,
                            r.trigger(e.event, e.data)
                        }
                } else
                    w.warn(&quot;worker message received with no &quot; + (e ? &quot;event name&quot; : &quot;data&quot;))
            }
            ,
            r.configureTransmuxer = function(t) {
                var e = this.transmuxer;
                this.workerContext ? this.workerContext.worker.postMessage({
                    cmd: &quot;configure&quot;,
                    config: t
                }) : e &amp;&amp; e.configure(t)
            }
            ,
            r.handleTransmuxComplete = function(t) {
                t.chunkMeta.transmuxing.end = self.performance.now(),
                this.onTransmuxComplete(t)
            }
            ,
            e
        }();
        function Vn(t, e) {
            if (t.length !== e.length)
                return !1;
            for (var r = 0; r &lt; t.length; r++)
                if (!Yn(t[r].attrs, e[r].attrs))
                    return !1;
            return !0
        }
        function Yn(t, e, r) {
            var i = t[&quot;STABLE-RENDITION-ID&quot;];
            return i &amp;&amp; !r ? i === e[&quot;STABLE-RENDITION-ID&quot;] : !(r || [&quot;LANGUAGE&quot;, &quot;NAME&quot;, &quot;CHARACTERISTICS&quot;, &quot;AUTOSELECT&quot;, &quot;DEFAULT&quot;, &quot;FORCED&quot;, &quot;ASSOC-LANGUAGE&quot;]).some((function(r) {
                return t[r] !== e[r]
            }
            ))
        }
        function Wn(t, e) {
            return e.label.toLowerCase() === t.name.toLowerCase() &amp;&amp; (!e.language || e.language.toLowerCase() === (t.lang || &quot;&quot;).toLowerCase())
        }
        var jn = function(t) {
            function e(e, r, i) {
                var n;
                return (n = t.call(this, e, r, i, &quot;[audio-stream-controller]&quot;, Ce) || this).videoBuffer = null,
                n.videoTrackCC = -1,
                n.waitingVideoCC = -1,
                n.bufferedTrack = null,
                n.switchingTrack = null,
                n.trackId = -1,
                n.waitingData = null,
                n.mainDetails = null,
                n.flushing = !1,
                n.bufferFlushed = !1,
                n.cachedTrackLoadedData = null,
                n._registerListeners(),
                n
            }
            l(e, t);
            var r = e.prototype;
            return r.onHandlerDestroying = function() {
                this._unregisterListeners(),
                t.prototype.onHandlerDestroying.call(this),
                this.mainDetails = null,
                this.bufferedTrack = null,
                this.switchingTrack = null
            }
            ,
            r._registerListeners = function() {
                var t = this.hls;
                t.on(S.MEDIA_ATTACHED, this.onMediaAttached, this),
                t.on(S.MEDIA_DETACHING, this.onMediaDetaching, this),
                t.on(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.on(S.LEVEL_LOADED, this.onLevelLoaded, this),
                t.on(S.AUDIO_TRACKS_UPDATED, this.onAudioTracksUpdated, this),
                t.on(S.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this),
                t.on(S.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this),
                t.on(S.ERROR, this.onError, this),
                t.on(S.BUFFER_RESET, this.onBufferReset, this),
                t.on(S.BUFFER_CREATED, this.onBufferCreated, this),
                t.on(S.BUFFER_FLUSHING, this.onBufferFlushing, this),
                t.on(S.BUFFER_FLUSHED, this.onBufferFlushed, this),
                t.on(S.INIT_PTS_FOUND, this.onInitPtsFound, this),
                t.on(S.FRAG_BUFFERED, this.onFragBuffered, this)
            }
            ,
            r._unregisterListeners = function() {
                var t = this.hls;
                t.off(S.MEDIA_ATTACHED, this.onMediaAttached, this),
                t.off(S.MEDIA_DETACHING, this.onMediaDetaching, this),
                t.off(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.off(S.LEVEL_LOADED, this.onLevelLoaded, this),
                t.off(S.AUDIO_TRACKS_UPDATED, this.onAudioTracksUpdated, this),
                t.off(S.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this),
                t.off(S.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this),
                t.off(S.ERROR, this.onError, this),
                t.off(S.BUFFER_RESET, this.onBufferReset, this),
                t.off(S.BUFFER_CREATED, this.onBufferCreated, this),
                t.off(S.BUFFER_FLUSHING, this.onBufferFlushing, this),
                t.off(S.BUFFER_FLUSHED, this.onBufferFlushed, this),
                t.off(S.INIT_PTS_FOUND, this.onInitPtsFound, this),
                t.off(S.FRAG_BUFFERED, this.onFragBuffered, this)
            }
            ,
            r.onInitPtsFound = function(t, e) {
                var r = e.frag
                  , i = e.id
                  , n = e.initPTS
                  , a = e.timescale;
                if (&quot;main&quot; === i) {
                    var s = r.cc;
                    this.initPTS[r.cc] = {
                        baseTime: n,
                        timescale: a
                    },
                    this.log(&quot;InitPTS for cc: &quot; + s + &quot; found from main: &quot; + n),
                    this.videoTrackCC = s,
                    this.state === Ri &amp;&amp; this.tick()
                }
            }
            ,
            r.startLoad = function(t) {
                if (!this.levels)
                    return this.startPosition = t,
                    void (this.state = gi);
                var e = this.lastCurrentTime;
                this.stopLoad(),
                this.setInterval(100),
                e &gt; 0 &amp;&amp; -1 === t ? (this.log(&quot;Override startPosition with lastCurrentTime @&quot; + e.toFixed(3)),
                t = e,
                this.state = vi) : (this.loadedmetadata = !1,
                this.state = Ei),
                this.nextLoadPosition = this.startPosition = this.lastCurrentTime = t,
                this.tick()
            }
            ,
            r.doTick = function() {
                switch (this.state) {
                case vi:
                    this.doTickIdle();
                    break;
                case Ei:
                    var e, r = this.levels, i = this.trackId, n = null == r || null == (e = r[i]) ? void 0 : e.details;
                    if (n) {
                        if (this.waitForCdnTuneIn(n))
                            break;
                        this.state = Ri
                    }
                    break;
                case yi:
                    var a, s = performance.now(), o = this.retryDate;
                    if (!o || s &gt;= o || null != (a = this.media) &amp;&amp; a.seeking) {
                        var l = this.levels
                          , u = this.trackId;
                        this.log(&quot;RetryDate reached, switch back to IDLE state&quot;),
                        this.resetStartWhenNotLoaded((null == l ? void 0 : l[u]) || null),
                        this.state = vi
                    }
                    break;
                case Ri:
                    var h = this.waitingData;
                    if (h) {
                        var d = h.frag
                          , c = h.part
                          , f = h.cache
                          , g = h.complete;
                        if (void 0 !== this.initPTS[d.cc]) {
                            this.waitingData = null,
                            this.waitingVideoCC = -1,
                            this.state = pi;
                            var v = {
                                frag: d,
                                part: c,
                                payload: f.flush(),
                                networkDetails: null
                            };
                            this._handleFragmentLoadProgress(v),
                            g &amp;&amp; t.prototype._handleFragmentLoadComplete.call(this, v)
                        } else if (this.videoTrackCC !== this.waitingVideoCC)
                            this.log(&quot;Waiting fragment cc (&quot; + d.cc + &quot;) cancelled because video is at cc &quot; + this.videoTrackCC),
                            this.clearWaitingFragment();
                        else {
                            var m = this.getLoadPosition()
                              , p = Jr.bufferInfo(this.mediaBuffer, m, this.config.maxBufferHole);
                            Er(p.end, this.config.maxFragLookUpTolerance, d) &lt; 0 &amp;&amp; (this.log(&quot;Waiting fragment cc (&quot; + d.cc + &quot;) @ &quot; + d.start + &quot; cancelled because another fragment at &quot; + p.end + &quot; is needed&quot;),
                            this.clearWaitingFragment())
                        }
                    } else
                        this.state = vi
                }
                this.onTickEnd()
            }
            ,
            r.clearWaitingFragment = function() {
                var t = this.waitingData;
                t &amp;&amp; (this.fragmentTracker.removeFragment(t.frag),
                this.waitingData = null,
                this.waitingVideoCC = -1,
                this.state = vi)
            }
            ,
            r.resetLoadingState = function() {
                this.clearWaitingFragment(),
                t.prototype.resetLoadingState.call(this)
            }
            ,
            r.onTickEnd = function() {
                var t = this.media;
                null != t &amp;&amp; t.readyState &amp;&amp; (this.lastCurrentTime = t.currentTime)
            }
            ,
            r.doTickIdle = function() {
                var t = this.hls
                  , e = this.levels
                  , r = this.media
                  , i = this.trackId
                  , n = t.config;
                if ((r || !this.startFragRequested &amp;&amp; n.startFragPrefetch) &amp;&amp; null != e &amp;&amp; e[i]) {
                    var a = e[i]
                      , s = a.details;
                    if (!s || s.live &amp;&amp; this.levelLastLoaded !== a || this.waitForCdnTuneIn(s))
                        this.state = Ei;
                    else {
                        var o = this.mediaBuffer ? this.mediaBuffer : this.media;
                        this.bufferFlushed &amp;&amp; o &amp;&amp; (this.bufferFlushed = !1,
                        this.afterBufferFlushed(o, O, Ce));
                        var l = this.getFwdBufferInfo(o, Ce);
                        if (null !== l) {
                            var u = this.bufferedTrack
                              , h = this.switchingTrack;
                            if (!h &amp;&amp; this._streamEnded(l, s))
                                return t.trigger(S.BUFFER_EOS, {
                                    type: &quot;audio&quot;
                                }),
                                void (this.state = Li);
                            var d = this.getFwdBufferInfo(this.videoBuffer ? this.videoBuffer : this.media, we)
                              , c = l.len
                              , f = this.getMaxBufferLength(null == d ? void 0 : d.len)
                              , g = s.fragments
                              , v = g[0].start
                              , m = this.flushing ? this.getLoadPosition() : l.end;
                            if (h &amp;&amp; r) {
                                var p = this.getLoadPosition();
                                u &amp;&amp; !Yn(h.attrs, u.attrs) &amp;&amp; (m = p),
                                s.PTSKnown &amp;&amp; p &lt; v &amp;&amp; (l.end &gt; v || l.nextStart) &amp;&amp; (this.log(&quot;Alt audio track ahead of main track, seek to start of alt audio track&quot;),
                                r.currentTime = v + .05)
                            }
                            if (!(c &gt;= f &amp;&amp; !h &amp;&amp; m &lt; g[g.length - 1].start)) {
                                var y = this.getNextFragment(m, s)
                                  , E = !1;
                                if (y &amp;&amp; this.isLoopLoading(y, m) &amp;&amp; (E = !!y.gap,
                                y = this.getNextFragmentLoopLoading(y, s, l, we, f)),
                                y) {
                                    var T = d &amp;&amp; y.start &gt; d.end + s.targetduration;
                                    if (T || (null == d || !d.len) &amp;&amp; l.len) {
                                        var L = this.getAppendedFrag(y.start, we);
                                        if (null === L)
                                            return;
                                        if (E || (E = !!L.gap || !!T &amp;&amp; 0 === d.len),
                                        T &amp;&amp; !E || E &amp;&amp; l.nextStart &amp;&amp; l.nextStart &lt; L.end)
                                            return
                                    }
                                    this.loadFragment(y, a, m)
                                } else
                                    this.bufferFlushed = !0
                            }
                        }
                    }
                }
            }
            ,
            r.getMaxBufferLength = function(e) {
                var r = t.prototype.getMaxBufferLength.call(this);
                return e ? Math.min(Math.max(r, e), this.config.maxMaxBufferLength) : r
            }
            ,
            r.onMediaDetaching = function() {
                this.videoBuffer = null,
                this.bufferFlushed = this.flushing = !1,
                t.prototype.onMediaDetaching.call(this)
            }
            ,
            r.onAudioTracksUpdated = function(t, e) {
                var r = e.audioTracks;
                this.resetTransmuxer(),
                this.levels = r.map((function(t) {
                    return new rr(t)
                }
                ))
            }
            ,
            r.onAudioTrackSwitching = function(t, e) {
                var r = !!e.url;
                this.trackId = e.id;
                var i = this.fragCurrent;
                i &amp;&amp; (i.abortRequests(),
                this.removeUnbufferedFrags(i.start)),
                this.resetLoadingState(),
                r ? this.setInterval(100) : this.resetTransmuxer(),
                r ? (this.switchingTrack = e,
                this.state = vi,
                this.flushAudioIfNeeded(e)) : (this.switchingTrack = null,
                this.bufferedTrack = e,
                this.state = gi),
                this.tick()
            }
            ,
            r.onManifestLoading = function() {
                this.fragmentTracker.removeAllFragments(),
                this.startPosition = this.lastCurrentTime = 0,
                this.bufferFlushed = this.flushing = !1,
                this.levels = this.mainDetails = this.waitingData = this.bufferedTrack = this.cachedTrackLoadedData = this.switchingTrack = null,
                this.startFragRequested = !1,
                this.trackId = this.videoTrackCC = this.waitingVideoCC = -1
            }
            ,
            r.onLevelLoaded = function(t, e) {
                this.mainDetails = e.details,
                null !== this.cachedTrackLoadedData &amp;&amp; (this.hls.trigger(S.AUDIO_TRACK_LOADED, this.cachedTrackLoadedData),
                this.cachedTrackLoadedData = null)
            }
            ,
            r.onAudioTrackLoaded = function(t, e) {
                var r;
                if (null != this.mainDetails) {
                    var i = this.levels
                      , n = e.details
                      , a = e.id;
                    if (i) {
                        this.log(&quot;Audio track &quot; + a + &quot; loaded [&quot; + n.startSN + &quot;,&quot; + n.endSN + &quot;]&quot; + (n.lastPartSn ? &quot;[part-&quot; + n.lastPartSn + &quot;-&quot; + n.lastPartIndex + &quot;]&quot; : &quot;&quot;) + &quot;,duration:&quot; + n.totalduration);
                        var s = i[a]
                          , o = 0;
                        if (n.live || null != (r = s.details) &amp;&amp; r.live) {
                            this.checkLiveUpdate(n);
                            var l, u = this.mainDetails;
                            if (n.deltaUpdateFailed || !u)
                                return;
                            !s.details &amp;&amp; n.hasProgramDateTime &amp;&amp; u.hasProgramDateTime ? (ii(n, u),
                            o = n.fragments[0].start) : o = this.alignPlaylists(n, s.details, null == (l = this.levelLastLoaded) ? void 0 : l.details)
                        }
                        s.details = n,
                        this.levelLastLoaded = s,
                        this.startFragRequested || !this.mainDetails &amp;&amp; n.live || this.setStartPosition(this.mainDetails || n, o),
                        this.state !== Ei || this.waitForCdnTuneIn(n) || (this.state = vi),
                        this.tick()
                    } else
                        this.warn(&quot;Audio tracks were reset while loading level &quot; + a)
                } else
                    this.cachedTrackLoadedData = e
            }
            ,
            r._handleFragmentLoadProgress = function(t) {
                var e, r = t.frag, i = t.part, n = t.payload, a = this.config, s = this.trackId, o = this.levels;
                if (o) {
                    var l = o[s];
                    if (l) {
                        var u = l.details;
                        if (!u)
                            return this.warn(&quot;Audio track details undefined on fragment load progress&quot;),
                            void this.removeUnbufferedFrags(r.start);
                        var h = a.defaultAudioCodec || l.audioCodec || &quot;mp4a.40.2&quot;
                          , d = this.transmuxer;
                        d || (d = this.transmuxer = new Hn(this.hls,Ce,this._handleTransmuxComplete.bind(this),this._handleTransmuxerFlush.bind(this)));
                        var c = this.initPTS[r.cc]
                          , f = null == (e = r.initSegment) ? void 0 : e.data;
                        if (void 0 !== c) {
                            var g = i ? i.index : -1
                              , v = -1 !== g
                              , m = new $r(r.level,r.sn,r.stats.chunkCount,n.byteLength,g,v);
                            d.push(n, f, h, &quot;&quot;, r, i, u.totalduration, !1, m, c)
                        } else
                            this.log(&quot;Unknown video PTS for cc &quot; + r.cc + &quot;, waiting for video PTS before demuxing audio frag &quot; + r.sn + &quot; of [&quot; + u.startSN + &quot; ,&quot; + u.endSN + &quot;],track &quot; + s),
                            (this.waitingData = this.waitingData || {
                                frag: r,
                                part: i,
                                cache: new Di,
                                complete: !1
                            }).cache.push(new Uint8Array(n)),
                            this.waitingVideoCC = this.videoTrackCC,
                            this.state = Ri
                    } else
                        this.warn(&quot;Audio track is undefined on fragment load progress&quot;)
                } else
                    this.warn(&quot;Audio tracks were reset while fragment load was in progress. Fragment &quot; + r.sn + &quot; of level &quot; + r.level + &quot; will not be buffered&quot;)
            }
            ,
            r._handleFragmentLoadComplete = function(e) {
                this.waitingData ? this.waitingData.complete = !0 : t.prototype._handleFragmentLoadComplete.call(this, e)
            }
            ,
            r.onBufferReset = function() {
                this.mediaBuffer = this.videoBuffer = null,
                this.loadedmetadata = !1
            }
            ,
            r.onBufferCreated = function(t, e) {
                var r = e.tracks.audio;
                r &amp;&amp; (this.mediaBuffer = r.buffer || null),
                e.tracks.video &amp;&amp; (this.videoBuffer = e.tracks.video.buffer || null)
            }
            ,
            r.onFragBuffered = function(t, e) {
                var r = e.frag
                  , n = e.part;
                if (r.type === Ce)
                    if (this.fragContextChanged(r))
                        this.warn(&quot;Fragment &quot; + r.sn + (n ? &quot; p: &quot; + n.index : &quot;&quot;) + &quot; of level &quot; + r.level + &quot; finished buffering, but was aborted. state: &quot; + this.state + &quot;, audioSwitch: &quot; + (this.switchingTrack ? this.switchingTrack.name : &quot;false&quot;));
                    else {
                        if (&quot;initSegment&quot; !== r.sn) {
                            this.fragPrevious = r;
                            var a = this.switchingTrack;
                            a &amp;&amp; (this.bufferedTrack = a,
                            this.switchingTrack = null,
                            this.hls.trigger(S.AUDIO_TRACK_SWITCHED, i({}, a)))
                        }
                        this.fragBufferedComplete(r, n)
                    }
                else if (!this.loadedmetadata &amp;&amp; r.type === we) {
                    var s = this.videoBuffer || this.media;
                    s &amp;&amp; Jr.getBuffered(s).length &amp;&amp; (this.loadedmetadata = !0)
                }
            }
            ,
            r.onError = function(e, r) {
                var i;
                if (r.fatal)
                    this.state = Ai;
                else
                    switch (r.details) {
                    case A.FRAG_GAP:
                    case A.FRAG_PARSING_ERROR:
                    case A.FRAG_DECRYPT_ERROR:
                    case A.FRAG_LOAD_ERROR:
                    case A.FRAG_LOAD_TIMEOUT:
                    case A.KEY_LOAD_ERROR:
                    case A.KEY_LOAD_TIMEOUT:
                        this.onFragmentOrKeyLoadError(Ce, r);
                        break;
                    case A.AUDIO_TRACK_LOAD_ERROR:
                    case A.AUDIO_TRACK_LOAD_TIMEOUT:
                    case A.LEVEL_PARSING_ERROR:
                        r.levelRetry || this.state !== Ei || (null == (i = r.context) ? void 0 : i.type) !== De || (this.state = vi);
                        break;
                    case A.BUFFER_APPEND_ERROR:
                    case A.BUFFER_FULL_ERROR:
                        if (!r.parent || &quot;audio&quot; !== r.parent)
                            return;
                        if (r.details === A.BUFFER_APPEND_ERROR)
                            return void this.resetLoadingState();
                        this.reduceLengthAndFlushBuffer(r) &amp;&amp; (this.bufferedTrack = null,
                        t.prototype.flushMainBuffer.call(this, 0, Number.POSITIVE_INFINITY, &quot;audio&quot;));
                        break;
                    case A.INTERNAL_EXCEPTION:
                        this.recoverWorkerError(r)
                    }
            }
            ,
            r.onBufferFlushing = function(t, e) {
                e.type !== N &amp;&amp; (this.flushing = !0)
            }
            ,
            r.onBufferFlushed = function(t, e) {
                var r = e.type;
                if (r !== N) {
                    this.flushing = !1,
                    this.bufferFlushed = !0,
                    this.state === Li &amp;&amp; (this.state = vi);
                    var i = this.mediaBuffer || this.media;
                    i &amp;&amp; (this.afterBufferFlushed(i, r, Ce),
                    this.tick())
                }
            }
            ,
            r._handleTransmuxComplete = function(t) {
                var e, r = &quot;audio&quot;, i = this.hls, n = t.remuxResult, a = t.chunkMeta, s = this.getCurrentContext(a);
                if (s) {
                    var l = s.frag
                      , u = s.part
                      , h = s.level
                      , d = h.details
                      , c = n.audio
                      , f = n.text
                      , g = n.id3
                      , v = n.initSegment;
                    if (!this.fragContextChanged(l) &amp;&amp; d) {
                        if (this.state = Ti,
                        this.switchingTrack &amp;&amp; c &amp;&amp; this.completeAudioSwitch(this.switchingTrack),
                        null != v &amp;&amp; v.tracks) {
                            var m = l.initSegment || l;
                            this._bufferInitSegment(h, v.tracks, m, a),
                            i.trigger(S.FRAG_PARSING_INIT_SEGMENT, {
                                frag: m,
                                id: r,
                                tracks: v.tracks
                            })
                        }
                        if (c) {
                            var p = c.startPTS
                              , y = c.endPTS
                              , E = c.startDTS
                              , T = c.endDTS;
                            u &amp;&amp; (u.elementaryStreams[O] = {
                                startPTS: p,
                                endPTS: y,
                                startDTS: E,
                                endDTS: T
                            }),
                            l.setElementaryStreamInfo(O, p, y, E, T),
                            this.bufferFragmentData(c, l, u, a)
                        }
                        if (null != g &amp;&amp; null != (e = g.samples) &amp;&amp; e.length) {
                            var L = o({
                                id: r,
                                frag: l,
                                details: d
                            }, g);
                            i.trigger(S.FRAG_PARSING_METADATA, L)
                        }
                        if (f) {
                            var A = o({
                                id: r,
                                frag: l,
                                details: d
                            }, f);
                            i.trigger(S.FRAG_PARSING_USERDATA, A)
                        }
                    } else
                        this.fragmentTracker.removeFragment(l)
                } else
                    this.resetWhenMissingContext(a)
            }
            ,
            r._bufferInitSegment = function(t, e, r, i) {
                if (this.state === Ti) {
                    e.video &amp;&amp; delete e.video;
                    var n = e.audio;
                    if (n) {
                        n.id = &quot;audio&quot;;
                        var a = t.audioCodec;
                        this.log(&quot;Init audio buffer, container:&quot; + n.container + &quot;, codecs[level/parsed]=[&quot; + a + &quot;/&quot; + n.codec + &quot;]&quot;),
                        a &amp;&amp; 1 === a.split(&quot;,&quot;).length &amp;&amp; (n.levelCodec = a),
                        this.hls.trigger(S.BUFFER_CODECS, e);
                        var s = n.initSegment;
                        if (null != s &amp;&amp; s.byteLength) {
                            var o = {
                                type: &quot;audio&quot;,
                                frag: r,
                                part: null,
                                chunkMeta: i,
                                parent: r.type,
                                data: s
                            };
                            this.hls.trigger(S.BUFFER_APPENDING, o)
                        }
                        this.tickImmediate()
                    }
                }
            }
            ,
            r.loadFragment = function(e, r, i) {
                var n, a = this.fragmentTracker.getState(e);
                if (this.fragCurrent = e,
                this.switchingTrack || a === Vr || a === Wr)
                    if (&quot;initSegment&quot; === e.sn)
                        this._loadInitSegment(e, r);
                    else if (null != (n = r.details) &amp;&amp; n.live &amp;&amp; !this.initPTS[e.cc]) {
                        this.log(&quot;Waiting for video PTS in continuity counter &quot; + e.cc + &quot; of live stream before loading audio fragment &quot; + e.sn + &quot; of level &quot; + this.trackId),
                        this.state = Ri;
                        var s = this.mainDetails;
                        s &amp;&amp; s.fragments[0].start !== r.details.fragments[0].start &amp;&amp; ii(r.details, s)
                    } else
                        this.startFragRequested = !0,
                        t.prototype.loadFragment.call(this, e, r, i);
                else
                    this.clearTrackerIfNeeded(e)
            }
            ,
            r.flushAudioIfNeeded = function(e) {
                var r = this.media
                  , i = this.bufferedTrack
                  , n = null == i ? void 0 : i.attrs
                  , a = e.attrs;
                r &amp;&amp; n &amp;&amp; (n.CHANNELS !== a.CHANNELS || i.name !== e.name || i.lang !== e.lang) &amp;&amp; (this.log(&quot;Switching audio track : flushing all audio&quot;),
                t.prototype.flushMainBuffer.call(this, 0, Number.POSITIVE_INFINITY, &quot;audio&quot;),
                this.bufferedTrack = null)
            }
            ,
            r.completeAudioSwitch = function(t) {
                var e = this.hls;
                this.flushAudioIfNeeded(t),
                this.bufferedTrack = t,
                this.switchingTrack = null,
                e.trigger(S.AUDIO_TRACK_SWITCHED, i({}, t))
            }
            ,
            e
        }(bi)
          , qn = function(t) {
            function e(e) {
                var r;
                return (r = t.call(this, e, &quot;[audio-track-controller]&quot;) || this).tracks = [],
                r.groupIds = null,
                r.tracksInGroup = [],
                r.trackId = -1,
                r.currentTrack = null,
                r.selectDefaultTrack = !0,
                r.registerListeners(),
                r
            }
            l(e, t);
            var r = e.prototype;
            return r.registerListeners = function() {
                var t = this.hls;
                t.on(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.on(S.MANIFEST_PARSED, this.onManifestParsed, this),
                t.on(S.LEVEL_LOADING, this.onLevelLoading, this),
                t.on(S.LEVEL_SWITCHING, this.onLevelSwitching, this),
                t.on(S.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this),
                t.on(S.ERROR, this.onError, this)
            }
            ,
            r.unregisterListeners = function() {
                var t = this.hls;
                t.off(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.off(S.MANIFEST_PARSED, this.onManifestParsed, this),
                t.off(S.LEVEL_LOADING, this.onLevelLoading, this),
                t.off(S.LEVEL_SWITCHING, this.onLevelSwitching, this),
                t.off(S.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this),
                t.off(S.ERROR, this.onError, this)
            }
            ,
            r.destroy = function() {
                this.unregisterListeners(),
                this.tracks.length = 0,
                this.tracksInGroup.length = 0,
                this.currentTrack = null,
                t.prototype.destroy.call(this)
            }
            ,
            r.onManifestLoading = function() {
                this.tracks = [],
                this.tracksInGroup = [],
                this.groupIds = null,
                this.currentTrack = null,
                this.trackId = -1,
                this.selectDefaultTrack = !0
            }
            ,
            r.onManifestParsed = function(t, e) {
                this.tracks = e.audioTracks || []
            }
            ,
            r.onAudioTrackLoaded = function(t, e) {
                var r = e.id
                  , i = e.groupId
                  , n = e.details
                  , a = this.tracksInGroup[r];
                if (a &amp;&amp; a.groupId === i) {
                    var s = a.details;
                    a.details = e.details,
                    this.log(&quot;Audio track &quot; + r + &#39; &quot;&#39; + a.name + &#39;&quot; lang:&#39; + a.lang + &quot; group:&quot; + i + &quot; loaded [&quot; + n.startSN + &quot;-&quot; + n.endSN + &quot;]&quot;),
                    r === this.trackId &amp;&amp; this.playlistLoaded(r, e, s)
                } else
                    this.warn(&quot;Audio track with id:&quot; + r + &quot; and group:&quot; + i + &quot; not found in active group &quot; + (null == a ? void 0 : a.groupId))
            }
            ,
            r.onLevelLoading = function(t, e) {
                this.switchLevel(e.level)
            }
            ,
            r.onLevelSwitching = function(t, e) {
                this.switchLevel(e.level)
            }
            ,
            r.switchLevel = function(t) {
                var e = this.hls.levels[t];
                if (e) {
                    var r = e.audioGroups || null
                      , i = this.groupIds
                      , n = this.currentTrack;
                    if (!r || (null == i ? void 0 : i.length) !== (null == r ? void 0 : r.length) || null != r &amp;&amp; r.some((function(t) {
                        return -1 === (null == i ? void 0 : i.indexOf(t))
                    }
                    ))) {
                        this.groupIds = r,
                        this.trackId = -1,
                        this.currentTrack = null;
                        var a = this.tracks.filter((function(t) {
                            return !r || -1 !== r.indexOf(t.groupId)
                        }
                        ));
                        if (a.length)
                            this.selectDefaultTrack &amp;&amp; !a.some((function(t) {
                                return t.default
                            }
                            )) &amp;&amp; (this.selectDefaultTrack = !1),
                            a.forEach((function(t, e) {
                                t.id = e
                            }
                            ));
                        else if (!n &amp;&amp; !this.tracksInGroup.length)
                            return;
                        this.tracksInGroup = a;
                        var s = this.hls.config.audioPreference;
                        if (!n &amp;&amp; s) {
                            var o = Nr(s, a, Br);
                            if (o &gt; -1)
                                n = a[o];
                            else {
                                var l = Nr(s, this.tracks);
                                n = this.tracks[l]
                            }
                        }
                        var u = this.findTrackId(n);
                        -1 === u &amp;&amp; n &amp;&amp; (u = this.findTrackId(null));
                        var h = {
                            audioTracks: a
                        };
                        this.log(&quot;Updating audio tracks, &quot; + a.length + &quot; track(s) found in group(s): &quot; + (null == r ? void 0 : r.join(&quot;,&quot;))),
                        this.hls.trigger(S.AUDIO_TRACKS_UPDATED, h);
                        var d = this.trackId;
                        if (-1 !== u &amp;&amp; -1 === d)
                            this.setAudioTrack(u);
                        else if (a.length &amp;&amp; -1 === d) {
                            var c, f = new Error(&quot;No audio track selected for current audio group-ID(s): &quot; + (null == (c = this.groupIds) ? void 0 : c.join(&quot;,&quot;)) + &quot; track count: &quot; + a.length);
                            this.warn(f.message),
                            this.hls.trigger(S.ERROR, {
                                type: L.MEDIA_ERROR,
                                details: A.AUDIO_TRACK_LOAD_ERROR,
                                fatal: !0,
                                error: f
                            })
                        }
                    } else
                        this.shouldReloadPlaylist(n) &amp;&amp; this.setAudioTrack(this.trackId)
                }
            }
            ,
            r.onError = function(t, e) {
                !e.fatal &amp;&amp; e.context &amp;&amp; (e.context.type !== De || e.context.id !== this.trackId || this.groupIds &amp;&amp; -1 === this.groupIds.indexOf(e.context.groupId) || (this.requestScheduled = -1,
                this.checkRetry(e)))
            }
            ,
            r.setAudioOption = function(t) {
                var e = this.hls;
                if (e.config.audioPreference = t,
                t) {
                    var r = this.allAudioTracks;
                    if (this.selectDefaultTrack = !1,
                    r.length) {
                        var i = this.currentTrack;
                        if (i &amp;&amp; Ur(t, i, Br))
                            return i;
                        var n = Nr(t, this.tracksInGroup, Br);
                        if (n &gt; -1) {
                            var a = this.tracksInGroup[n];
                            return this.setAudioTrack(n),
                            a
                        }
                        if (i) {
                            var s = e.loadLevel;
                            -1 === s &amp;&amp; (s = e.firstAutoLevel);
                            var o = function(t, e, r, i, n) {
                                var a = e[i]
                                  , s = e.reduce((function(t, e, r) {
                                    var i = e.uri;
                                    return (t[i] || (t[i] = [])).push(r),
                                    t
                                }
                                ), {})[a.uri];
                                s.length &gt; 1 &amp;&amp; (i = Math.max.apply(Math, s));
                                var o = a.videoRange
                                  , l = a.frameRate
                                  , u = a.codecSet.substring(0, 4)
                                  , h = Gr(e, i, (function(e) {
                                    if (e.videoRange !== o || e.frameRate !== l || e.codecSet.substring(0, 4) !== u)
                                        return !1;
                                    var i = e.audioGroups
                                      , a = r.filter((function(t) {
                                        return !i || -1 !== i.indexOf(t.groupId)
                                    }
                                    ));
                                    return Nr(t, a, n) &gt; -1
                                }
                                ));
                                return h &gt; -1 ? h : Gr(e, i, (function(e) {
                                    var i = e.audioGroups
                                      , a = r.filter((function(t) {
                                        return !i || -1 !== i.indexOf(t.groupId)
                                    }
                                    ));
                                    return Nr(t, a, n) &gt; -1
                                }
                                ))
                            }(t, e.levels, r, s, Br);
                            if (-1 === o)
                                return null;
                            e.nextLoadLevel = o
                        }
                        if (t.channels || t.audioCodec) {
                            var l = Nr(t, r);
                            if (l &gt; -1)
                                return r[l]
                        }
                    }
                }
                return null
            }
            ,
            r.setAudioTrack = function(t) {
                var e = this.tracksInGroup;
                if (t &lt; 0 || t &gt;= e.length)
                    this.warn(&quot;Invalid audio track id: &quot; + t);
                else {
                    this.clearTimer(),
                    this.selectDefaultTrack = !1;
                    var r = this.currentTrack
                      , n = e[t]
                      , a = n.details &amp;&amp; !n.details.live;
                    if (!(t === this.trackId &amp;&amp; n === r &amp;&amp; a || (this.log(&quot;Switching to audio-track &quot; + t + &#39; &quot;&#39; + n.name + &#39;&quot; lang:&#39; + n.lang + &quot; group:&quot; + n.groupId + &quot; channels:&quot; + n.channels),
                    this.trackId = t,
                    this.currentTrack = n,
                    this.hls.trigger(S.AUDIO_TRACK_SWITCHING, i({}, n)),
                    a))) {
                        var s = this.switchParams(n.url, null == r ? void 0 : r.details, n.details);
                        this.loadPlaylist(s)
                    }
                }
            }
            ,
            r.findTrackId = function(t) {
                for (var e = this.tracksInGroup, r = 0; r &lt; e.length; r++) {
                    var i = e[r];
                    if ((!this.selectDefaultTrack || i.default) &amp;&amp; (!t || Ur(t, i, Br)))
                        return r
                }
                if (t) {
                    for (var n = t.name, a = t.lang, s = t.assocLang, o = t.characteristics, l = t.audioCodec, u = t.channels, h = 0; h &lt; e.length; h++)
                        if (Ur({
                            name: n,
                            lang: a,
                            assocLang: s,
                            characteristics: o,
                            audioCodec: l,
                            channels: u
                        }, e[h], Br))
                            return h;
                    for (var d = 0; d &lt; e.length; d++) {
                        var c = e[d];
                        if (Yn(t.attrs, c.attrs, [&quot;LANGUAGE&quot;, &quot;ASSOC-LANGUAGE&quot;, &quot;CHARACTERISTICS&quot;]))
                            return d
                    }
                    for (var f = 0; f &lt; e.length; f++) {
                        var g = e[f];
                        if (Yn(t.attrs, g.attrs, [&quot;LANGUAGE&quot;]))
                            return f
                    }
                }
                return -1
            }
            ,
            r.loadPlaylist = function(e) {
                var r = this.currentTrack;
                if (this.shouldLoadPlaylist(r) &amp;&amp; r) {
                    t.prototype.loadPlaylist.call(this);
                    var i = r.id
                      , n = r.groupId
                      , a = r.url;
                    if (e)
                        try {
                            a = e.addDirectives(a)
                        } catch (t) {
                            this.warn(&quot;Could not construct new URL with HLS Delivery Directives: &quot; + t)
                        }
                    this.log(&quot;loading audio-track playlist &quot; + i + &#39; &quot;&#39; + r.name + &#39;&quot; lang:&#39; + r.lang + &quot; group:&quot; + n),
                    this.clearTimer(),
                    this.hls.trigger(S.AUDIO_TRACK_LOADING, {
                        url: a,
                        id: i,
                        groupId: n,
                        deliveryDirectives: e || null
                    })
                }
            }
            ,
            s(e, [{
                key: &quot;allAudioTracks&quot;,
                get: function() {
                    return this.tracks
                }
            }, {
                key: &quot;audioTracks&quot;,
                get: function() {
                    return this.tracksInGroup
                }
            }, {
                key: &quot;audioTrack&quot;,
                get: function() {
                    return this.trackId
                },
                set: function(t) {
                    this.selectDefaultTrack = !1,
                    this.setAudioTrack(t)
                }
            }]),
            e
        }(wr)
          , Xn = function(t) {
            function e(e, r, i) {
                var n;
                return (n = t.call(this, e, r, i, &quot;[subtitle-stream-controller]&quot;, _e) || this).currentTrackId = -1,
                n.tracksBuffered = [],
                n.mainDetails = null,
                n._registerListeners(),
                n
            }
            l(e, t);
            var r = e.prototype;
            return r.onHandlerDestroying = function() {
                this._unregisterListeners(),
                t.prototype.onHandlerDestroying.call(this),
                this.mainDetails = null
            }
            ,
            r._registerListeners = function() {
                var t = this.hls;
                t.on(S.MEDIA_ATTACHED, this.onMediaAttached, this),
                t.on(S.MEDIA_DETACHING, this.onMediaDetaching, this),
                t.on(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.on(S.LEVEL_LOADED, this.onLevelLoaded, this),
                t.on(S.ERROR, this.onError, this),
                t.on(S.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this),
                t.on(S.SUBTITLE_TRACK_SWITCH, this.onSubtitleTrackSwitch, this),
                t.on(S.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this),
                t.on(S.SUBTITLE_FRAG_PROCESSED, this.onSubtitleFragProcessed, this),
                t.on(S.BUFFER_FLUSHING, this.onBufferFlushing, this),
                t.on(S.FRAG_BUFFERED, this.onFragBuffered, this)
            }
            ,
            r._unregisterListeners = function() {
                var t = this.hls;
                t.off(S.MEDIA_ATTACHED, this.onMediaAttached, this),
                t.off(S.MEDIA_DETACHING, this.onMediaDetaching, this),
                t.off(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.off(S.LEVEL_LOADED, this.onLevelLoaded, this),
                t.off(S.ERROR, this.onError, this),
                t.off(S.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this),
                t.off(S.SUBTITLE_TRACK_SWITCH, this.onSubtitleTrackSwitch, this),
                t.off(S.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this),
                t.off(S.SUBTITLE_FRAG_PROCESSED, this.onSubtitleFragProcessed, this),
                t.off(S.BUFFER_FLUSHING, this.onBufferFlushing, this),
                t.off(S.FRAG_BUFFERED, this.onFragBuffered, this)
            }
            ,
            r.startLoad = function(t) {
                this.stopLoad(),
                this.state = vi,
                this.setInterval(500),
                this.nextLoadPosition = this.startPosition = this.lastCurrentTime = t,
                this.tick()
            }
            ,
            r.onManifestLoading = function() {
                this.mainDetails = null,
                this.fragmentTracker.removeAllFragments()
            }
            ,
            r.onMediaDetaching = function() {
                this.tracksBuffered = [],
                t.prototype.onMediaDetaching.call(this)
            }
            ,
            r.onLevelLoaded = function(t, e) {
                this.mainDetails = e.details
            }
            ,
            r.onSubtitleFragProcessed = function(t, e) {
                var r = e.frag
                  , i = e.success;
                if (this.fragPrevious = r,
                this.state = vi,
                i) {
                    var n = this.tracksBuffered[this.currentTrackId];
                    if (n) {
                        for (var a, s = r.start, o = 0; o &lt; n.length; o++)
                            if (s &gt;= n[o].start &amp;&amp; s &lt;= n[o].end) {
                                a = n[o];
                                break
                            }
                        var l = r.start + r.duration;
                        a ? a.end = l : (a = {
                            start: s,
                            end: l
                        },
                        n.push(a)),
                        this.fragmentTracker.fragBuffered(r),
                        this.fragBufferedComplete(r, null)
                    }
                }
            }
            ,
            r.onBufferFlushing = function(t, e) {
                var r = e.startOffset
                  , i = e.endOffset;
                if (0 === r &amp;&amp; i !== Number.POSITIVE_INFINITY) {
                    var n = i - 1;
                    if (n &lt;= 0)
                        return;
                    e.endOffsetSubtitles = Math.max(0, n),
                    this.tracksBuffered.forEach((function(t) {
                        for (var e = 0; e &lt; t.length; )
                            if (t[e].end &lt;= n)
                                t.shift();
                            else {
                                if (!(t[e].start &lt; n))
                                    break;
                                t[e].start = n,
                                e++
                            }
                    }
                    )),
                    this.fragmentTracker.removeFragmentsInRange(r, n, _e)
                }
            }
            ,
            r.onFragBuffered = function(t, e) {
                var r;
                this.loadedmetadata || e.frag.type !== we || null != (r = this.media) &amp;&amp; r.buffered.length &amp;&amp; (this.loadedmetadata = !0)
            }
            ,
            r.onError = function(t, e) {
                var r = e.frag;
                (null == r ? void 0 : r.type) === _e &amp;&amp; (e.details === A.FRAG_GAP &amp;&amp; this.fragmentTracker.fragBuffered(r, !0),
                this.fragCurrent &amp;&amp; this.fragCurrent.abortRequests(),
                this.state !== gi &amp;&amp; (this.state = vi))
            }
            ,
            r.onSubtitleTracksUpdated = function(t, e) {
                var r = this
                  , i = e.subtitleTracks;
                this.levels &amp;&amp; Vn(this.levels, i) ? this.levels = i.map((function(t) {
                    return new rr(t)
                }
                )) : (this.tracksBuffered = [],
                this.levels = i.map((function(t) {
                    var e = new rr(t);
                    return r.tracksBuffered[e.id] = [],
                    e
                }
                )),
                this.fragmentTracker.removeFragmentsInRange(0, Number.POSITIVE_INFINITY, _e),
                this.fragPrevious = null,
                this.mediaBuffer = null)
            }
            ,
            r.onSubtitleTrackSwitch = function(t, e) {
                var r;
                if (this.currentTrackId = e.id,
                null != (r = this.levels) &amp;&amp; r.length &amp;&amp; -1 !== this.currentTrackId) {
                    var i = this.levels[this.currentTrackId];
                    null != i &amp;&amp; i.details ? this.mediaBuffer = this.mediaBufferTimeRanges : this.mediaBuffer = null,
                    i &amp;&amp; this.setInterval(500)
                } else
                    this.clearInterval()
            }
            ,
            r.onSubtitleTrackLoaded = function(t, e) {
                var r, i = this.currentTrackId, n = this.levels, a = e.details, s = e.id;
                if (n) {
                    var o = n[s];
                    if (!(s &gt;= n.length) &amp;&amp; o) {
                        this.log(&quot;Subtitle track &quot; + s + &quot; loaded [&quot; + a.startSN + &quot;,&quot; + a.endSN + &quot;]&quot; + (a.lastPartSn ? &quot;[part-&quot; + a.lastPartSn + &quot;-&quot; + a.lastPartIndex + &quot;]&quot; : &quot;&quot;) + &quot;,duration:&quot; + a.totalduration),
                        this.mediaBuffer = this.mediaBufferTimeRanges;
                        var l = 0;
                        if (a.live || null != (r = o.details) &amp;&amp; r.live) {
                            var u = this.mainDetails;
                            if (a.deltaUpdateFailed || !u)
                                return;
                            var h, d = u.fragments[0];
                            o.details ? 0 === (l = this.alignPlaylists(a, o.details, null == (h = this.levelLastLoaded) ? void 0 : h.details)) &amp;&amp; d &amp;&amp; lr(a, l = d.start) : a.hasProgramDateTime &amp;&amp; u.hasProgramDateTime ? (ii(a, u),
                            l = a.fragments[0].start) : d &amp;&amp; lr(a, l = d.start)
                        }
                        o.details = a,
                        this.levelLastLoaded = o,
                        s === i &amp;&amp; (this.startFragRequested || !this.mainDetails &amp;&amp; a.live || this.setStartPosition(this.mainDetails || a, l),
                        this.tick(),
                        a.live &amp;&amp; !this.fragCurrent &amp;&amp; this.media &amp;&amp; this.state === vi &amp;&amp; (yr(null, a.fragments, this.media.currentTime, 0) || (this.warn(&quot;Subtitle playlist not aligned with playback&quot;),
                        o.details = void 0)))
                    }
                } else
                    this.warn(&quot;Subtitle tracks were reset while loading level &quot; + s)
            }
            ,
            r._handleFragmentLoadComplete = function(t) {
                var e = this
                  , r = t.frag
                  , i = t.payload
                  , n = r.decryptdata
                  , a = this.hls;
                if (!this.fragContextChanged(r) &amp;&amp; i &amp;&amp; i.byteLength &gt; 0 &amp;&amp; null != n &amp;&amp; n.key &amp;&amp; n.iv &amp;&amp; &quot;AES-128&quot; === n.method) {
                    var s = performance.now();
                    this.decrypter.decrypt(new Uint8Array(i), n.key.buffer, n.iv.buffer).catch((function(t) {
                        throw a.trigger(S.ERROR, {
                            type: L.MEDIA_ERROR,
                            details: A.FRAG_DECRYPT_ERROR,
                            fatal: !1,
                            error: t,
                            reason: t.message,
                            frag: r
                        }),
                        t
                    }
                    )).then((function(t) {
                        var e = performance.now();
                        a.trigger(S.FRAG_DECRYPTED, {
                            frag: r,
                            payload: t,
                            stats: {
                                tstart: s,
                                tdecrypt: e
                            }
                        })
                    }
                    )).catch((function(t) {
                        e.warn(t.name + &quot;: &quot; + t.message),
                        e.state = vi
                    }
                    ))
                }
            }
            ,
            r.doTick = function() {
                if (this.media) {
                    if (this.state === vi) {
                        var t = this.currentTrackId
                          , e = this.levels
                          , r = null == e ? void 0 : e[t];
                        if (!r || !e.length || !r.details)
                            return;
                        var i = this.config
                          , n = this.getLoadPosition()
                          , a = Jr.bufferedInfo(this.tracksBuffered[this.currentTrackId] || [], n, i.maxBufferHole)
                          , s = a.end
                          , o = a.len
                          , l = this.getFwdBufferInfo(this.media, we)
                          , u = r.details;
                        if (o &gt; this.getMaxBufferLength(null == l ? void 0 : l.len) + u.levelTargetDuration)
                            return;
                        var h = u.fragments
                          , d = h.length
                          , c = u.edge
                          , f = null
                          , g = this.fragPrevious;
                        if (s &lt; c) {
                            var v = i.maxFragLookUpTolerance
                              , m = s &gt; c - v ? 0 : v;
                            !(f = yr(g, h, Math.max(h[0].start, s), m)) &amp;&amp; g &amp;&amp; g.start &lt; h[0].start &amp;&amp; (f = h[0])
                        } else
                            f = h[d - 1];
                        if (!f)
                            return;
                        if (&quot;initSegment&quot; !== (f = this.mapToInitFragWhenRequired(f)).sn) {
                            var p = h[f.sn - u.startSN - 1];
                            p &amp;&amp; p.cc === f.cc &amp;&amp; this.fragmentTracker.getState(p) === Vr &amp;&amp; (f = p)
                        }
                        this.fragmentTracker.getState(f) === Vr &amp;&amp; this.loadFragment(f, r, s)
                    }
                } else
                    this.state = vi
            }
            ,
            r.getMaxBufferLength = function(e) {
                var r = t.prototype.getMaxBufferLength.call(this);
                return e ? Math.max(r, e) : r
            }
            ,
            r.loadFragment = function(e, r, i) {
                this.fragCurrent = e,
                &quot;initSegment&quot; === e.sn ? this._loadInitSegment(e, r) : (this.startFragRequested = !0,
                t.prototype.loadFragment.call(this, e, r, i))
            }
            ,
            s(e, [{
                key: &quot;mediaBufferTimeRanges&quot;,
                get: function() {
                    return new zn(this.tracksBuffered[this.currentTrackId] || [])
                }
            }]),
            e
        }(bi)
          , zn = function(t) {
            this.buffered = void 0;
            var e = function(e, r, i) {
                if ((r &gt;&gt;&gt;= 0) &gt; i - 1)
                    throw new DOMException(&quot;Failed to execute &#39;&quot; + e + &quot;&#39; on &#39;TimeRanges&#39;: The index provided (&quot; + r + &quot;) is greater than the maximum bound (&quot; + i + &quot;)&quot;);
                return t[r][e]
            };
            this.buffered = {
                get length() {
                    return t.length
                },
                end: function(r) {
                    return e(&quot;end&quot;, r, t.length)
                },
                start: function(r) {
                    return e(&quot;start&quot;, r, t.length)
                }
            }
        }
          , Qn = function(t) {
            function e(e) {
                var r;
                return (r = t.call(this, e, &quot;[subtitle-track-controller]&quot;) || this).media = null,
                r.tracks = [],
                r.groupIds = null,
                r.tracksInGroup = [],
                r.trackId = -1,
                r.currentTrack = null,
                r.selectDefaultTrack = !0,
                r.queuedDefaultTrack = -1,
                r.asyncPollTrackChange = function() {
                    return r.pollTrackChange(0)
                }
                ,
                r.useTextTrackPolling = !1,
                r.subtitlePollingInterval = -1,
                r._subtitleDisplay = !0,
                r.onTextTracksChanged = function() {
                    if (r.useTextTrackPolling || self.clearInterval(r.subtitlePollingInterval),
                    r.media &amp;&amp; r.hls.config.renderTextTracksNatively) {
                        for (var t = null, e = Be(r.media.textTracks), i = 0; i &lt; e.length; i++)
                            if (&quot;hidden&quot; === e[i].mode)
                                t = e[i];
                            else if (&quot;showing&quot; === e[i].mode) {
                                t = e[i];
                                break
                            }
                        var n = r.findTrackForTextTrack(t);
                        r.subtitleTrack !== n &amp;&amp; r.setSubtitleTrack(n)
                    }
                }
                ,
                r.registerListeners(),
                r
            }
            l(e, t);
            var r = e.prototype;
            return r.destroy = function() {
                this.unregisterListeners(),
                this.tracks.length = 0,
                this.tracksInGroup.length = 0,
                this.currentTrack = null,
                this.onTextTracksChanged = this.asyncPollTrackChange = null,
                t.prototype.destroy.call(this)
            }
            ,
            r.registerListeners = function() {
                var t = this.hls;
                t.on(S.MEDIA_ATTACHED, this.onMediaAttached, this),
                t.on(S.MEDIA_DETACHING, this.onMediaDetaching, this),
                t.on(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.on(S.MANIFEST_PARSED, this.onManifestParsed, this),
                t.on(S.LEVEL_LOADING, this.onLevelLoading, this),
                t.on(S.LEVEL_SWITCHING, this.onLevelSwitching, this),
                t.on(S.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this),
                t.on(S.ERROR, this.onError, this)
            }
            ,
            r.unregisterListeners = function() {
                var t = this.hls;
                t.off(S.MEDIA_ATTACHED, this.onMediaAttached, this),
                t.off(S.MEDIA_DETACHING, this.onMediaDetaching, this),
                t.off(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.off(S.MANIFEST_PARSED, this.onManifestParsed, this),
                t.off(S.LEVEL_LOADING, this.onLevelLoading, this),
                t.off(S.LEVEL_SWITCHING, this.onLevelSwitching, this),
                t.off(S.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this),
                t.off(S.ERROR, this.onError, this)
            }
            ,
            r.onMediaAttached = function(t, e) {
                this.media = e.media,
                this.media &amp;&amp; (this.queuedDefaultTrack &gt; -1 &amp;&amp; (this.subtitleTrack = this.queuedDefaultTrack,
                this.queuedDefaultTrack = -1),
                this.useTextTrackPolling = !(this.media.textTracks &amp;&amp; &quot;onchange&quot;in this.media.textTracks),
                this.useTextTrackPolling ? this.pollTrackChange(500) : this.media.textTracks.addEventListener(&quot;change&quot;, this.asyncPollTrackChange))
            }
            ,
            r.pollTrackChange = function(t) {
                self.clearInterval(this.subtitlePollingInterval),
                this.subtitlePollingInterval = self.setInterval(this.onTextTracksChanged, t)
            }
            ,
            r.onMediaDetaching = function() {
                this.media &amp;&amp; (self.clearInterval(this.subtitlePollingInterval),
                this.useTextTrackPolling || this.media.textTracks.removeEventListener(&quot;change&quot;, this.asyncPollTrackChange),
                this.trackId &gt; -1 &amp;&amp; (this.queuedDefaultTrack = this.trackId),
                Be(this.media.textTracks).forEach((function(t) {
                    Ne(t)
                }
                )),
                this.subtitleTrack = -1,
                this.media = null)
            }
            ,
            r.onManifestLoading = function() {
                this.tracks = [],
                this.groupIds = null,
                this.tracksInGroup = [],
                this.trackId = -1,
                this.currentTrack = null,
                this.selectDefaultTrack = !0
            }
            ,
            r.onManifestParsed = function(t, e) {
                this.tracks = e.subtitleTracks
            }
            ,
            r.onSubtitleTrackLoaded = function(t, e) {
                var r = e.id
                  , i = e.groupId
                  , n = e.details
                  , a = this.tracksInGroup[r];
                if (a &amp;&amp; a.groupId === i) {
                    var s = a.details;
                    a.details = e.details,
                    this.log(&quot;Subtitle track &quot; + r + &#39; &quot;&#39; + a.name + &#39;&quot; lang:&#39; + a.lang + &quot; group:&quot; + i + &quot; loaded [&quot; + n.startSN + &quot;-&quot; + n.endSN + &quot;]&quot;),
                    r === this.trackId &amp;&amp; this.playlistLoaded(r, e, s)
                } else
                    this.warn(&quot;Subtitle track with id:&quot; + r + &quot; and group:&quot; + i + &quot; not found in active group &quot; + (null == a ? void 0 : a.groupId))
            }
            ,
            r.onLevelLoading = function(t, e) {
                this.switchLevel(e.level)
            }
            ,
            r.onLevelSwitching = function(t, e) {
                this.switchLevel(e.level)
            }
            ,
            r.switchLevel = function(t) {
                var e = this.hls.levels[t];
                if (e) {
                    var r = e.subtitleGroups || null
                      , i = this.groupIds
                      , n = this.currentTrack;
                    if (!r || (null == i ? void 0 : i.length) !== (null == r ? void 0 : r.length) || null != r &amp;&amp; r.some((function(t) {
                        return -1 === (null == i ? void 0 : i.indexOf(t))
                    }
                    ))) {
                        this.groupIds = r,
                        this.trackId = -1,
                        this.currentTrack = null;
                        var a = this.tracks.filter((function(t) {
                            return !r || -1 !== r.indexOf(t.groupId)
                        }
                        ));
                        if (a.length)
                            this.selectDefaultTrack &amp;&amp; !a.some((function(t) {
                                return t.default
                            }
                            )) &amp;&amp; (this.selectDefaultTrack = !1),
                            a.forEach((function(t, e) {
                                t.id = e
                            }
                            ));
                        else if (!n &amp;&amp; !this.tracksInGroup.length)
                            return;
                        this.tracksInGroup = a;
                        var s = this.hls.config.subtitlePreference;
                        if (!n &amp;&amp; s) {
                            this.selectDefaultTrack = !1;
                            var o = Nr(s, a);
                            if (o &gt; -1)
                                n = a[o];
                            else {
                                var l = Nr(s, this.tracks);
                                n = this.tracks[l]
                            }
                        }
                        var u = this.findTrackId(n);
                        -1 === u &amp;&amp; n &amp;&amp; (u = this.findTrackId(null));
                        var h = {
                            subtitleTracks: a
                        };
                        this.log(&quot;Updating subtitle tracks, &quot; + a.length + &#39; track(s) found in &quot;&#39; + (null == r ? void 0 : r.join(&quot;,&quot;)) + &#39;&quot; group-id&#39;),
                        this.hls.trigger(S.SUBTITLE_TRACKS_UPDATED, h),
                        -1 !== u &amp;&amp; -1 === this.trackId &amp;&amp; this.setSubtitleTrack(u)
                    } else
                        this.shouldReloadPlaylist(n) &amp;&amp; this.setSubtitleTrack(this.trackId)
                }
            }
            ,
            r.findTrackId = function(t) {
                for (var e = this.tracksInGroup, r = this.selectDefaultTrack, i = 0; i &lt; e.length; i++) {
                    var n = e[i];
                    if ((!r || n.default) &amp;&amp; (r || t) &amp;&amp; (!t || Ur(n, t)))
                        return i
                }
                if (t) {
                    for (var a = 0; a &lt; e.length; a++) {
                        var s = e[a];
                        if (Yn(t.attrs, s.attrs, [&quot;LANGUAGE&quot;, &quot;ASSOC-LANGUAGE&quot;, &quot;CHARACTERISTICS&quot;]))
                            return a
                    }
                    for (var o = 0; o &lt; e.length; o++) {
                        var l = e[o];
                        if (Yn(t.attrs, l.attrs, [&quot;LANGUAGE&quot;]))
                            return o
                    }
                }
                return -1
            }
            ,
            r.findTrackForTextTrack = function(t) {
                if (t)
                    for (var e = this.tracksInGroup, r = 0; r &lt; e.length; r++)
                        if (Wn(e[r], t))
                            return r;
                return -1
            }
            ,
            r.onError = function(t, e) {
                !e.fatal &amp;&amp; e.context &amp;&amp; (e.context.type !== Ie || e.context.id !== this.trackId || this.groupIds &amp;&amp; -1 === this.groupIds.indexOf(e.context.groupId) || this.checkRetry(e))
            }
            ,
            r.setSubtitleOption = function(t) {
                if (this.hls.config.subtitlePreference = t,
                t) {
                    var e = this.allSubtitleTracks;
                    if (this.selectDefaultTrack = !1,
                    e.length) {
                        var r = this.currentTrack;
                        if (r &amp;&amp; Ur(t, r))
                            return r;
                        var i = Nr(t, this.tracksInGroup);
                        if (i &gt; -1) {
                            var n = this.tracksInGroup[i];
                            return this.setSubtitleTrack(i),
                            n
                        }
                        if (r)
                            return null;
                        var a = Nr(t, e);
                        if (a &gt; -1)
                            return e[a]
                    }
                }
                return null
            }
            ,
            r.loadPlaylist = function(e) {
                t.prototype.loadPlaylist.call(this);
                var r = this.currentTrack;
                if (this.shouldLoadPlaylist(r) &amp;&amp; r) {
                    var i = r.id
                      , n = r.groupId
                      , a = r.url;
                    if (e)
                        try {
                            a = e.addDirectives(a)
                        } catch (t) {
                            this.warn(&quot;Could not construct new URL with HLS Delivery Directives: &quot; + t)
                        }
                    this.log(&quot;Loading subtitle playlist for id &quot; + i),
                    this.hls.trigger(S.SUBTITLE_TRACK_LOADING, {
                        url: a,
                        id: i,
                        groupId: n,
                        deliveryDirectives: e || null
                    })
                }
            }
            ,
            r.toggleTrackModes = function() {
                var t = this.media;
                if (t) {
                    var e, r = Be(t.textTracks), i = this.currentTrack;
                    if (i &amp;&amp; ((e = r.filter((function(t) {
                        return Wn(i, t)
                    }
                    ))[0]) || this.warn(&#39;Unable to find subtitle TextTrack with name &quot;&#39; + i.name + &#39;&quot; and language &quot;&#39; + i.lang + &#39;&quot;&#39;)),
                    [].slice.call(r).forEach((function(t) {
                        &quot;disabled&quot; !== t.mode &amp;&amp; t !== e &amp;&amp; (t.mode = &quot;disabled&quot;)
                    }
                    )),
                    e) {
                        var n = this.subtitleDisplay ? &quot;showing&quot; : &quot;hidden&quot;;
                        e.mode !== n &amp;&amp; (e.mode = n)
                    }
                }
            }
            ,
            r.setSubtitleTrack = function(t) {
                var e = this.tracksInGroup;
                if (this.media)
                    if (t &lt; -1 || t &gt;= e.length || !y(t))
                        this.warn(&quot;Invalid subtitle track id: &quot; + t);
                    else {
                        this.clearTimer(),
                        this.selectDefaultTrack = !1;
                        var r = this.currentTrack
                          , i = e[t] || null;
                        if (this.trackId = t,
                        this.currentTrack = i,
                        this.toggleTrackModes(),
                        i) {
                            var n = !!i.details &amp;&amp; !i.details.live;
                            if (t !== this.trackId || i !== r || !n) {
                                this.log(&quot;Switching to subtitle-track &quot; + t + (i ? &#39; &quot;&#39; + i.name + &#39;&quot; lang:&#39; + i.lang + &quot; group:&quot; + i.groupId : &quot;&quot;));
                                var a = i.id
                                  , s = i.groupId
                                  , o = void 0 === s ? &quot;&quot; : s
                                  , l = i.name
                                  , u = i.type
                                  , h = i.url;
                                this.hls.trigger(S.SUBTITLE_TRACK_SWITCH, {
                                    id: a,
                                    groupId: o,
                                    name: l,
                                    type: u,
                                    url: h
                                });
                                var d = this.switchParams(i.url, null == r ? void 0 : r.details, i.details);
                                this.loadPlaylist(d)
                            }
                        } else
                            this.hls.trigger(S.SUBTITLE_TRACK_SWITCH, {
                                id: t
                            })
                    }
                else
                    this.queuedDefaultTrack = t
            }
            ,
            s(e, [{
                key: &quot;subtitleDisplay&quot;,
                get: function() {
                    return this._subtitleDisplay
                },
                set: function(t) {
                    this._subtitleDisplay = t,
                    this.trackId &gt; -1 &amp;&amp; this.toggleTrackModes()
                }
            }, {
                key: &quot;allSubtitleTracks&quot;,
                get: function() {
                    return this.tracks
                }
            }, {
                key: &quot;subtitleTracks&quot;,
                get: function() {
                    return this.tracksInGroup
                }
            }, {
                key: &quot;subtitleTrack&quot;,
                get: function() {
                    return this.trackId
                },
                set: function(t) {
                    this.selectDefaultTrack = !1,
                    this.setSubtitleTrack(t)
                }
            }]),
            e
        }(wr)
          , Jn = function() {
            function t(t) {
                this.buffers = void 0,
                this.queues = {
                    video: [],
                    audio: [],
                    audiovideo: []
                },
                this.buffers = t
            }
            var e = t.prototype;
            return e.append = function(t, e, r) {
                var i = this.queues[e];
                i.push(t),
                1 !== i.length || r || this.executeNext(e)
            }
            ,
            e.insertAbort = function(t, e) {
                this.queues[e].unshift(t),
                this.executeNext(e)
            }
            ,
            e.appendBlocker = function(t) {
                var e, r = new Promise((function(t) {
                    e = t
                }
                )), i = {
                    execute: e,
                    onStart: function() {},
                    onComplete: function() {},
                    onError: function() {}
                };
                return this.append(i, t),
                r
            }
            ,
            e.executeNext = function(t) {
                var e = this.queues[t];
                if (e.length) {
                    var r = e[0];
                    try {
                        r.execute()
                    } catch (e) {
                        w.warn(&#39;[buffer-operation-queue]: Exception executing &quot;&#39; + t + &#39;&quot; SourceBuffer operation: &#39; + e),
                        r.onError(e);
                        var i = this.buffers[t];
                        null != i &amp;&amp; i.updating || this.shiftAndExecuteNext(t)
                    }
                }
            }
            ,
            e.shiftAndExecuteNext = function(t) {
                this.queues[t].shift(),
                this.executeNext(t)
            }
            ,
            e.current = function(t) {
                return this.queues[t][0]
            }
            ,
            t
        }()
          , $n = /(avc[1234]|hvc1|hev1|dvh[1e]|vp09|av01)(?:\.[^.,]+)+/
          , Zn = function() {
            function t(t) {
                var e = this;
                this.details = null,
                this._objectUrl = null,
                this.operationQueue = void 0,
                this.listeners = void 0,
                this.hls = void 0,
                this.bufferCodecEventsExpected = 0,
                this._bufferCodecEventsTotal = 0,
                this.media = null,
                this.mediaSource = null,
                this.lastMpegAudioChunk = null,
                this.appendSource = void 0,
                this.appendErrors = {
                    audio: 0,
                    video: 0,
                    audiovideo: 0
                },
                this.tracks = {},
                this.pendingTracks = {},
                this.sourceBuffer = void 0,
                this.log = void 0,
                this.warn = void 0,
                this.error = void 0,
                this._onEndStreaming = function(t) {
                    e.hls &amp;&amp; e.hls.pauseBuffering()
                }
                ,
                this._onStartStreaming = function(t) {
                    e.hls &amp;&amp; e.hls.resumeBuffering()
                }
                ,
                this._onMediaSourceOpen = function() {
                    var t = e.media
                      , r = e.mediaSource;
                    e.log(&quot;Media source opened&quot;),
                    t &amp;&amp; (t.removeEventListener(&quot;emptied&quot;, e._onMediaEmptied),
                    e.updateMediaElementDuration(),
                    e.hls.trigger(S.MEDIA_ATTACHED, {
                        media: t,
                        mediaSource: r
                    })),
                    r &amp;&amp; r.removeEventListener(&quot;sourceopen&quot;, e._onMediaSourceOpen),
                    e.checkPendingTracks()
                }
                ,
                this._onMediaSourceClose = function() {
                    e.log(&quot;Media source closed&quot;)
                }
                ,
                this._onMediaSourceEnded = function() {
                    e.log(&quot;Media source ended&quot;)
                }
                ,
                this._onMediaEmptied = function() {
                    var t = e.mediaSrc
                      , r = e._objectUrl;
                    t !== r &amp;&amp; w.error(&quot;Media element src was set while attaching MediaSource (&quot; + r + &quot; &gt; &quot; + t + &quot;)&quot;)
                }
                ,
                this.hls = t;
                var r, i = &quot;[buffer-controller]&quot;;
                this.appendSource = (r = ee(t.config.preferManagedMediaSource),
                &quot;undefined&quot; != typeof self &amp;&amp; r === self.ManagedMediaSource),
                this.log = w.log.bind(w, i),
                this.warn = w.warn.bind(w, i),
                this.error = w.error.bind(w, i),
                this._initSourceBuffer(),
                this.registerListeners()
            }
            var e = t.prototype;
            return e.hasSourceTypes = function() {
                return this.getSourceBufferTypes().length &gt; 0 || Object.keys(this.pendingTracks).length &gt; 0
            }
            ,
            e.destroy = function() {
                this.unregisterListeners(),
                this.details = null,
                this.lastMpegAudioChunk = null,
                this.hls = null
            }
            ,
            e.registerListeners = function() {
                var t = this.hls;
                t.on(S.MEDIA_ATTACHING, this.onMediaAttaching, this),
                t.on(S.MEDIA_DETACHING, this.onMediaDetaching, this),
                t.on(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.on(S.MANIFEST_PARSED, this.onManifestParsed, this),
                t.on(S.BUFFER_RESET, this.onBufferReset, this),
                t.on(S.BUFFER_APPENDING, this.onBufferAppending, this),
                t.on(S.BUFFER_CODECS, this.onBufferCodecs, this),
                t.on(S.BUFFER_EOS, this.onBufferEos, this),
                t.on(S.BUFFER_FLUSHING, this.onBufferFlushing, this),
                t.on(S.LEVEL_UPDATED, this.onLevelUpdated, this),
                t.on(S.FRAG_PARSED, this.onFragParsed, this),
                t.on(S.FRAG_CHANGED, this.onFragChanged, this)
            }
            ,
            e.unregisterListeners = function() {
                var t = this.hls;
                t.off(S.MEDIA_ATTACHING, this.onMediaAttaching, this),
                t.off(S.MEDIA_DETACHING, this.onMediaDetaching, this),
                t.off(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.off(S.MANIFEST_PARSED, this.onManifestParsed, this),
                t.off(S.BUFFER_RESET, this.onBufferReset, this),
                t.off(S.BUFFER_APPENDING, this.onBufferAppending, this),
                t.off(S.BUFFER_CODECS, this.onBufferCodecs, this),
                t.off(S.BUFFER_EOS, this.onBufferEos, this),
                t.off(S.BUFFER_FLUSHING, this.onBufferFlushing, this),
                t.off(S.LEVEL_UPDATED, this.onLevelUpdated, this),
                t.off(S.FRAG_PARSED, this.onFragParsed, this),
                t.off(S.FRAG_CHANGED, this.onFragChanged, this)
            }
            ,
            e._initSourceBuffer = function() {
                this.sourceBuffer = {},
                this.operationQueue = new Jn(this.sourceBuffer),
                this.listeners = {
                    audio: [],
                    video: [],
                    audiovideo: []
                },
                this.appendErrors = {
                    audio: 0,
                    video: 0,
                    audiovideo: 0
                },
                this.lastMpegAudioChunk = null
            }
            ,
            e.onManifestLoading = function() {
                this.bufferCodecEventsExpected = this._bufferCodecEventsTotal = 0,
                this.details = null
            }
            ,
            e.onManifestParsed = function(t, e) {
                var r = 2;
                (e.audio &amp;&amp; !e.video || !e.altAudio) &amp;&amp; (r = 1),
                this.bufferCodecEventsExpected = this._bufferCodecEventsTotal = r,
                this.log(this.bufferCodecEventsExpected + &quot; bufferCodec event(s) expected&quot;)
            }
            ,
            e.onMediaAttaching = function(t, e) {
                var r = this.media = e.media
                  , i = ee(this.appendSource);
                if (r &amp;&amp; i) {
                    var n, a = this.mediaSource = new i;
                    this.log(&quot;created media source: &quot; + (null == (n = a.constructor) ? void 0 : n.name)),
                    a.addEventListener(&quot;sourceopen&quot;, this._onMediaSourceOpen),
                    a.addEventListener(&quot;sourceended&quot;, this._onMediaSourceEnded),
                    a.addEventListener(&quot;sourceclose&quot;, this._onMediaSourceClose),
                    this.appendSource &amp;&amp; (a.addEventListener(&quot;startstreaming&quot;, this._onStartStreaming),
                    a.addEventListener(&quot;endstreaming&quot;, this._onEndStreaming));
                    var s = this._objectUrl = self.URL.createObjectURL(a);
                    if (this.appendSource)
                        try {
                            r.removeAttribute(&quot;src&quot;);
                            var o = self.ManagedMediaSource;
                            r.disableRemotePlayback = r.disableRemotePlayback || o &amp;&amp; a instanceof o,
                            ta(r),
                            function(t, e) {
                                var r = self.document.createElement(&quot;source&quot;);
                                r.type = &quot;video/mp4&quot;,
                                r.src = e,
                                t.appendChild(r)
                            }(r, s),
                            r.load()
                        } catch (t) {
                            r.src = s
                        }
                    else
                        r.src = s;
                    r.addEventListener(&quot;emptied&quot;, this._onMediaEmptied)
                }
            }
            ,
            e.onMediaDetaching = function() {
                var t = this.media
                  , e = this.mediaSource
                  , r = this._objectUrl;
                if (e) {
                    if (this.log(&quot;media source detaching&quot;),
                    &quot;open&quot; === e.readyState)
                        try {
                            e.endOfStream()
                        } catch (t) {
                            this.warn(&quot;onMediaDetaching: &quot; + t.message + &quot; while calling endOfStream&quot;)
                        }
                    this.onBufferReset(),
                    e.removeEventListener(&quot;sourceopen&quot;, this._onMediaSourceOpen),
                    e.removeEventListener(&quot;sourceended&quot;, this._onMediaSourceEnded),
                    e.removeEventListener(&quot;sourceclose&quot;, this._onMediaSourceClose),
                    this.appendSource &amp;&amp; (e.removeEventListener(&quot;startstreaming&quot;, this._onStartStreaming),
                    e.removeEventListener(&quot;endstreaming&quot;, this._onEndStreaming)),
                    t &amp;&amp; (t.removeEventListener(&quot;emptied&quot;, this._onMediaEmptied),
                    r &amp;&amp; self.URL.revokeObjectURL(r),
                    this.mediaSrc === r ? (t.removeAttribute(&quot;src&quot;),
                    this.appendSource &amp;&amp; ta(t),
                    t.load()) : this.warn(&quot;media|source.src was changed by a third party - skip cleanup&quot;)),
                    this.mediaSource = null,
                    this.media = null,
                    this._objectUrl = null,
                    this.bufferCodecEventsExpected = this._bufferCodecEventsTotal,
                    this.pendingTracks = {},
                    this.tracks = {}
                }
                this.hls.trigger(S.MEDIA_DETACHED, void 0)
            }
            ,
            e.onBufferReset = function() {
                var t = this;
                this.getSourceBufferTypes().forEach((function(e) {
                    t.resetBuffer(e)
                }
                )),
                this._initSourceBuffer()
            }
            ,
            e.resetBuffer = function(t) {
                var e = this.sourceBuffer[t];
                try {
                    var r;
                    e &amp;&amp; (this.removeBufferListeners(t),
                    this.sourceBuffer[t] = void 0,
                    null != (r = this.mediaSource) &amp;&amp; r.sourceBuffers.length &amp;&amp; this.mediaSource.removeSourceBuffer(e))
                } catch (e) {
                    this.warn(&quot;onBufferReset &quot; + t, e)
                }
            }
            ,
            e.onBufferCodecs = function(t, e) {
                var r = this
                  , i = this.getSourceBufferTypes().length
                  , n = Object.keys(e);
                if (n.forEach((function(t) {
                    if (i) {
                        var n = r.tracks[t];
                        if (n &amp;&amp; &quot;function&quot; == typeof n.buffer.changeType) {
                            var a, s = e[t], o = s.id, l = s.codec, u = s.levelCodec, h = s.container, d = s.metadata, c = de(n.codec, n.levelCodec), f = null == c ? void 0 : c.replace($n, &quot;$1&quot;), g = de(l, u), v = null == (a = g) ? void 0 : a.replace($n, &quot;$1&quot;);
                            if (g &amp;&amp; f !== v) {
                                &quot;audio&quot; === t.slice(0, 5) &amp;&amp; (g = he(g, r.appendSource));
                                var m = h + &quot;;codecs=&quot; + g;
                                r.appendChangeType(t, m),
                                r.log(&quot;switching codec &quot; + c + &quot; to &quot; + g),
                                r.tracks[t] = {
                                    buffer: n.buffer,
                                    codec: l,
                                    container: h,
                                    levelCodec: u,
                                    metadata: d,
                                    id: o
                                }
                            }
                        }
                    } else
                        r.pendingTracks[t] = e[t]
                }
                )),
                !i) {
                    var a = Math.max(this.bufferCodecEventsExpected - 1, 0);
                    this.bufferCodecEventsExpected !== a &amp;&amp; (this.log(a + &quot; bufferCodec event(s) expected &quot; + n.join(&quot;,&quot;)),
                    this.bufferCodecEventsExpected = a),
                    this.mediaSource &amp;&amp; &quot;open&quot; === this.mediaSource.readyState &amp;&amp; this.checkPendingTracks()
                }
            }
            ,
            e.appendChangeType = function(t, e) {
                var r = this
                  , i = this.operationQueue
                  , n = {
                    execute: function() {
                        var n = r.sourceBuffer[t];
                        n &amp;&amp; (r.log(&quot;changing &quot; + t + &quot; sourceBuffer type to &quot; + e),
                        n.changeType(e)),
                        i.shiftAndExecuteNext(t)
                    },
                    onStart: function() {},
                    onComplete: function() {},
                    onError: function(e) {
                        r.warn(&quot;Failed to change &quot; + t + &quot; SourceBuffer type&quot;, e)
                    }
                };
                i.append(n, t, !!this.pendingTracks[t])
            }
            ,
            e.onBufferAppending = function(t, e) {
                var r = this
                  , i = this.hls
                  , n = this.operationQueue
                  , a = this.tracks
                  , s = e.data
                  , o = e.type
                  , l = e.frag
                  , u = e.part
                  , h = e.chunkMeta
                  , d = h.buffering[o]
                  , c = self.performance.now();
                d.start = c;
                var f = l.stats.buffering
                  , g = u ? u.stats.buffering : null;
                0 === f.start &amp;&amp; (f.start = c),
                g &amp;&amp; 0 === g.start &amp;&amp; (g.start = c);
                var v = a.audio
                  , m = !1;
                &quot;audio&quot; === o &amp;&amp; &quot;audio/mpeg&quot; === (null == v ? void 0 : v.container) &amp;&amp; (m = !this.lastMpegAudioChunk || 1 === h.id || this.lastMpegAudioChunk.sn !== h.sn,
                this.lastMpegAudioChunk = h);
                var p = l.start
                  , y = {
                    execute: function() {
                        if (d.executeStart = self.performance.now(),
                        m) {
                            var t = r.sourceBuffer[o];
                            if (t) {
                                var e = p - t.timestampOffset;
                                Math.abs(e) &gt;= .1 &amp;&amp; (r.log(&quot;Updating audio SourceBuffer timestampOffset to &quot; + p + &quot; (delta: &quot; + e + &quot;) sn: &quot; + l.sn + &quot;)&quot;),
                                t.timestampOffset = p)
                            }
                        }
                        r.appendExecutor(s, o)
                    },
                    onStart: function() {},
                    onComplete: function() {
                        var t = self.performance.now();
                        d.executeEnd = d.end = t,
                        0 === f.first &amp;&amp; (f.first = t),
                        g &amp;&amp; 0 === g.first &amp;&amp; (g.first = t);
                        var e = r.sourceBuffer
                          , i = {};
                        for (var n in e)
                            i[n] = Jr.getBuffered(e[n]);
                        r.appendErrors[o] = 0,
                        &quot;audio&quot; === o || &quot;video&quot; === o ? r.appendErrors.audiovideo = 0 : (r.appendErrors.audio = 0,
                        r.appendErrors.video = 0),
                        r.hls.trigger(S.BUFFER_APPENDED, {
                            type: o,
                            frag: l,
                            part: u,
                            chunkMeta: h,
                            parent: l.type,
                            timeRanges: i
                        })
                    },
                    onError: function(t) {
                        var e = {
                            type: L.MEDIA_ERROR,
                            parent: l.type,
                            details: A.BUFFER_APPEND_ERROR,
                            sourceBufferName: o,
                            frag: l,
                            part: u,
                            chunkMeta: h,
                            error: t,
                            err: t,
                            fatal: !1
                        };
                        if (t.code === DOMException.QUOTA_EXCEEDED_ERR)
                            e.details = A.BUFFER_FULL_ERROR;
                        else {
                            var n = ++r.appendErrors[o];
                            e.details = A.BUFFER_APPEND_ERROR,
                            r.warn(&quot;Failed &quot; + n + &quot;/&quot; + i.config.appendErrorMaxRetry + &#39; times to append segment in &quot;&#39; + o + &#39;&quot; sourceBuffer&#39;),
                            n &gt;= i.config.appendErrorMaxRetry &amp;&amp; (e.fatal = !0)
                        }
                        i.trigger(S.ERROR, e)
                    }
                };
                n.append(y, o, !!this.pendingTracks[o])
            }
            ,
            e.onBufferFlushing = function(t, e) {
                var r = this
                  , i = this.operationQueue
                  , n = function(t) {
                    return {
                        execute: r.removeExecutor.bind(r, t, e.startOffset, e.endOffset),
                        onStart: function() {},
                        onComplete: function() {
                            r.hls.trigger(S.BUFFER_FLUSHED, {
                                type: t
                            })
                        },
                        onError: function(e) {
                            r.warn(&quot;Failed to remove from &quot; + t + &quot; SourceBuffer&quot;, e)
                        }
                    }
                };
                e.type ? i.append(n(e.type), e.type) : this.getSourceBufferTypes().forEach((function(t) {
                    i.append(n(t), t)
                }
                ))
            }
            ,
            e.onFragParsed = function(t, e) {
                var r = this
                  , i = e.frag
                  , n = e.part
                  , a = []
                  , s = n ? n.elementaryStreams : i.elementaryStreams;
                s[U] ? a.push(&quot;audiovideo&quot;) : (s[O] &amp;&amp; a.push(&quot;audio&quot;),
                s[N] &amp;&amp; a.push(&quot;video&quot;)),
                0 === a.length &amp;&amp; this.warn(&quot;Fragments must have at least one ElementaryStreamType set. type: &quot; + i.type + &quot; level: &quot; + i.level + &quot; sn: &quot; + i.sn),
                this.blockBuffers((function() {
                    var t = self.performance.now();
                    i.stats.buffering.end = t,
                    n &amp;&amp; (n.stats.buffering.end = t);
                    var e = n ? n.stats : i.stats;
                    r.hls.trigger(S.FRAG_BUFFERED, {
                        frag: i,
                        part: n,
                        stats: e,
                        id: i.type
                    })
                }
                ), a)
            }
            ,
            e.onFragChanged = function(t, e) {
                this.trimBuffers()
            }
            ,
            e.onBufferEos = function(t, e) {
                var r = this;
                this.getSourceBufferTypes().reduce((function(t, i) {
                    var n = r.sourceBuffer[i];
                    return !n || e.type &amp;&amp; e.type !== i || (n.ending = !0,
                    n.ended || (n.ended = !0,
                    r.log(i + &quot; sourceBuffer now EOS&quot;))),
                    t &amp;&amp; !(n &amp;&amp; !n.ended)
                }
                ), !0) &amp;&amp; (this.log(&quot;Queueing mediaSource.endOfStream()&quot;),
                this.blockBuffers((function() {
                    r.getSourceBufferTypes().forEach((function(t) {
                        var e = r.sourceBuffer[t];
                        e &amp;&amp; (e.ending = !1)
                    }
                    ));
                    var t = r.mediaSource;
                    t &amp;&amp; &quot;open&quot; === t.readyState ? (r.log(&quot;Calling mediaSource.endOfStream()&quot;),
                    t.endOfStream()) : t &amp;&amp; r.log(&quot;Could not call mediaSource.endOfStream(). mediaSource.readyState: &quot; + t.readyState)
                }
                )))
            }
            ,
            e.onLevelUpdated = function(t, e) {
                var r = e.details;
                r.fragments.length &amp;&amp; (this.details = r,
                this.getSourceBufferTypes().length ? this.blockBuffers(this.updateMediaElementDuration.bind(this)) : this.updateMediaElementDuration())
            }
            ,
            e.trimBuffers = function() {
                var t = this.hls
                  , e = this.details
                  , r = this.media;
                if (r &amp;&amp; null !== e &amp;&amp; this.getSourceBufferTypes().length) {
                    var i = t.config
                      , n = r.currentTime
                      , a = e.levelTargetDuration
                      , s = e.live &amp;&amp; null !== i.liveBackBufferLength ? i.liveBackBufferLength : i.backBufferLength;
                    if (y(s) &amp;&amp; s &gt; 0) {
                        var o = Math.max(s, a)
                          , l = Math.floor(n / a) * a - o;
                        this.flushBackBuffer(n, a, l)
                    }
                    if (y(i.frontBufferFlushThreshold) &amp;&amp; i.frontBufferFlushThreshold &gt; 0) {
                        var u = Math.max(i.maxBufferLength, i.frontBufferFlushThreshold)
                          , h = Math.max(u, a)
                          , d = Math.floor(n / a) * a + h;
                        this.flushFrontBuffer(n, a, d)
                    }
                }
            }
            ,
            e.flushBackBuffer = function(t, e, r) {
                var i = this
                  , n = this.details
                  , a = this.sourceBuffer;
                this.getSourceBufferTypes().forEach((function(s) {
                    var o = a[s];
                    if (o) {
                        var l = Jr.getBuffered(o);
                        if (l.length &gt; 0 &amp;&amp; r &gt; l.start(0)) {
                            if (i.hls.trigger(S.BACK_BUFFER_REACHED, {
                                bufferEnd: r
                            }),
                            null != n &amp;&amp; n.live)
                                i.hls.trigger(S.LIVE_BACK_BUFFER_REACHED, {
                                    bufferEnd: r
                                });
                            else if (o.ended &amp;&amp; l.end(l.length - 1) - t &lt; 2 * e)
                                return void i.log(&quot;Cannot flush &quot; + s + &quot; back buffer while SourceBuffer is in ended state&quot;);
                            i.hls.trigger(S.BUFFER_FLUSHING, {
                                startOffset: 0,
                                endOffset: r,
                                type: s
                            })
                        }
                    }
                }
                ))
            }
            ,
            e.flushFrontBuffer = function(t, e, r) {
                var i = this
                  , n = this.sourceBuffer;
                this.getSourceBufferTypes().forEach((function(a) {
                    var s = n[a];
                    if (s) {
                        var o = Jr.getBuffered(s)
                          , l = o.length;
                        if (l &lt; 2)
                            return;
                        var u = o.start(l - 1)
                          , h = o.end(l - 1);
                        if (r &gt; u || t &gt;= u &amp;&amp; t &lt;= h)
                            return;
                        if (s.ended &amp;&amp; t - h &lt; 2 * e)
                            return void i.log(&quot;Cannot flush &quot; + a + &quot; front buffer while SourceBuffer is in ended state&quot;);
                        i.hls.trigger(S.BUFFER_FLUSHING, {
                            startOffset: u,
                            endOffset: 1 / 0,
                            type: a
                        })
                    }
                }
                ))
            }
            ,
            e.updateMediaElementDuration = function() {
                if (this.details &amp;&amp; this.media &amp;&amp; this.mediaSource &amp;&amp; &quot;open&quot; === this.mediaSource.readyState) {
                    var t = this.details
                      , e = this.hls
                      , r = this.media
                      , i = this.mediaSource
                      , n = t.fragments[0].start + t.totalduration
                      , a = r.duration
                      , s = y(i.duration) ? i.duration : 0;
                    t.live &amp;&amp; e.config.liveDurationInfinity ? (i.duration = 1 / 0,
                    this.updateSeekableRange(t)) : (n &gt; s &amp;&amp; n &gt; a || !y(a)) &amp;&amp; (this.log(&quot;Updating Media Source duration to &quot; + n.toFixed(3)),
                    i.duration = n)
                }
            }
            ,
            e.updateSeekableRange = function(t) {
                var e = this.mediaSource
                  , r = t.fragments;
                if (r.length &amp;&amp; t.live &amp;&amp; null != e &amp;&amp; e.setLiveSeekableRange) {
                    var i = Math.max(0, r[0].start)
                      , n = Math.max(i, i + t.totalduration);
                    this.log(&quot;Media Source duration is set to &quot; + e.duration + &quot;. Setting seekable range to &quot; + i + &quot;-&quot; + n + &quot;.&quot;),
                    e.setLiveSeekableRange(i, n)
                }
            }
            ,
            e.checkPendingTracks = function() {
                var t = this.bufferCodecEventsExpected
                  , e = this.operationQueue
                  , r = this.pendingTracks
                  , i = Object.keys(r).length;
                if (i &amp;&amp; (!t || 2 === i || &quot;audiovideo&quot;in r)) {
                    this.createSourceBuffers(r),
                    this.pendingTracks = {};
                    var n = this.getSourceBufferTypes();
                    if (n.length)
                        this.hls.trigger(S.BUFFER_CREATED, {
                            tracks: this.tracks
                        }),
                        n.forEach((function(t) {
                            e.executeNext(t)
                        }
                        ));
                    else {
                        var a = new Error(&quot;could not create source buffer for media codec(s)&quot;);
                        this.hls.trigger(S.ERROR, {
                            type: L.MEDIA_ERROR,
                            details: A.BUFFER_INCOMPATIBLE_CODECS_ERROR,
                            fatal: !0,
                            error: a,
                            reason: a.message
                        })
                    }
                }
            }
            ,
            e.createSourceBuffers = function(t) {
                var e = this
                  , r = this.sourceBuffer
                  , i = this.mediaSource;
                if (!i)
                    throw Error(&quot;createSourceBuffers called when mediaSource was null&quot;);
                var n = function(n) {
                    if (!r[n]) {
                        var a, s = t[n];
                        if (!s)
                            throw Error(&quot;source buffer exists for track &quot; + n + &quot;, however track does not&quot;);
                        var o = -1 === (null == (a = s.levelCodec) ? void 0 : a.indexOf(&quot;,&quot;)) ? s.levelCodec : s.codec;
                        o &amp;&amp; &quot;audio&quot; === n.slice(0, 5) &amp;&amp; (o = he(o, e.appendSource));
                        var l = s.container + &quot;;codecs=&quot; + o;
                        e.log(&quot;creating sourceBuffer(&quot; + l + &quot;)&quot;);
                        try {
                            var u = r[n] = i.addSourceBuffer(l)
                              , h = n;
                            e.addBufferListener(h, &quot;updatestart&quot;, e._onSBUpdateStart),
                            e.addBufferListener(h, &quot;updateend&quot;, e._onSBUpdateEnd),
                            e.addBufferListener(h, &quot;error&quot;, e._onSBUpdateError),
                            e.appendSource &amp;&amp; e.addBufferListener(h, &quot;bufferedchange&quot;, (function(t, r) {
                                var i = r.removedRanges;
                                null != i &amp;&amp; i.length &amp;&amp; e.hls.trigger(S.BUFFER_FLUSHED, {
                                    type: n
                                })
                            }
                            )),
                            e.tracks[n] = {
                                buffer: u,
                                codec: o,
                                container: s.container,
                                levelCodec: s.levelCodec,
                                metadata: s.metadata,
                                id: s.id
                            }
                        } catch (t) {
                            e.error(&quot;error while trying to add sourceBuffer: &quot; + t.message),
                            e.hls.trigger(S.ERROR, {
                                type: L.MEDIA_ERROR,
                                details: A.BUFFER_ADD_CODEC_ERROR,
                                fatal: !1,
                                error: t,
                                sourceBufferName: n,
                                mimeType: l
                            })
                        }
                    }
                };
                for (var a in t)
                    n(a)
            }
            ,
            e._onSBUpdateStart = function(t) {
                this.operationQueue.current(t).onStart()
            }
            ,
            e._onSBUpdateEnd = function(t) {
                var e;
                if (&quot;closed&quot; !== (null == (e = this.mediaSource) ? void 0 : e.readyState)) {
                    var r = this.operationQueue;
                    r.current(t).onComplete(),
                    r.shiftAndExecuteNext(t)
                } else
                    this.resetBuffer(t)
            }
            ,
            e._onSBUpdateError = function(t, e) {
                var r, i = new Error(t + &quot; SourceBuffer error. MediaSource readyState: &quot; + (null == (r = this.mediaSource) ? void 0 : r.readyState));
                this.error(&quot;&quot; + i, e),
                this.hls.trigger(S.ERROR, {
                    type: L.MEDIA_ERROR,
                    details: A.BUFFER_APPENDING_ERROR,
                    sourceBufferName: t,
                    error: i,
                    fatal: !1
                });
                var n = this.operationQueue.current(t);
                n &amp;&amp; n.onError(i)
            }
            ,
            e.removeExecutor = function(t, e, r) {
                var i = this.media
                  , n = this.mediaSource
                  , a = this.operationQueue
                  , s = this.sourceBuffer[t];
                if (!i || !n || !s)
                    return this.warn(&quot;Attempting to remove from the &quot; + t + &quot; SourceBuffer, but it does not exist&quot;),
                    void a.shiftAndExecuteNext(t);
                var o = y(i.duration) ? i.duration : 1 / 0
                  , l = y(n.duration) ? n.duration : 1 / 0
                  , u = Math.max(0, e)
                  , h = Math.min(r, o, l);
                h &gt; u &amp;&amp; (!s.ending || s.ended) ? (s.ended = !1,
                this.log(&quot;Removing [&quot; + u + &quot;,&quot; + h + &quot;] from the &quot; + t + &quot; SourceBuffer&quot;),
                s.remove(u, h)) : a.shiftAndExecuteNext(t)
            }
            ,
            e.appendExecutor = function(t, e) {
                var r = this.sourceBuffer[e];
                if (r)
                    r.ended = !1,
                    r.appendBuffer(t);
                else if (!this.pendingTracks[e])
                    throw new Error(&quot;Attempting to append to the &quot; + e + &quot; SourceBuffer, but it does not exist&quot;)
            }
            ,
            e.blockBuffers = function(t, e) {
                var r = this;
                if (void 0 === e &amp;&amp; (e = this.getSourceBufferTypes()),
                !e.length)
                    return this.log(&quot;Blocking operation requested, but no SourceBuffers exist&quot;),
                    void Promise.resolve().then(t);
                var i = this.operationQueue
                  , n = e.map((function(t) {
                    return i.appendBlocker(t)
                }
                ));
                Promise.all(n).then((function() {
                    t(),
                    e.forEach((function(t) {
                        var e = r.sourceBuffer[t];
                        null != e &amp;&amp; e.updating || i.shiftAndExecuteNext(t)
                    }
                    ))
                }
                ))
            }
            ,
            e.getSourceBufferTypes = function() {
                return Object.keys(this.sourceBuffer)
            }
            ,
            e.addBufferListener = function(t, e, r) {
                var i = this.sourceBuffer[t];
                if (i) {
                    var n = r.bind(this, t);
                    this.listeners[t].push({
                        event: e,
                        listener: n
                    }),
                    i.addEventListener(e, n)
                }
            }
            ,
            e.removeBufferListeners = function(t) {
                var e = this.sourceBuffer[t];
                e &amp;&amp; this.listeners[t].forEach((function(t) {
                    e.removeEventListener(t.event, t.listener)
                }
                ))
            }
            ,
            s(t, [{
                key: &quot;mediaSrc&quot;,
                get: function() {
                    var t, e = (null == (t = this.media) ? void 0 : t.firstChild) || this.media;
                    return null == e ? void 0 : e.src
                }
            }]),
            t
        }();
        function ta(t) {
            var e = t.querySelectorAll(&quot;source&quot;);
            [].slice.call(e).forEach((function(e) {
                t.removeChild(e)
            }
            ))
        }
        var ea = {
            42: 225,
            92: 233,
            94: 237,
            95: 243,
            96: 250,
            123: 231,
            124: 247,
            125: 209,
            126: 241,
            127: 9608,
            128: 174,
            129: 176,
            130: 189,
            131: 191,
            132: 8482,
            133: 162,
            134: 163,
            135: 9834,
            136: 224,
            137: 32,
            138: 232,
            139: 226,
            140: 234,
            141: 238,
            142: 244,
            143: 251,
            144: 193,
            145: 201,
            146: 211,
            147: 218,
            148: 220,
            149: 252,
            150: 8216,
            151: 161,
            152: 42,
            153: 8217,
            154: 9473,
            155: 169,
            156: 8480,
            157: 8226,
            158: 8220,
            159: 8221,
            160: 192,
            161: 194,
            162: 199,
            163: 200,
            164: 202,
            165: 203,
            166: 235,
            167: 206,
            168: 207,
            169: 239,
            170: 212,
            171: 217,
            172: 249,
            173: 219,
            174: 171,
            175: 187,
            176: 195,
            177: 227,
            178: 205,
            179: 204,
            180: 236,
            181: 210,
            182: 242,
            183: 213,
            184: 245,
            185: 123,
            186: 125,
            187: 92,
            188: 94,
            189: 95,
            190: 124,
            191: 8764,
            192: 196,
            193: 228,
            194: 214,
            195: 246,
            196: 223,
            197: 165,
            198: 164,
            199: 9475,
            200: 197,
            201: 229,
            202: 216,
            203: 248,
            204: 9487,
            205: 9491,
            206: 9495,
            207: 9499
        }
          , ra = function(t) {
            return String.fromCharCode(ea[t] || t)
        }
          , ia = 15
          , na = 100
          , aa = {
            17: 1,
            18: 3,
            21: 5,
            22: 7,
            23: 9,
            16: 11,
            19: 12,
            20: 14
        }
          , sa = {
            17: 2,
            18: 4,
            21: 6,
            22: 8,
            23: 10,
            19: 13,
            20: 15
        }
          , oa = {
            25: 1,
            26: 3,
            29: 5,
            30: 7,
            31: 9,
            24: 11,
            27: 12,
            28: 14
        }
          , la = {
            25: 2,
            26: 4,
            29: 6,
            30: 8,
            31: 10,
            27: 13,
            28: 15
        }
          , ua = [&quot;white&quot;, &quot;green&quot;, &quot;blue&quot;, &quot;cyan&quot;, &quot;red&quot;, &quot;yellow&quot;, &quot;magenta&quot;, &quot;black&quot;, &quot;transparent&quot;]
          , ha = function() {
            function t() {
                this.time = null,
                this.verboseLevel = 0
            }
            return t.prototype.log = function(t, e) {
                if (this.verboseLevel &gt;= t) {
                    var r = &quot;function&quot; == typeof e ? e() : e;
                    w.log(this.time + &quot; [&quot; + t + &quot;] &quot; + r)
                }
            }
            ,
            t
        }()
          , da = function(t) {
            for (var e = [], r = 0; r &lt; t.length; r++)
                e.push(t[r].toString(16));
            return e
        }
          , ca = function() {
            function t() {
                this.foreground = &quot;white&quot;,
                this.underline = !1,
                this.italics = !1,
                this.background = &quot;black&quot;,
                this.flash = !1
            }
            var e = t.prototype;
            return e.reset = function() {
                this.foreground = &quot;white&quot;,
                this.underline = !1,
                this.italics = !1,
                this.background = &quot;black&quot;,
                this.flash = !1
            }
            ,
            e.setStyles = function(t) {
                for (var e = [&quot;foreground&quot;, &quot;underline&quot;, &quot;italics&quot;, &quot;background&quot;, &quot;flash&quot;], r = 0; r &lt; e.length; r++) {
                    var i = e[r];
                    t.hasOwnProperty(i) &amp;&amp; (this[i] = t[i])
                }
            }
            ,
            e.isDefault = function() {
                return &quot;white&quot; === this.foreground &amp;&amp; !this.underline &amp;&amp; !this.italics &amp;&amp; &quot;black&quot; === this.background &amp;&amp; !this.flash
            }
            ,
            e.equals = function(t) {
                return this.foreground === t.foreground &amp;&amp; this.underline === t.underline &amp;&amp; this.italics === t.italics &amp;&amp; this.background === t.background &amp;&amp; this.flash === t.flash
            }
            ,
            e.copy = function(t) {
                this.foreground = t.foreground,
                this.underline = t.underline,
                this.italics = t.italics,
                this.background = t.background,
                this.flash = t.flash
            }
            ,
            e.toString = function() {
                return &quot;color=&quot; + this.foreground + &quot;, underline=&quot; + this.underline + &quot;, italics=&quot; + this.italics + &quot;, background=&quot; + this.background + &quot;, flash=&quot; + this.flash
            }
            ,
            t
        }()
          , fa = function() {
            function t() {
                this.uchar = &quot; &quot;,
                this.penState = new ca
            }
            var e = t.prototype;
            return e.reset = function() {
                this.uchar = &quot; &quot;,
                this.penState.reset()
            }
            ,
            e.setChar = function(t, e) {
                this.uchar = t,
                this.penState.copy(e)
            }
            ,
            e.setPenState = function(t) {
                this.penState.copy(t)
            }
            ,
            e.equals = function(t) {
                return this.uchar === t.uchar &amp;&amp; this.penState.equals(t.penState)
            }
            ,
            e.copy = function(t) {
                this.uchar = t.uchar,
                this.penState.copy(t.penState)
            }
            ,
            e.isEmpty = function() {
                return &quot; &quot; === this.uchar &amp;&amp; this.penState.isDefault()
            }
            ,
            t
        }()
          , ga = function() {
            function t(t) {
                this.chars = [],
                this.pos = 0,
                this.currPenState = new ca,
                this.cueStartTime = null,
                this.logger = void 0;
                for (var e = 0; e &lt; na; e++)
                    this.chars.push(new fa);
                this.logger = t
            }
            var e = t.prototype;
            return e.equals = function(t) {
                for (var e = 0; e &lt; na; e++)
                    if (!this.chars[e].equals(t.chars[e]))
                        return !1;
                return !0
            }
            ,
            e.copy = function(t) {
                for (var e = 0; e &lt; na; e++)
                    this.chars[e].copy(t.chars[e])
            }
            ,
            e.isEmpty = function() {
                for (var t = !0, e = 0; e &lt; na; e++)
                    if (!this.chars[e].isEmpty()) {
                        t = !1;
                        break
                    }
                return t
            }
            ,
            e.setCursor = function(t) {
                this.pos !== t &amp;&amp; (this.pos = t),
                this.pos &lt; 0 ? (this.logger.log(3, &quot;Negative cursor position &quot; + this.pos),
                this.pos = 0) : this.pos &gt; na &amp;&amp; (this.logger.log(3, &quot;Too large cursor position &quot; + this.pos),
                this.pos = na)
            }
            ,
            e.moveCursor = function(t) {
                var e = this.pos + t;
                if (t &gt; 1)
                    for (var r = this.pos + 1; r &lt; e + 1; r++)
                        this.chars[r].setPenState(this.currPenState);
                this.setCursor(e)
            }
            ,
            e.backSpace = function() {
                this.moveCursor(-1),
                this.chars[this.pos].setChar(&quot; &quot;, this.currPenState)
            }
            ,
            e.insertChar = function(t) {
                var e = this;
                t &gt;= 144 &amp;&amp; this.backSpace();
                var r = ra(t);
                this.pos &gt;= na ? this.logger.log(0, (function() {
                    return &quot;Cannot insert &quot; + t.toString(16) + &quot; (&quot; + r + &quot;) at position &quot; + e.pos + &quot;. Skipping it!&quot;
                }
                )) : (this.chars[this.pos].setChar(r, this.currPenState),
                this.moveCursor(1))
            }
            ,
            e.clearFromPos = function(t) {
                var e;
                for (e = t; e &lt; na; e++)
                    this.chars[e].reset()
            }
            ,
            e.clear = function() {
                this.clearFromPos(0),
                this.pos = 0,
                this.currPenState.reset()
            }
            ,
            e.clearToEndOfRow = function() {
                this.clearFromPos(this.pos)
            }
            ,
            e.getTextString = function() {
                for (var t = [], e = !0, r = 0; r &lt; na; r++) {
                    var i = this.chars[r].uchar;
                    &quot; &quot; !== i &amp;&amp; (e = !1),
                    t.push(i)
                }
                return e ? &quot;&quot; : t.join(&quot;&quot;)
            }
            ,
            e.setPenStyles = function(t) {
                this.currPenState.setStyles(t),
                this.chars[this.pos].setPenState(this.currPenState)
            }
            ,
            t
        }()
          , va = function() {
            function t(t) {
                this.rows = [],
                this.currRow = 14,
                this.nrRollUpRows = null,
                this.lastOutputScreen = null,
                this.logger = void 0;
                for (var e = 0; e &lt; ia; e++)
                    this.rows.push(new ga(t));
                this.logger = t
            }
            var e = t.prototype;
            return e.reset = function() {
                for (var t = 0; t &lt; ia; t++)
                    this.rows[t].clear();
                this.currRow = 14
            }
            ,
            e.equals = function(t) {
                for (var e = !0, r = 0; r &lt; ia; r++)
                    if (!this.rows[r].equals(t.rows[r])) {
                        e = !1;
                        break
                    }
                return e
            }
            ,
            e.copy = function(t) {
                for (var e = 0; e &lt; ia; e++)
                    this.rows[e].copy(t.rows[e])
            }
            ,
            e.isEmpty = function() {
                for (var t = !0, e = 0; e &lt; ia; e++)
                    if (!this.rows[e].isEmpty()) {
                        t = !1;
                        break
                    }
                return t
            }
            ,
            e.backSpace = function() {
                this.rows[this.currRow].backSpace()
            }
            ,
            e.clearToEndOfRow = function() {
                this.rows[this.currRow].clearToEndOfRow()
            }
            ,
            e.insertChar = function(t) {
                this.rows[this.currRow].insertChar(t)
            }
            ,
            e.setPen = function(t) {
                this.rows[this.currRow].setPenStyles(t)
            }
            ,
            e.moveCursor = function(t) {
                this.rows[this.currRow].moveCursor(t)
            }
            ,
            e.setCursor = function(t) {
                this.logger.log(2, &quot;setCursor: &quot; + t),
                this.rows[this.currRow].setCursor(t)
            }
            ,
            e.setPAC = function(t) {
                this.logger.log(2, (function() {
                    return &quot;pacData = &quot; + JSON.stringify(t)
                }
                ));
                var e = t.row - 1;
                if (this.nrRollUpRows &amp;&amp; e &lt; this.nrRollUpRows - 1 &amp;&amp; (e = this.nrRollUpRows - 1),
                this.nrRollUpRows &amp;&amp; this.currRow !== e) {
                    for (var r = 0; r &lt; ia; r++)
                        this.rows[r].clear();
                    var i = this.currRow + 1 - this.nrRollUpRows
                      , n = this.lastOutputScreen;
                    if (n) {
                        var a = n.rows[i].cueStartTime
                          , s = this.logger.time;
                        if (null !== a &amp;&amp; null !== s &amp;&amp; a &lt; s)
                            for (var o = 0; o &lt; this.nrRollUpRows; o++)
                                this.rows[e - this.nrRollUpRows + o + 1].copy(n.rows[i + o])
                    }
                }
                this.currRow = e;
                var l = this.rows[this.currRow];
                if (null !== t.indent) {
                    var u = t.indent
                      , h = Math.max(u - 1, 0);
                    l.setCursor(t.indent),
                    t.color = l.chars[h].penState.foreground
                }
                var d = {
                    foreground: t.color,
                    underline: t.underline,
                    italics: t.italics,
                    background: &quot;black&quot;,
                    flash: !1
                };
                this.setPen(d)
            }
            ,
            e.setBkgData = function(t) {
                this.logger.log(2, (function() {
                    return &quot;bkgData = &quot; + JSON.stringify(t)
                }
                )),
                this.backSpace(),
                this.setPen(t),
                this.insertChar(32)
            }
            ,
            e.setRollUpRows = function(t) {
                this.nrRollUpRows = t
            }
            ,
            e.rollUp = function() {
                var t = this;
                if (null !== this.nrRollUpRows) {
                    this.logger.log(1, (function() {
                        return t.getDisplayText()
                    }
                    ));
                    var e = this.currRow + 1 - this.nrRollUpRows
                      , r = this.rows.splice(e, 1)[0];
                    r.clear(),
                    this.rows.splice(this.currRow, 0, r),
                    this.logger.log(2, &quot;Rolling up&quot;)
                } else
                    this.logger.log(3, &quot;roll_up but nrRollUpRows not set yet&quot;)
            }
            ,
            e.getDisplayText = function(t) {
                t = t || !1;
                for (var e = [], r = &quot;&quot;, i = -1, n = 0; n &lt; ia; n++) {
                    var a = this.rows[n].getTextString();
                    a &amp;&amp; (i = n + 1,
                    t ? e.push(&quot;Row &quot; + i + &quot;: &#39;&quot; + a + &quot;&#39;&quot;) : e.push(a.trim()))
                }
                return e.length &gt; 0 &amp;&amp; (r = t ? &quot;[&quot; + e.join(&quot; | &quot;) + &quot;]&quot; : e.join(&quot;\n&quot;)),
                r
            }
            ,
            e.getTextAndFormat = function() {
                return this.rows
            }
            ,
            t
        }()
          , ma = function() {
            function t(t, e, r) {
                this.chNr = void 0,
                this.outputFilter = void 0,
                this.mode = void 0,
                this.verbose = void 0,
                this.displayedMemory = void 0,
                this.nonDisplayedMemory = void 0,
                this.lastOutputScreen = void 0,
                this.currRollUpRow = void 0,
                this.writeScreen = void 0,
                this.cueStartTime = void 0,
                this.logger = void 0,
                this.chNr = t,
                this.outputFilter = e,
                this.mode = null,
                this.verbose = 0,
                this.displayedMemory = new va(r),
                this.nonDisplayedMemory = new va(r),
                this.lastOutputScreen = new va(r),
                this.currRollUpRow = this.displayedMemory.rows[14],
                this.writeScreen = this.displayedMemory,
                this.mode = null,
                this.cueStartTime = null,
                this.logger = r
            }
            var e = t.prototype;
            return e.reset = function() {
                this.mode = null,
                this.displayedMemory.reset(),
                this.nonDisplayedMemory.reset(),
                this.lastOutputScreen.reset(),
                this.outputFilter.reset(),
                this.currRollUpRow = this.displayedMemory.rows[14],
                this.writeScreen = this.displayedMemory,
                this.mode = null,
                this.cueStartTime = null
            }
            ,
            e.getHandler = function() {
                return this.outputFilter
            }
            ,
            e.setHandler = function(t) {
                this.outputFilter = t
            }
            ,
            e.setPAC = function(t) {
                this.writeScreen.setPAC(t)
            }
            ,
            e.setBkgData = function(t) {
                this.writeScreen.setBkgData(t)
            }
            ,
            e.setMode = function(t) {
                t !== this.mode &amp;&amp; (this.mode = t,
                this.logger.log(2, (function() {
                    return &quot;MODE=&quot; + t
                }
                )),
                &quot;MODE_POP-ON&quot; === this.mode ? this.writeScreen = this.nonDisplayedMemory : (this.writeScreen = this.displayedMemory,
                this.writeScreen.reset()),
                &quot;MODE_ROLL-UP&quot; !== this.mode &amp;&amp; (this.displayedMemory.nrRollUpRows = null,
                this.nonDisplayedMemory.nrRollUpRows = null),
                this.mode = t)
            }
            ,
            e.insertChars = function(t) {
                for (var e = this, r = 0; r &lt; t.length; r++)
                    this.writeScreen.insertChar(t[r]);
                var i = this.writeScreen === this.displayedMemory ? &quot;DISP&quot; : &quot;NON_DISP&quot;;
                this.logger.log(2, (function() {
                    return i + &quot;: &quot; + e.writeScreen.getDisplayText(!0)
                }
                )),
                &quot;MODE_PAINT-ON&quot; !== this.mode &amp;&amp; &quot;MODE_ROLL-UP&quot; !== this.mode || (this.logger.log(1, (function() {
                    return &quot;DISPLAYED: &quot; + e.displayedMemory.getDisplayText(!0)
                }
                )),
                this.outputDataUpdate())
            }
            ,
            e.ccRCL = function() {
                this.logger.log(2, &quot;RCL - Resume Caption Loading&quot;),
                this.setMode(&quot;MODE_POP-ON&quot;)
            }
            ,
            e.ccBS = function() {
                this.logger.log(2, &quot;BS - BackSpace&quot;),
                &quot;MODE_TEXT&quot; !== this.mode &amp;&amp; (this.writeScreen.backSpace(),
                this.writeScreen === this.displayedMemory &amp;&amp; this.outputDataUpdate())
            }
            ,
            e.ccAOF = function() {}
            ,
            e.ccAON = function() {}
            ,
            e.ccDER = function() {
                this.logger.log(2, &quot;DER- Delete to End of Row&quot;),
                this.writeScreen.clearToEndOfRow(),
                this.outputDataUpdate()
            }
            ,
            e.ccRU = function(t) {
                this.logger.log(2, &quot;RU(&quot; + t + &quot;) - Roll Up&quot;),
                this.writeScreen = this.displayedMemory,
                this.setMode(&quot;MODE_ROLL-UP&quot;),
                this.writeScreen.setRollUpRows(t)
            }
            ,
            e.ccFON = function() {
                this.logger.log(2, &quot;FON - Flash On&quot;),
                this.writeScreen.setPen({
                    flash: !0
                })
            }
            ,
            e.ccRDC = function() {
                this.logger.log(2, &quot;RDC - Resume Direct Captioning&quot;),
                this.setMode(&quot;MODE_PAINT-ON&quot;)
            }
            ,
            e.ccTR = function() {
                this.logger.log(2, &quot;TR&quot;),
                this.setMode(&quot;MODE_TEXT&quot;)
            }
            ,
            e.ccRTD = function() {
                this.logger.log(2, &quot;RTD&quot;),
                this.setMode(&quot;MODE_TEXT&quot;)
            }
            ,
            e.ccEDM = function() {
                this.logger.log(2, &quot;EDM - Erase Displayed Memory&quot;),
                this.displayedMemory.reset(),
                this.outputDataUpdate(!0)
            }
            ,
            e.ccCR = function() {
                this.logger.log(2, &quot;CR - Carriage Return&quot;),
                this.writeScreen.rollUp(),
                this.outputDataUpdate(!0)
            }
            ,
            e.ccENM = function() {
                this.logger.log(2, &quot;ENM - Erase Non-displayed Memory&quot;),
                this.nonDisplayedMemory.reset()
            }
            ,
            e.ccEOC = function() {
                var t = this;
                if (this.logger.log(2, &quot;EOC - End Of Caption&quot;),
                &quot;MODE_POP-ON&quot; === this.mode) {
                    var e = this.displayedMemory;
                    this.displayedMemory = this.nonDisplayedMemory,
                    this.nonDisplayedMemory = e,
                    this.writeScreen = this.nonDisplayedMemory,
                    this.logger.log(1, (function() {
                        return &quot;DISP: &quot; + t.displayedMemory.getDisplayText()
                    }
                    ))
                }
                this.outputDataUpdate(!0)
            }
            ,
            e.ccTO = function(t) {
                this.logger.log(2, &quot;TO(&quot; + t + &quot;) - Tab Offset&quot;),
                this.writeScreen.moveCursor(t)
            }
            ,
            e.ccMIDROW = function(t) {
                var e = {
                    flash: !1
                };
                if (e.underline = t % 2 == 1,
                e.italics = t &gt;= 46,
                e.italics)
                    e.foreground = &quot;white&quot;;
                else {
                    var r = Math.floor(t / 2) - 16;
                    e.foreground = [&quot;white&quot;, &quot;green&quot;, &quot;blue&quot;, &quot;cyan&quot;, &quot;red&quot;, &quot;yellow&quot;, &quot;magenta&quot;][r]
                }
                this.logger.log(2, &quot;MIDROW: &quot; + JSON.stringify(e)),
                this.writeScreen.setPen(e)
            }
            ,
            e.outputDataUpdate = function(t) {
                void 0 === t &amp;&amp; (t = !1);
                var e = this.logger.time;
                null !== e &amp;&amp; this.outputFilter &amp;&amp; (null !== this.cueStartTime || this.displayedMemory.isEmpty() ? this.displayedMemory.equals(this.lastOutputScreen) || (this.outputFilter.newCue(this.cueStartTime, e, this.lastOutputScreen),
                t &amp;&amp; this.outputFilter.dispatchCue &amp;&amp; this.outputFilter.dispatchCue(),
                this.cueStartTime = this.displayedMemory.isEmpty() ? null : e) : this.cueStartTime = e,
                this.lastOutputScreen.copy(this.displayedMemory))
            }
            ,
            e.cueSplitAtTime = function(t) {
                this.outputFilter &amp;&amp; (this.displayedMemory.isEmpty() || (this.outputFilter.newCue &amp;&amp; this.outputFilter.newCue(this.cueStartTime, t, this.displayedMemory),
                this.cueStartTime = t))
            }
            ,
            t
        }()
          , pa = function() {
            function t(t, e, r) {
                this.channels = void 0,
                this.currentChannel = 0,
                this.cmdHistory = {
                    a: null,
                    b: null
                },
                this.logger = void 0;
                var i = this.logger = new ha;
                this.channels = [null, new ma(t,e,i), new ma(t + 1,r,i)]
            }
            var e = t.prototype;
            return e.getHandler = function(t) {
                return this.channels[t].getHandler()
            }
            ,
            e.setHandler = function(t, e) {
                this.channels[t].setHandler(e)
            }
            ,
            e.addData = function(t, e) {
                var r = this;
                this.logger.time = t;
                for (var i = function(t) {
                    var i = 127 &amp; e[t]
                      , n = 127 &amp; e[t + 1]
                      , a = !1
                      , s = null;
                    if (0 === i &amp;&amp; 0 === n)
                        return 0;
                    r.logger.log(3, (function() {
                        return &quot;[&quot; + da([e[t], e[t + 1]]) + &quot;] -&gt; (&quot; + da([i, n]) + &quot;)&quot;
                    }
                    ));
                    var o = r.cmdHistory;
                    if (i &gt;= 16 &amp;&amp; i &lt;= 31) {
                        if (function(t, e, r) {
                            return r.a === t &amp;&amp; r.b === e
                        }(i, n, o))
                            return ya(null, null, o),
                            r.logger.log(3, (function() {
                                return &quot;Repeated command (&quot; + da([i, n]) + &quot;) is dropped&quot;
                            }
                            )),
                            0;
                        ya(i, n, r.cmdHistory),
                        (a = r.parseCmd(i, n)) || (a = r.parseMidrow(i, n)),
                        a || (a = r.parsePAC(i, n)),
                        a || (a = r.parseBackgroundAttributes(i, n))
                    } else
                        ya(null, null, o);
                    if (!a &amp;&amp; (s = r.parseChars(i, n))) {
                        var l = r.currentChannel;
                        l &amp;&amp; l &gt; 0 ? r.channels[l].insertChars(s) : r.logger.log(2, &quot;No channel found yet. TEXT-MODE?&quot;)
                    }
                    a || s || r.logger.log(2, (function() {
                        return &quot;Couldn&#39;t parse cleaned data &quot; + da([i, n]) + &quot; orig: &quot; + da([e[t], e[t + 1]])
                    }
                    ))
                }, n = 0; n &lt; e.length; n += 2)
                    i(n)
            }
            ,
            e.parseCmd = function(t, e) {
                if (!((20 === t || 28 === t || 21 === t || 29 === t) &amp;&amp; e &gt;= 32 &amp;&amp; e &lt;= 47 || (23 === t || 31 === t) &amp;&amp; e &gt;= 33 &amp;&amp; e &lt;= 35))
                    return !1;
                var r = 20 === t || 21 === t || 23 === t ? 1 : 2
                  , i = this.channels[r];
                return 20 === t || 21 === t || 28 === t || 29 === t ? 32 === e ? i.ccRCL() : 33 === e ? i.ccBS() : 34 === e ? i.ccAOF() : 35 === e ? i.ccAON() : 36 === e ? i.ccDER() : 37 === e ? i.ccRU(2) : 38 === e ? i.ccRU(3) : 39 === e ? i.ccRU(4) : 40 === e ? i.ccFON() : 41 === e ? i.ccRDC() : 42 === e ? i.ccTR() : 43 === e ? i.ccRTD() : 44 === e ? i.ccEDM() : 45 === e ? i.ccCR() : 46 === e ? i.ccENM() : 47 === e &amp;&amp; i.ccEOC() : i.ccTO(e - 32),
                this.currentChannel = r,
                !0
            }
            ,
            e.parseMidrow = function(t, e) {
                var r = 0;
                if ((17 === t || 25 === t) &amp;&amp; e &gt;= 32 &amp;&amp; e &lt;= 47) {
                    if ((r = 17 === t ? 1 : 2) !== this.currentChannel)
                        return this.logger.log(0, &quot;Mismatch channel in midrow parsing&quot;),
                        !1;
                    var i = this.channels[r];
                    return !!i &amp;&amp; (i.ccMIDROW(e),
                    this.logger.log(3, (function() {
                        return &quot;MIDROW (&quot; + da([t, e]) + &quot;)&quot;
                    }
                    )),
                    !0)
                }
                return !1
            }
            ,
            e.parsePAC = function(t, e) {
                var r;
                if (!((t &gt;= 17 &amp;&amp; t &lt;= 23 || t &gt;= 25 &amp;&amp; t &lt;= 31) &amp;&amp; e &gt;= 64 &amp;&amp; e &lt;= 127 || (16 === t || 24 === t) &amp;&amp; e &gt;= 64 &amp;&amp; e &lt;= 95))
                    return !1;
                var i = t &lt;= 23 ? 1 : 2;
                r = e &gt;= 64 &amp;&amp; e &lt;= 95 ? 1 === i ? aa[t] : oa[t] : 1 === i ? sa[t] : la[t];
                var n = this.channels[i];
                return !!n &amp;&amp; (n.setPAC(this.interpretPAC(r, e)),
                this.currentChannel = i,
                !0)
            }
            ,
            e.interpretPAC = function(t, e) {
                var r, i = {
                    color: null,
                    italics: !1,
                    indent: null,
                    underline: !1,
                    row: t
                };
                return r = e &gt; 95 ? e - 96 : e - 64,
                i.underline = 1 == (1 &amp; r),
                r &lt;= 13 ? i.color = [&quot;white&quot;, &quot;green&quot;, &quot;blue&quot;, &quot;cyan&quot;, &quot;red&quot;, &quot;yellow&quot;, &quot;magenta&quot;, &quot;white&quot;][Math.floor(r / 2)] : r &lt;= 15 ? (i.italics = !0,
                i.color = &quot;white&quot;) : i.indent = 4 * Math.floor((r - 16) / 2),
                i
            }
            ,
            e.parseChars = function(t, e) {
                var r, i, n = null, a = null;
                return t &gt;= 25 ? (r = 2,
                a = t - 8) : (r = 1,
                a = t),
                a &gt;= 17 &amp;&amp; a &lt;= 19 ? (i = 17 === a ? e + 80 : 18 === a ? e + 112 : e + 144,
                this.logger.log(2, (function() {
                    return &quot;Special char &#39;&quot; + ra(i) + &quot;&#39; in channel &quot; + r
                }
                )),
                n = [i]) : t &gt;= 32 &amp;&amp; t &lt;= 127 &amp;&amp; (n = 0 === e ? [t] : [t, e]),
                n &amp;&amp; this.logger.log(3, (function() {
                    return &quot;Char codes =  &quot; + da(n).join(&quot;,&quot;)
                }
                )),
                n
            }
            ,
            e.parseBackgroundAttributes = function(t, e) {
                var r;
                if (!((16 === t || 24 === t) &amp;&amp; e &gt;= 32 &amp;&amp; e &lt;= 47 || (23 === t || 31 === t) &amp;&amp; e &gt;= 45 &amp;&amp; e &lt;= 47))
                    return !1;
                var i = {};
                16 === t || 24 === t ? (r = Math.floor((e - 32) / 2),
                i.background = ua[r],
                e % 2 == 1 &amp;&amp; (i.background = i.background + &quot;_semi&quot;)) : 45 === e ? i.background = &quot;transparent&quot; : (i.foreground = &quot;black&quot;,
                47 === e &amp;&amp; (i.underline = !0));
                var n = t &lt;= 23 ? 1 : 2;
                return this.channels[n].setBkgData(i),
                !0
            }
            ,
            e.reset = function() {
                for (var t = 0; t &lt; Object.keys(this.channels).length; t++) {
                    var e = this.channels[t];
                    e &amp;&amp; e.reset()
                }
                ya(null, null, this.cmdHistory)
            }
            ,
            e.cueSplitAtTime = function(t) {
                for (var e = 0; e &lt; this.channels.length; e++) {
                    var r = this.channels[e];
                    r &amp;&amp; r.cueSplitAtTime(t)
                }
            }
            ,
            t
        }();
        function ya(t, e, r) {
            r.a = t,
            r.b = e
        }
        var Ea = function() {
            function t(t, e) {
                this.timelineController = void 0,
                this.cueRanges = [],
                this.trackName = void 0,
                this.startTime = null,
                this.endTime = null,
                this.screen = null,
                this.timelineController = t,
                this.trackName = e
            }
            var e = t.prototype;
            return e.dispatchCue = function() {
                null !== this.startTime &amp;&amp; (this.timelineController.addCues(this.trackName, this.startTime, this.endTime, this.screen, this.cueRanges),
                this.startTime = null)
            }
            ,
            e.newCue = function(t, e, r) {
                (null === this.startTime || this.startTime &gt; t) &amp;&amp; (this.startTime = t),
                this.endTime = e,
                this.screen = r,
                this.timelineController.createCaptionsTrack(this.trackName)
            }
            ,
            e.reset = function() {
                this.cueRanges = [],
                this.startTime = null
            }
            ,
            t
        }()
          , Ta = function() {
            if (null != j &amp;&amp; j.VTTCue)
                return self.VTTCue;
            var t = [&quot;&quot;, &quot;lr&quot;, &quot;rl&quot;]
              , e = [&quot;start&quot;, &quot;middle&quot;, &quot;end&quot;, &quot;left&quot;, &quot;right&quot;];
            function r(t, e) {
                if (&quot;string&quot; != typeof e)
                    return !1;
                if (!Array.isArray(t))
                    return !1;
                var r = e.toLowerCase();
                return !!~t.indexOf(r) &amp;&amp; r
            }
            function i(t) {
                return r(e, t)
            }
            function n(t) {
                for (var e = arguments.length, r = new Array(e &gt; 1 ? e - 1 : 0), i = 1; i &lt; e; i++)
                    r[i - 1] = arguments[i];
                for (var n = 1; n &lt; arguments.length; n++) {
                    var a = arguments[n];
                    for (var s in a)
                        t[s] = a[s]
                }
                return t
            }
            function a(e, a, s) {
                var o = this
                  , l = {
                    enumerable: !0
                };
                o.hasBeenReset = !1;
                var u = &quot;&quot;
                  , h = !1
                  , d = e
                  , c = a
                  , f = s
                  , g = null
                  , v = &quot;&quot;
                  , m = !0
                  , p = &quot;auto&quot;
                  , y = &quot;start&quot;
                  , E = 50
                  , T = &quot;middle&quot;
                  , S = 50
                  , L = &quot;middle&quot;;
                Object.defineProperty(o, &quot;id&quot;, n({}, l, {
                    get: function() {
                        return u
                    },
                    set: function(t) {
                        u = &quot;&quot; + t
                    }
                })),
                Object.defineProperty(o, &quot;pauseOnExit&quot;, n({}, l, {
                    get: function() {
                        return h
                    },
                    set: function(t) {
                        h = !!t
                    }
                })),
                Object.defineProperty(o, &quot;startTime&quot;, n({}, l, {
                    get: function() {
                        return d
                    },
                    set: function(t) {
                        if (&quot;number&quot; != typeof t)
                            throw new TypeError(&quot;Start time must be set to a number.&quot;);
                        d = t,
                        this.hasBeenReset = !0
                    }
                })),
                Object.defineProperty(o, &quot;endTime&quot;, n({}, l, {
                    get: function() {
                        return c
                    },
                    set: function(t) {
                        if (&quot;number&quot; != typeof t)
                            throw new TypeError(&quot;End time must be set to a number.&quot;);
                        c = t,
                        this.hasBeenReset = !0
                    }
                })),
                Object.defineProperty(o, &quot;text&quot;, n({}, l, {
                    get: function() {
                        return f
                    },
                    set: function(t) {
                        f = &quot;&quot; + t,
                        this.hasBeenReset = !0
                    }
                })),
                Object.defineProperty(o, &quot;region&quot;, n({}, l, {
                    get: function() {
                        return g
                    },
                    set: function(t) {
                        g = t,
                        this.hasBeenReset = !0
                    }
                })),
                Object.defineProperty(o, &quot;vertical&quot;, n({}, l, {
                    get: function() {
                        return v
                    },
                    set: function(e) {
                        var i = function(e) {
                            return r(t, e)
                        }(e);
                        if (!1 === i)
                            throw new SyntaxError(&quot;An invalid or illegal string was specified.&quot;);
                        v = i,
                        this.hasBeenReset = !0
                    }
                })),
                Object.defineProperty(o, &quot;snapToLines&quot;, n({}, l, {
                    get: function() {
                        return m
                    },
                    set: function(t) {
                        m = !!t,
                        this.hasBeenReset = !0
                    }
                })),
                Object.defineProperty(o, &quot;line&quot;, n({}, l, {
                    get: function() {
                        return p
                    },
                    set: function(t) {
                        if (&quot;number&quot; != typeof t &amp;&amp; &quot;auto&quot; !== t)
                            throw new SyntaxError(&quot;An invalid number or illegal string was specified.&quot;);
                        p = t,
                        this.hasBeenReset = !0
                    }
                })),
                Object.defineProperty(o, &quot;lineAlign&quot;, n({}, l, {
                    get: function() {
                        return y
                    },
                    set: function(t) {
                        var e = i(t);
                        if (!e)
                            throw new SyntaxError(&quot;An invalid or illegal string was specified.&quot;);
                        y = e,
                        this.hasBeenReset = !0
                    }
                })),
                Object.defineProperty(o, &quot;position&quot;, n({}, l, {
                    get: function() {
                        return E
                    },
                    set: function(t) {
                        if (t &lt; 0 || t &gt; 100)
                            throw new Error(&quot;Position must be between 0 and 100.&quot;);
                        E = t,
                        this.hasBeenReset = !0
                    }
                })),
                Object.defineProperty(o, &quot;positionAlign&quot;, n({}, l, {
                    get: function() {
                        return T
                    },
                    set: function(t) {
                        var e = i(t);
                        if (!e)
                            throw new SyntaxError(&quot;An invalid or illegal string was specified.&quot;);
                        T = e,
                        this.hasBeenReset = !0
                    }
                })),
                Object.defineProperty(o, &quot;size&quot;, n({}, l, {
                    get: function() {
                        return S
                    },
                    set: function(t) {
                        if (t &lt; 0 || t &gt; 100)
                            throw new Error(&quot;Size must be between 0 and 100.&quot;);
                        S = t,
                        this.hasBeenReset = !0
                    }
                })),
                Object.defineProperty(o, &quot;align&quot;, n({}, l, {
                    get: function() {
                        return L
                    },
                    set: function(t) {
                        var e = i(t);
                        if (!e)
                            throw new SyntaxError(&quot;An invalid or illegal string was specified.&quot;);
                        L = e,
                        this.hasBeenReset = !0
                    }
                })),
                o.displayState = void 0
            }
            return a.prototype.getCueAsHTML = function() {
                return self.WebVTT.convertCueToDOMTree(self, this.text)
            }
            ,
            a
        }()
          , Sa = function() {
            function t() {}
            return t.prototype.decode = function(t, e) {
                if (!t)
                    return &quot;&quot;;
                if (&quot;string&quot; != typeof t)
                    throw new Error(&quot;Error - expected string data.&quot;);
                return decodeURIComponent(encodeURIComponent(t))
            }
            ,
            t
        }();
        function La(t) {
            function e(t, e, r, i) {
                return 3600 * (0 | t) + 60 * (0 | e) + (0 | r) + parseFloat(i || 0)
            }
            var r = t.match(/^(?:(\d+):)?(\d{2}):(\d{2})(\.\d+)?/);
            return r ? parseFloat(r[2]) &gt; 59 ? e(r[2], r[3], 0, r[4]) : e(r[1], r[2], r[3], r[4]) : null
        }
        var Aa = function() {
            function t() {
                this.values = Object.create(null)
            }
            var e = t.prototype;
            return e.set = function(t, e) {
                this.get(t) || &quot;&quot; === e || (this.values[t] = e)
            }
            ,
            e.get = function(t, e, r) {
                return r ? this.has(t) ? this.values[t] : e[r] : this.has(t) ? this.values[t] : e
            }
            ,
            e.has = function(t) {
                return t in this.values
            }
            ,
            e.alt = function(t, e, r) {
                for (var i = 0; i &lt; r.length; ++i)
                    if (e === r[i]) {
                        this.set(t, e);
                        break
                    }
            }
            ,
            e.integer = function(t, e) {
                /^-?\d+$/.test(e) &amp;&amp; this.set(t, parseInt(e, 10))
            }
            ,
            e.percent = function(t, e) {
                if (/^([\d]{1,3})(\.[\d]*)?%$/.test(e)) {
                    var r = parseFloat(e);
                    if (r &gt;= 0 &amp;&amp; r &lt;= 100)
                        return this.set(t, r),
                        !0
                }
                return !1
            }
            ,
            t
        }();
        function Ra(t, e, r, i) {
            var n = i ? t.split(i) : [t];
            for (var a in n)
                if (&quot;string&quot; == typeof n[a]) {
                    var s = n[a].split(r);
                    2 === s.length &amp;&amp; e(s[0], s[1])
                }
        }
        var ka = new Ta(0,0,&quot;&quot;)
          , ba = &quot;middle&quot; === ka.align ? &quot;middle&quot; : &quot;center&quot;;
        function Da(t, e, r) {
            var i = t;
            function n() {
                var e = La(t);
                if (null === e)
                    throw new Error(&quot;Malformed timestamp: &quot; + i);
                return t = t.replace(/^[^\sa-zA-Z-]+/, &quot;&quot;),
                e
            }
            function a() {
                t = t.replace(/^\s+/, &quot;&quot;)
            }
            if (a(),
            e.startTime = n(),
            a(),
            &quot;--\x3e&quot; !== t.slice(0, 3))
                throw new Error(&quot;Malformed time stamp (time stamps must be separated by &#39;--\x3e&#39;): &quot; + i);
            t = t.slice(3),
            a(),
            e.endTime = n(),
            a(),
            function(t, e) {
                var i = new Aa;
                Ra(t, (function(t, e) {
                    var n;
                    switch (t) {
                    case &quot;region&quot;:
                        for (var a = r.length - 1; a &gt;= 0; a--)
                            if (r[a].id === e) {
                                i.set(t, r[a].region);
                                break
                            }
                        break;
                    case &quot;vertical&quot;:
                        i.alt(t, e, [&quot;rl&quot;, &quot;lr&quot;]);
                        break;
                    case &quot;line&quot;:
                        n = e.split(&quot;,&quot;),
                        i.integer(t, n[0]),
                        i.percent(t, n[0]) &amp;&amp; i.set(&quot;snapToLines&quot;, !1),
                        i.alt(t, n[0], [&quot;auto&quot;]),
                        2 === n.length &amp;&amp; i.alt(&quot;lineAlign&quot;, n[1], [&quot;start&quot;, ba, &quot;end&quot;]);
                        break;
                    case &quot;position&quot;:
                        n = e.split(&quot;,&quot;),
                        i.percent(t, n[0]),
                        2 === n.length &amp;&amp; i.alt(&quot;positionAlign&quot;, n[1], [&quot;start&quot;, ba, &quot;end&quot;, &quot;line-left&quot;, &quot;line-right&quot;, &quot;auto&quot;]);
                        break;
                    case &quot;size&quot;:
                        i.percent(t, e);
                        break;
                    case &quot;align&quot;:
                        i.alt(t, e, [&quot;start&quot;, ba, &quot;end&quot;, &quot;left&quot;, &quot;right&quot;])
                    }
                }
                ), /:/, /\s/),
                e.region = i.get(&quot;region&quot;, null),
                e.vertical = i.get(&quot;vertical&quot;, &quot;&quot;);
                var n = i.get(&quot;line&quot;, &quot;auto&quot;);
                &quot;auto&quot; === n &amp;&amp; -1 === ka.line &amp;&amp; (n = -1),
                e.line = n,
                e.lineAlign = i.get(&quot;lineAlign&quot;, &quot;start&quot;),
                e.snapToLines = i.get(&quot;snapToLines&quot;, !0),
                e.size = i.get(&quot;size&quot;, 100),
                e.align = i.get(&quot;align&quot;, ba);
                var a = i.get(&quot;position&quot;, &quot;auto&quot;);
                &quot;auto&quot; === a &amp;&amp; 50 === ka.position &amp;&amp; (a = &quot;start&quot; === e.align || &quot;left&quot; === e.align ? 0 : &quot;end&quot; === e.align || &quot;right&quot; === e.align ? 100 : 50),
                e.position = a
            }(t, e)
        }
        function Ia(t) {
            return t.replace(/&lt;br(?: \/)?&gt;/gi, &quot;\n&quot;)
        }
        var wa = function() {
            function t() {
                this.state = &quot;INITIAL&quot;,
                this.buffer = &quot;&quot;,
                this.decoder = new Sa,
                this.regionList = [],
                this.cue = null,
                this.oncue = void 0,
                this.onparsingerror = void 0,
                this.onflush = void 0
            }
            var e = t.prototype;
            return e.parse = function(t) {
                var e = this;
                function r() {
                    var t = e.buffer
                      , r = 0;
                    for (t = Ia(t); r &lt; t.length &amp;&amp; &quot;\r&quot; !== t[r] &amp;&amp; &quot;\n&quot; !== t[r]; )
                        ++r;
                    var i = t.slice(0, r);
                    return &quot;\r&quot; === t[r] &amp;&amp; ++r,
                    &quot;\n&quot; === t[r] &amp;&amp; ++r,
                    e.buffer = t.slice(r),
                    i
                }
                t &amp;&amp; (e.buffer += e.decoder.decode(t, {
                    stream: !0
                }));
                try {
                    var i = &quot;&quot;;
                    if (&quot;INITIAL&quot; === e.state) {
                        if (!/\r\n|\n/.test(e.buffer))
                            return this;
                        var n = (i = r()).match(/^(ï»¿)?WEBVTT([ \t].*)?$/);
                        if (null == n || !n[0])
                            throw new Error(&quot;Malformed WebVTT signature.&quot;);
                        e.state = &quot;HEADER&quot;
                    }
                    for (var a = !1; e.buffer; ) {
                        if (!/\r\n|\n/.test(e.buffer))
                            return this;
                        switch (a ? a = !1 : i = r(),
                        e.state) {
                        case &quot;HEADER&quot;:
                            /:/.test(i) ? Ra(i, (function(t, e) {}
                            ), /:/) : i || (e.state = &quot;ID&quot;);
                            continue;
                        case &quot;NOTE&quot;:
                            i || (e.state = &quot;ID&quot;);
                            continue;
                        case &quot;ID&quot;:
                            if (/^NOTE($|[ \t])/.test(i)) {
                                e.state = &quot;NOTE&quot;;
                                break
                            }
                            if (!i)
                                continue;
                            if (e.cue = new Ta(0,0,&quot;&quot;),
                            e.state = &quot;CUE&quot;,
                            -1 === i.indexOf(&quot;--\x3e&quot;)) {
                                e.cue.id = i;
                                continue
                            }
                        case &quot;CUE&quot;:
                            if (!e.cue) {
                                e.state = &quot;BADCUE&quot;;
                                continue
                            }
                            try {
                                Da(i, e.cue, e.regionList)
                            } catch (t) {
                                e.cue = null,
                                e.state = &quot;BADCUE&quot;;
                                continue
                            }
                            e.state = &quot;CUETEXT&quot;;
                            continue;
                        case &quot;CUETEXT&quot;:
                            var s = -1 !== i.indexOf(&quot;--\x3e&quot;);
                            if (!i || s &amp;&amp; (a = !0)) {
                                e.oncue &amp;&amp; e.cue &amp;&amp; e.oncue(e.cue),
                                e.cue = null,
                                e.state = &quot;ID&quot;;
                                continue
                            }
                            if (null === e.cue)
                                continue;
                            e.cue.text &amp;&amp; (e.cue.text += &quot;\n&quot;),
                            e.cue.text += i;
                            continue;
                        case &quot;BADCUE&quot;:
                            i || (e.state = &quot;ID&quot;)
                        }
                    }
                } catch (t) {
                    &quot;CUETEXT&quot; === e.state &amp;&amp; e.cue &amp;&amp; e.oncue &amp;&amp; e.oncue(e.cue),
                    e.cue = null,
                    e.state = &quot;INITIAL&quot; === e.state ? &quot;BADWEBVTT&quot; : &quot;BADCUE&quot;
                }
                return this
            }
            ,
            e.flush = function() {
                var t = this;
                try {
                    if ((t.cue || &quot;HEADER&quot; === t.state) &amp;&amp; (t.buffer += &quot;\n\n&quot;,
                    t.parse()),
                    &quot;INITIAL&quot; === t.state || &quot;BADWEBVTT&quot; === t.state)
                        throw new Error(&quot;Malformed WebVTT signature.&quot;)
                } catch (e) {
                    t.onparsingerror &amp;&amp; t.onparsingerror(e)
                }
                return t.onflush &amp;&amp; t.onflush(),
                this
            }
            ,
            t
        }()
          , Ca = /\r\n|\n\r|\n|\r/g
          , _a = function(t, e, r) {
            return void 0 === r &amp;&amp; (r = 0),
            t.slice(r, r + e.length) === e
        }
          , xa = function(t) {
            for (var e = 5381, r = t.length; r; )
                e = 33 * e ^ t.charCodeAt(--r);
            return (e &gt;&gt;&gt; 0).toString()
        };
        function Pa(t, e, r) {
            return xa(t.toString()) + xa(e.toString()) + xa(r)
        }
        function Fa(t, e, r, i, n, a, s) {
            var o, l, u, h = new wa, d = Tt(new Uint8Array(t)).trim().replace(Ca, &quot;\n&quot;).split(&quot;\n&quot;), c = [], f = e ? (o = e.baseTime,
            void 0 === (l = e.timescale) &amp;&amp; (l = 1),
            En(o, yn, 1 / l)) : 0, g = &quot;00:00.000&quot;, v = 0, m = 0, p = !0;
            h.oncue = function(t) {
                var a = r[i]
                  , s = r.ccOffset
                  , o = (v - f) / 9e4;
                if (null != a &amp;&amp; a.new &amp;&amp; (void 0 !== m ? s = r.ccOffset = a.start : function(t, e, r) {
                    var i = t[e]
                      , n = t[i.prevCC];
                    if (!n || !n.new &amp;&amp; i.new)
                        return t.ccOffset = t.presentationOffset = i.start,
                        void (i.new = !1);
                    for (; null != (a = n) &amp;&amp; a.new; ) {
                        var a;
                        t.ccOffset += i.start - n.start,
                        i.new = !1,
                        n = t[(i = n).prevCC]
                    }
                    t.presentationOffset = r
                }(r, i, o)),
                o) {
                    if (!e)
                        return void (u = new Error(&quot;Missing initPTS for VTT MPEGTS&quot;));
                    s = o - r.presentationOffset
                }
                var l = t.endTime - t.startTime
                  , h = Rn(9e4 * (t.startTime + s - m), 9e4 * n) / 9e4;
                t.startTime = Math.max(h, 0),
                t.endTime = Math.max(h + l, 0);
                var d = t.text.trim();
                t.text = decodeURIComponent(encodeURIComponent(d)),
                t.id || (t.id = Pa(t.startTime, t.endTime, d)),
                t.endTime &gt; 0 &amp;&amp; c.push(t)
            }
            ,
            h.onparsingerror = function(t) {
                u = t
            }
            ,
            h.onflush = function() {
                u ? s(u) : a(c)
            }
            ,
            d.forEach((function(t) {
                if (p) {
                    if (_a(t, &quot;X-TIMESTAMP-MAP=&quot;)) {
                        p = !1,
                        t.slice(16).split(&quot;,&quot;).forEach((function(t) {
                            _a(t, &quot;LOCAL:&quot;) ? g = t.slice(6) : _a(t, &quot;MPEGTS:&quot;) &amp;&amp; (v = parseInt(t.slice(7)))
                        }
                        ));
                        try {
                            m = function(t) {
                                var e = parseInt(t.slice(-3))
                                  , r = parseInt(t.slice(-6, -4))
                                  , i = parseInt(t.slice(-9, -7))
                                  , n = t.length &gt; 9 ? parseInt(t.substring(0, t.indexOf(&quot;:&quot;))) : 0;
                                if (!(y(e) &amp;&amp; y(r) &amp;&amp; y(i) &amp;&amp; y(n)))
                                    throw Error(&quot;Malformed X-TIMESTAMP-MAP: Local:&quot; + t);
                                return e += 1e3 * r,
                                (e += 6e4 * i) + 36e5 * n
                            }(g) / 1e3
                        } catch (t) {
                            u = t
                        }
                        return
                    }
                    &quot;&quot; === t &amp;&amp; (p = !1)
                }
                h.parse(t + &quot;\n&quot;)
            }
            )),
            h.flush()
        }
        var Ma = &quot;stpp.ttml.im1t&quot;
          , Oa = /^(\d{2,}):(\d{2}):(\d{2}):(\d{2})\.?(\d+)?$/
          , Na = /^(\d*(?:\.\d*)?)(h|m|s|ms|f|t)$/
          , Ua = {
            left: &quot;start&quot;,
            center: &quot;center&quot;,
            right: &quot;end&quot;,
            start: &quot;start&quot;,
            end: &quot;end&quot;
        };
        function Ba(t, e, r, i) {
            var n = xt(new Uint8Array(t), [&quot;mdat&quot;]);
            if (0 !== n.length) {
                var a, s, l, u, h = n.map((function(t) {
                    return Tt(t)
                }
                )), d = (a = e.baseTime,
                s = 1,
                void 0 === (l = e.timescale) &amp;&amp; (l = 1),
                void 0 === u &amp;&amp; (u = !1),
                En(a, s, 1 / l, u));
                try {
                    h.forEach((function(t) {
                        return r(function(t, e) {
                            var r = (new DOMParser).parseFromString(t, &quot;text/xml&quot;)
                              , i = r.getElementsByTagName(&quot;tt&quot;)[0];
                            if (!i)
                                throw new Error(&quot;Invalid ttml&quot;);
                            var n = {
                                frameRate: 30,
                                subFrameRate: 1,
                                frameRateMultiplier: 0,
                                tickRate: 0
                            }
                              , a = Object.keys(n).reduce((function(t, e) {
                                return t[e] = i.getAttribute(&quot;ttp:&quot; + e) || n[e],
                                t
                            }
                            ), {})
                              , s = &quot;preserve&quot; !== i.getAttribute(&quot;xml:space&quot;)
                              , l = Ka(Ga(i, &quot;styling&quot;, &quot;style&quot;))
                              , u = Ka(Ga(i, &quot;layout&quot;, &quot;region&quot;))
                              , h = Ga(i, &quot;body&quot;, &quot;[begin]&quot;);
                            return [].map.call(h, (function(t) {
                                var r = Ha(t, s);
                                if (!r || !t.hasAttribute(&quot;begin&quot;))
                                    return null;
                                var i = Wa(t.getAttribute(&quot;begin&quot;), a)
                                  , n = Wa(t.getAttribute(&quot;dur&quot;), a)
                                  , h = Wa(t.getAttribute(&quot;end&quot;), a);
                                if (null === i)
                                    throw Ya(t);
                                if (null === h) {
                                    if (null === n)
                                        throw Ya(t);
                                    h = i + n
                                }
                                var d = new Ta(i - e,h - e,r);
                                d.id = Pa(d.startTime, d.endTime, d.text);
                                var c = function(t, e, r) {
                                    var i = &quot;http://www.w3.org/ns/ttml#styling&quot;
                                      , n = null
                                      , a = [&quot;displayAlign&quot;, &quot;textAlign&quot;, &quot;color&quot;, &quot;backgroundColor&quot;, &quot;fontSize&quot;, &quot;fontFamily&quot;]
                                      , s = null != t &amp;&amp; t.hasAttribute(&quot;style&quot;) ? t.getAttribute(&quot;style&quot;) : null;
                                    return s &amp;&amp; r.hasOwnProperty(s) &amp;&amp; (n = r[s]),
                                    a.reduce((function(r, a) {
                                        var s = Va(e, i, a) || Va(t, i, a) || Va(n, i, a);
                                        return s &amp;&amp; (r[a] = s),
                                        r
                                    }
                                    ), {})
                                }(u[t.getAttribute(&quot;region&quot;)], l[t.getAttribute(&quot;style&quot;)], l)
                                  , f = c.textAlign;
                                if (f) {
                                    var g = Ua[f];
                                    g &amp;&amp; (d.lineAlign = g),
                                    d.align = f
                                }
                                return o(d, c),
                                d
                            }
                            )).filter((function(t) {
                                return null !== t
                            }
                            ))
                        }(t, d))
                    }
                    ))
                } catch (t) {
                    i(t)
                }
            } else
                i(new Error(&quot;Could not parse IMSC1 mdat&quot;))
        }
        function Ga(t, e, r) {
            var i = t.getElementsByTagName(e)[0];
            return i ? [].slice.call(i.querySelectorAll(r)) : []
        }
        function Ka(t) {
            return t.reduce((function(t, e) {
                var r = e.getAttribute(&quot;xml:id&quot;);
                return r &amp;&amp; (t[r] = e),
                t
            }
            ), {})
        }
        function Ha(t, e) {
            return [].slice.call(t.childNodes).reduce((function(t, r, i) {
                var n;
                return &quot;br&quot; === r.nodeName &amp;&amp; i ? t + &quot;\n&quot; : null != (n = r.childNodes) &amp;&amp; n.length ? Ha(r, e) : e ? t + r.textContent.trim().replace(/\s+/g, &quot; &quot;) : t + r.textContent
            }
            ), &quot;&quot;)
        }
        function Va(t, e, r) {
            return t &amp;&amp; t.hasAttributeNS(e, r) ? t.getAttributeNS(e, r) : null
        }
        function Ya(t) {
            return new Error(&quot;Could not parse ttml timestamp &quot; + t)
        }
        function Wa(t, e) {
            if (!t)
                return null;
            var r = La(t);
            return null === r &amp;&amp; (Oa.test(t) ? r = function(t, e) {
                var r = Oa.exec(t)
                  , i = (0 | r[4]) + (0 | r[5]) / e.subFrameRate;
                return 3600 * (0 | r[1]) + 60 * (0 | r[2]) + (0 | r[3]) + i / e.frameRate
            }(t, e) : Na.test(t) &amp;&amp; (r = function(t, e) {
                var r = Na.exec(t)
                  , i = Number(r[1]);
                switch (r[2]) {
                case &quot;h&quot;:
                    return 3600 * i;
                case &quot;m&quot;:
                    return 60 * i;
                case &quot;ms&quot;:
                    return 1e3 * i;
                case &quot;f&quot;:
                    return i / e.frameRate;
                case &quot;t&quot;:
                    return i / e.tickRate
                }
                return i
            }(t, e))),
            r
        }
        var ja = function() {
            function t(t) {
                this.hls = void 0,
                this.media = null,
                this.config = void 0,
                this.enabled = !0,
                this.Cues = void 0,
                this.textTracks = [],
                this.tracks = [],
                this.initPTS = [],
                this.unparsedVttFrags = [],
                this.captionsTracks = {},
                this.nonNativeCaptionsTracks = {},
                this.cea608Parser1 = void 0,
                this.cea608Parser2 = void 0,
                this.lastCc = -1,
                this.lastSn = -1,
                this.lastPartIndex = -1,
                this.prevCC = -1,
                this.vttCCs = {
                    ccOffset: 0,
                    presentationOffset: 0,
                    0: {
                        start: 0,
                        prevCC: -1,
                        new: !0
                    }
                },
                this.captionsProperties = void 0,
                this.hls = t,
                this.config = t.config,
                this.Cues = t.config.cueHandler,
                this.captionsProperties = {
                    textTrack1: {
                        label: this.config.captionsTextTrack1Label,
                        languageCode: this.config.captionsTextTrack1LanguageCode
                    },
                    textTrack2: {
                        label: this.config.captionsTextTrack2Label,
                        languageCode: this.config.captionsTextTrack2LanguageCode
                    },
                    textTrack3: {
                        label: this.config.captionsTextTrack3Label,
                        languageCode: this.config.captionsTextTrack3LanguageCode
                    },
                    textTrack4: {
                        label: this.config.captionsTextTrack4Label,
                        languageCode: this.config.captionsTextTrack4LanguageCode
                    }
                },
                t.on(S.MEDIA_ATTACHING, this.onMediaAttaching, this),
                t.on(S.MEDIA_DETACHING, this.onMediaDetaching, this),
                t.on(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.on(S.MANIFEST_LOADED, this.onManifestLoaded, this),
                t.on(S.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this),
                t.on(S.FRAG_LOADING, this.onFragLoading, this),
                t.on(S.FRAG_LOADED, this.onFragLoaded, this),
                t.on(S.FRAG_PARSING_USERDATA, this.onFragParsingUserdata, this),
                t.on(S.FRAG_DECRYPTED, this.onFragDecrypted, this),
                t.on(S.INIT_PTS_FOUND, this.onInitPtsFound, this),
                t.on(S.SUBTITLE_TRACKS_CLEARED, this.onSubtitleTracksCleared, this),
                t.on(S.BUFFER_FLUSHING, this.onBufferFlushing, this)
            }
            var e = t.prototype;
            return e.destroy = function() {
                var t = this.hls;
                t.off(S.MEDIA_ATTACHING, this.onMediaAttaching, this),
                t.off(S.MEDIA_DETACHING, this.onMediaDetaching, this),
                t.off(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.off(S.MANIFEST_LOADED, this.onManifestLoaded, this),
                t.off(S.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this),
                t.off(S.FRAG_LOADING, this.onFragLoading, this),
                t.off(S.FRAG_LOADED, this.onFragLoaded, this),
                t.off(S.FRAG_PARSING_USERDATA, this.onFragParsingUserdata, this),
                t.off(S.FRAG_DECRYPTED, this.onFragDecrypted, this),
                t.off(S.INIT_PTS_FOUND, this.onInitPtsFound, this),
                t.off(S.SUBTITLE_TRACKS_CLEARED, this.onSubtitleTracksCleared, this),
                t.off(S.BUFFER_FLUSHING, this.onBufferFlushing, this),
                this.hls = this.config = null,
                this.cea608Parser1 = this.cea608Parser2 = void 0
            }
            ,
            e.initCea608Parsers = function() {
                if (this.config.enableCEA708Captions &amp;&amp; (!this.cea608Parser1 || !this.cea608Parser2)) {
                    var t = new Ea(this,&quot;textTrack1&quot;)
                      , e = new Ea(this,&quot;textTrack2&quot;)
                      , r = new Ea(this,&quot;textTrack3&quot;)
                      , i = new Ea(this,&quot;textTrack4&quot;);
                    this.cea608Parser1 = new pa(1,t,e),
                    this.cea608Parser2 = new pa(3,r,i)
                }
            }
            ,
            e.addCues = function(t, e, r, i, n) {
                for (var a, s, o, l, u = !1, h = n.length; h--; ) {
                    var d = n[h]
                      , c = (a = d[0],
                    s = d[1],
                    o = e,
                    l = r,
                    Math.min(s, l) - Math.max(a, o));
                    if (c &gt;= 0 &amp;&amp; (d[0] = Math.min(d[0], e),
                    d[1] = Math.max(d[1], r),
                    u = !0,
                    c / (r - e) &gt; .5))
                        return
                }
                if (u || n.push([e, r]),
                this.config.renderTextTracksNatively) {
                    var f = this.captionsTracks[t];
                    this.Cues.newCue(f, e, r, i)
                } else {
                    var g = this.Cues.newCue(null, e, r, i);
                    this.hls.trigger(S.CUES_PARSED, {
                        type: &quot;captions&quot;,
                        cues: g,
                        track: t
                    })
                }
            }
            ,
            e.onInitPtsFound = function(t, e) {
                var r = this
                  , i = e.frag
                  , n = e.id
                  , a = e.initPTS
                  , s = e.timescale
                  , o = this.unparsedVttFrags;
                &quot;main&quot; === n &amp;&amp; (this.initPTS[i.cc] = {
                    baseTime: a,
                    timescale: s
                }),
                o.length &amp;&amp; (this.unparsedVttFrags = [],
                o.forEach((function(t) {
                    r.onFragLoaded(S.FRAG_LOADED, t)
                }
                )))
            }
            ,
            e.getExistingTrack = function(t, e) {
                var r = this.media;
                if (r)
                    for (var i = 0; i &lt; r.textTracks.length; i++) {
                        var n = r.textTracks[i];
                        if (Xa(n, {
                            name: t,
                            lang: e,
                            attrs: {}
                        }))
                            return n
                    }
                return null
            }
            ,
            e.createCaptionsTrack = function(t) {
                this.config.renderTextTracksNatively ? this.createNativeTrack(t) : this.createNonNativeTrack(t)
            }
            ,
            e.createNativeTrack = function(t) {
                if (!this.captionsTracks[t]) {
                    var e = this.captionsProperties
                      , r = this.captionsTracks
                      , i = this.media
                      , n = e[t]
                      , a = n.label
                      , s = n.languageCode
                      , o = this.getExistingTrack(a, s);
                    if (o)
                        r[t] = o,
                        Ne(r[t]),
                        Me(r[t], i);
                    else {
                        var l = this.createTextTrack(&quot;captions&quot;, a, s);
                        l &amp;&amp; (l[t] = !0,
                        r[t] = l)
                    }
                }
            }
            ,
            e.createNonNativeTrack = function(t) {
                if (!this.nonNativeCaptionsTracks[t]) {
                    var e = this.captionsProperties[t];
                    if (e) {
                        var r = {
                            _id: t,
                            label: e.label,
                            kind: &quot;captions&quot;,
                            default: !!e.media &amp;&amp; !!e.media.default,
                            closedCaptions: e.media
                        };
                        this.nonNativeCaptionsTracks[t] = r,
                        this.hls.trigger(S.NON_NATIVE_TEXT_TRACKS_FOUND, {
                            tracks: [r]
                        })
                    }
                }
            }
            ,
            e.createTextTrack = function(t, e, r) {
                var i = this.media;
                if (i)
                    return i.addTextTrack(t, e, r)
            }
            ,
            e.onMediaAttaching = function(t, e) {
                this.media = e.media,
                this._cleanTracks()
            }
            ,
            e.onMediaDetaching = function() {
                var t = this.captionsTracks;
                Object.keys(t).forEach((function(e) {
                    Ne(t[e]),
                    delete t[e]
                }
                )),
                this.nonNativeCaptionsTracks = {}
            }
            ,
            e.onManifestLoading = function() {
                this.lastCc = -1,
                this.lastSn = -1,
                this.lastPartIndex = -1,
                this.prevCC = -1,
                this.vttCCs = {
                    ccOffset: 0,
                    presentationOffset: 0,
                    0: {
                        start: 0,
                        prevCC: -1,
                        new: !0
                    }
                },
                this._cleanTracks(),
                this.tracks = [],
                this.captionsTracks = {},
                this.nonNativeCaptionsTracks = {},
                this.textTracks = [],
                this.unparsedVttFrags = [],
                this.initPTS = [],
                this.cea608Parser1 &amp;&amp; this.cea608Parser2 &amp;&amp; (this.cea608Parser1.reset(),
                this.cea608Parser2.reset())
            }
            ,
            e._cleanTracks = function() {
                var t = this.media;
                if (t) {
                    var e = t.textTracks;
                    if (e)
                        for (var r = 0; r &lt; e.length; r++)
                            Ne(e[r])
                }
            }
            ,
            e.onSubtitleTracksUpdated = function(t, e) {
                var r = this
                  , i = e.subtitleTracks || []
                  , n = i.some((function(t) {
                    return t.textCodec === Ma
                }
                ));
                if (this.config.enableWebVTT || n &amp;&amp; this.config.enableIMSC1) {
                    if (Vn(this.tracks, i))
                        return void (this.tracks = i);
                    if (this.textTracks = [],
                    this.tracks = i,
                    this.config.renderTextTracksNatively) {
                        var a = this.media
                          , s = a ? Be(a.textTracks) : null;
                        if (this.tracks.forEach((function(t, e) {
                            var i;
                            if (s) {
                                for (var n = null, a = 0; a &lt; s.length; a++)
                                    if (s[a] &amp;&amp; Xa(s[a], t)) {
                                        n = s[a],
                                        s[a] = null;
                                        break
                                    }
                                n &amp;&amp; (i = n)
                            }
                            if (i)
                                Ne(i);
                            else {
                                var o = qa(t);
                                (i = r.createTextTrack(o, t.name, t.lang)) &amp;&amp; (i.mode = &quot;disabled&quot;)
                            }
                            i &amp;&amp; r.textTracks.push(i)
                        }
                        )),
                        null != s &amp;&amp; s.length) {
                            var o = s.filter((function(t) {
                                return null !== t
                            }
                            )).map((function(t) {
                                return t.label
                            }
                            ));
                            o.length &amp;&amp; w.warn(&quot;Media element contains unused subtitle tracks: &quot; + o.join(&quot;, &quot;) + &quot;. Replace media element for each source to clear TextTracks and captions menu.&quot;)
                        }
                    } else if (this.tracks.length) {
                        var l = this.tracks.map((function(t) {
                            return {
                                label: t.name,
                                kind: t.type.toLowerCase(),
                                default: t.default,
                                subtitleTrack: t
                            }
                        }
                        ));
                        this.hls.trigger(S.NON_NATIVE_TEXT_TRACKS_FOUND, {
                            tracks: l
                        })
                    }
                }
            }
            ,
            e.onManifestLoaded = function(t, e) {
                var r = this;
                this.config.enableCEA708Captions &amp;&amp; e.captions &amp;&amp; e.captions.forEach((function(t) {
                    var e = /(?:CC|SERVICE)([1-4])/.exec(t.instreamId);
                    if (e) {
                        var i = &quot;textTrack&quot; + e[1]
                          , n = r.captionsProperties[i];
                        n &amp;&amp; (n.label = t.name,
                        t.lang &amp;&amp; (n.languageCode = t.lang),
                        n.media = t)
                    }
                }
                ))
            }
            ,
            e.closedCaptionsForLevel = function(t) {
                var e = this.hls.levels[t.level];
                return null == e ? void 0 : e.attrs[&quot;CLOSED-CAPTIONS&quot;]
            }
            ,
            e.onFragLoading = function(t, e) {
                if (this.enabled &amp;&amp; e.frag.type === we) {
                    var r, i, n = this.cea608Parser1, a = this.cea608Parser2, s = this.lastSn, o = e.frag, l = o.cc, u = o.sn, h = null != (r = null == (i = e.part) ? void 0 : i.index) ? r : -1;
                    n &amp;&amp; a &amp;&amp; (u !== s + 1 || u === s &amp;&amp; h !== this.lastPartIndex + 1 || l !== this.lastCc) &amp;&amp; (n.reset(),
                    a.reset()),
                    this.lastCc = l,
                    this.lastSn = u,
                    this.lastPartIndex = h
                }
            }
            ,
            e.onFragLoaded = function(t, e) {
                var r = e.frag
                  , i = e.payload;
                if (r.type === _e)
                    if (i.byteLength) {
                        var n = r.decryptdata
                          , a = &quot;stats&quot;in e;
                        if (null == n || !n.encrypted || a) {
                            var s = this.tracks[r.level]
                              , o = this.vttCCs;
                            o[r.cc] || (o[r.cc] = {
                                start: r.start,
                                prevCC: this.prevCC,
                                new: !0
                            },
                            this.prevCC = r.cc),
                            s &amp;&amp; s.textCodec === Ma ? this._parseIMSC1(r, i) : this._parseVTTs(e)
                        }
                    } else
                        this.hls.trigger(S.SUBTITLE_FRAG_PROCESSED, {
                            success: !1,
                            frag: r,
                            error: new Error(&quot;Empty subtitle payload&quot;)
                        })
            }
            ,
            e._parseIMSC1 = function(t, e) {
                var r = this
                  , i = this.hls;
                Ba(e, this.initPTS[t.cc], (function(e) {
                    r._appendCues(e, t.level),
                    i.trigger(S.SUBTITLE_FRAG_PROCESSED, {
                        success: !0,
                        frag: t
                    })
                }
                ), (function(e) {
                    w.log(&quot;Failed to parse IMSC1: &quot; + e),
                    i.trigger(S.SUBTITLE_FRAG_PROCESSED, {
                        success: !1,
                        frag: t,
                        error: e
                    })
                }
                ))
            }
            ,
            e._parseVTTs = function(t) {
                var e, r = this, i = t.frag, n = t.payload, a = this.initPTS, s = this.unparsedVttFrags, o = a.length - 1;
                if (a[i.cc] || -1 !== o) {
                    var l = this.hls;
                    Fa(null != (e = i.initSegment) &amp;&amp; e.data ? Kt(i.initSegment.data, new Uint8Array(n)) : n, this.initPTS[i.cc], this.vttCCs, i.cc, i.start, (function(t) {
                        r._appendCues(t, i.level),
                        l.trigger(S.SUBTITLE_FRAG_PROCESSED, {
                            success: !0,
                            frag: i
                        })
                    }
                    ), (function(e) {
                        var a = &quot;Missing initPTS for VTT MPEGTS&quot; === e.message;
                        a ? s.push(t) : r._fallbackToIMSC1(i, n),
                        w.log(&quot;Failed to parse VTT cue: &quot; + e),
                        a &amp;&amp; o &gt; i.cc || l.trigger(S.SUBTITLE_FRAG_PROCESSED, {
                            success: !1,
                            frag: i,
                            error: e
                        })
                    }
                    ))
                } else
                    s.push(t)
            }
            ,
            e._fallbackToIMSC1 = function(t, e) {
                var r = this
                  , i = this.tracks[t.level];
                i.textCodec || Ba(e, this.initPTS[t.cc], (function() {
                    i.textCodec = Ma,
                    r._parseIMSC1(t, e)
                }
                ), (function() {
                    i.textCodec = &quot;wvtt&quot;
                }
                ))
            }
            ,
            e._appendCues = function(t, e) {
                var r = this.hls;
                if (this.config.renderTextTracksNatively) {
                    var i = this.textTracks[e];
                    if (!i || &quot;disabled&quot; === i.mode)
                        return;
                    t.forEach((function(t) {
                        return Oe(i, t)
                    }
                    ))
                } else {
                    var n = this.tracks[e];
                    if (!n)
                        return;
                    var a = n.default ? &quot;default&quot; : &quot;subtitles&quot; + e;
                    r.trigger(S.CUES_PARSED, {
                        type: &quot;subtitles&quot;,
                        cues: t,
                        track: a
                    })
                }
            }
            ,
            e.onFragDecrypted = function(t, e) {
                e.frag.type === _e &amp;&amp; this.onFragLoaded(S.FRAG_LOADED, e)
            }
            ,
            e.onSubtitleTracksCleared = function() {
                this.tracks = [],
                this.captionsTracks = {}
            }
            ,
            e.onFragParsingUserdata = function(t, e) {
                this.initCea608Parsers();
                var r = this.cea608Parser1
                  , i = this.cea608Parser2;
                if (this.enabled &amp;&amp; r &amp;&amp; i) {
                    var n = e.frag
                      , a = e.samples;
                    if (n.type !== we || &quot;NONE&quot; !== this.closedCaptionsForLevel(n))
                        for (var s = 0; s &lt; a.length; s++) {
                            var o = a[s].bytes;
                            if (o) {
                                var l = this.extractCea608Data(o);
                                r.addData(a[s].pts, l[0]),
                                i.addData(a[s].pts, l[1])
                            }
                        }
                }
            }
            ,
            e.onBufferFlushing = function(t, e) {
                var r = e.startOffset
                  , i = e.endOffset
                  , n = e.endOffsetSubtitles
                  , a = e.type
                  , s = this.media;
                if (s &amp;&amp; !(s.currentTime &lt; i)) {
                    if (!a || &quot;video&quot; === a) {
                        var o = this.captionsTracks;
                        Object.keys(o).forEach((function(t) {
                            return Ue(o[t], r, i)
                        }
                        ))
                    }
                    if (this.config.renderTextTracksNatively &amp;&amp; 0 === r &amp;&amp; void 0 !== n) {
                        var l = this.textTracks;
                        Object.keys(l).forEach((function(t) {
                            return Ue(l[t], r, n)
                        }
                        ))
                    }
                }
            }
            ,
            e.extractCea608Data = function(t) {
                for (var e = [[], []], r = 31 &amp; t[0], i = 2, n = 0; n &lt; r; n++) {
                    var a = t[i++]
                      , s = 127 &amp; t[i++]
                      , o = 127 &amp; t[i++];
                    if ((0 !== s || 0 !== o) &amp;&amp; 0 != (4 &amp; a)) {
                        var l = 3 &amp; a;
                        0 !== l &amp;&amp; 1 !== l || (e[l].push(s),
                        e[l].push(o))
                    }
                }
                return e
            }
            ,
            t
        }();
        function qa(t) {
            return t.characteristics &amp;&amp; /transcribes-spoken-dialog/gi.test(t.characteristics) &amp;&amp; /describes-music-and-sound/gi.test(t.characteristics) ? &quot;captions&quot; : &quot;subtitles&quot;
        }
        function Xa(t, e) {
            return !!t &amp;&amp; t.kind === qa(e) &amp;&amp; Wn(e, t)
        }
        var za = function() {
            function t(t) {
                this.hls = void 0,
                this.autoLevelCapping = void 0,
                this.firstLevel = void 0,
                this.media = void 0,
                this.restrictedLevels = void 0,
                this.timer = void 0,
                this.clientRect = void 0,
                this.streamController = void 0,
                this.hls = t,
                this.autoLevelCapping = Number.POSITIVE_INFINITY,
                this.firstLevel = -1,
                this.media = null,
                this.restrictedLevels = [],
                this.timer = void 0,
                this.clientRect = null,
                this.registerListeners()
            }
            var e = t.prototype;
            return e.setStreamController = function(t) {
                this.streamController = t
            }
            ,
            e.destroy = function() {
                this.hls &amp;&amp; this.unregisterListener(),
                this.timer &amp;&amp; this.stopCapping(),
                this.media = null,
                this.clientRect = null,
                this.hls = this.streamController = null
            }
            ,
            e.registerListeners = function() {
                var t = this.hls;
                t.on(S.FPS_DROP_LEVEL_CAPPING, this.onFpsDropLevelCapping, this),
                t.on(S.MEDIA_ATTACHING, this.onMediaAttaching, this),
                t.on(S.MANIFEST_PARSED, this.onManifestParsed, this),
                t.on(S.LEVELS_UPDATED, this.onLevelsUpdated, this),
                t.on(S.BUFFER_CODECS, this.onBufferCodecs, this),
                t.on(S.MEDIA_DETACHING, this.onMediaDetaching, this)
            }
            ,
            e.unregisterListener = function() {
                var t = this.hls;
                t.off(S.FPS_DROP_LEVEL_CAPPING, this.onFpsDropLevelCapping, this),
                t.off(S.MEDIA_ATTACHING, this.onMediaAttaching, this),
                t.off(S.MANIFEST_PARSED, this.onManifestParsed, this),
                t.off(S.LEVELS_UPDATED, this.onLevelsUpdated, this),
                t.off(S.BUFFER_CODECS, this.onBufferCodecs, this),
                t.off(S.MEDIA_DETACHING, this.onMediaDetaching, this)
            }
            ,
            e.onFpsDropLevelCapping = function(t, e) {
                var r = this.hls.levels[e.droppedLevel];
                this.isLevelAllowed(r) &amp;&amp; this.restrictedLevels.push({
                    bitrate: r.bitrate,
                    height: r.height,
                    width: r.width
                })
            }
            ,
            e.onMediaAttaching = function(t, e) {
                this.media = e.media instanceof HTMLVideoElement ? e.media : null,
                this.clientRect = null,
                this.timer &amp;&amp; this.hls.levels.length &amp;&amp; this.detectPlayerSize()
            }
            ,
            e.onManifestParsed = function(t, e) {
                var r = this.hls;
                this.restrictedLevels = [],
                this.firstLevel = e.firstLevel,
                r.config.capLevelToPlayerSize &amp;&amp; e.video &amp;&amp; this.startCapping()
            }
            ,
            e.onLevelsUpdated = function(t, e) {
                this.timer &amp;&amp; y(this.autoLevelCapping) &amp;&amp; this.detectPlayerSize()
            }
            ,
            e.onBufferCodecs = function(t, e) {
                this.hls.config.capLevelToPlayerSize &amp;&amp; e.video &amp;&amp; this.startCapping()
            }
            ,
            e.onMediaDetaching = function() {
                this.stopCapping()
            }
            ,
            e.detectPlayerSize = function() {
                if (this.media) {
                    if (this.mediaHeight &lt;= 0 || this.mediaWidth &lt;= 0)
                        return void (this.clientRect = null);
                    var t = this.hls.levels;
                    if (t.length) {
                        var e = this.hls
                          , r = this.getMaxLevel(t.length - 1);
                        r !== this.autoLevelCapping &amp;&amp; w.log(&quot;Setting autoLevelCapping to &quot; + r + &quot;: &quot; + t[r].height + &quot;p@&quot; + t[r].bitrate + &quot; for media &quot; + this.mediaWidth + &quot;x&quot; + this.mediaHeight),
                        e.autoLevelCapping = r,
                        e.autoLevelCapping &gt; this.autoLevelCapping &amp;&amp; this.streamController &amp;&amp; this.streamController.nextLevelSwitch(),
                        this.autoLevelCapping = e.autoLevelCapping
                    }
                }
            }
            ,
            e.getMaxLevel = function(e) {
                var r = this
                  , i = this.hls.levels;
                if (!i.length)
                    return -1;
                var n = i.filter((function(t, i) {
                    return r.isLevelAllowed(t) &amp;&amp; i &lt;= e
                }
                ));
                return this.clientRect = null,
                t.getMaxLevelByMediaSize(n, this.mediaWidth, this.mediaHeight)
            }
            ,
            e.startCapping = function() {
                this.timer || (this.autoLevelCapping = Number.POSITIVE_INFINITY,
                self.clearInterval(this.timer),
                this.timer = self.setInterval(this.detectPlayerSize.bind(this), 1e3),
                this.detectPlayerSize())
            }
            ,
            e.stopCapping = function() {
                this.restrictedLevels = [],
                this.firstLevel = -1,
                this.autoLevelCapping = Number.POSITIVE_INFINITY,
                this.timer &amp;&amp; (self.clearInterval(this.timer),
                this.timer = void 0)
            }
            ,
            e.getDimensions = function() {
                if (this.clientRect)
                    return this.clientRect;
                var t = this.media
                  , e = {
                    width: 0,
                    height: 0
                };
                if (t) {
                    var r = t.getBoundingClientRect();
                    e.width = r.width,
                    e.height = r.height,
                    e.width || e.height || (e.width = r.right - r.left || t.width || 0,
                    e.height = r.bottom - r.top || t.height || 0)
                }
                return this.clientRect = e,
                e
            }
            ,
            e.isLevelAllowed = function(t) {
                return !this.restrictedLevels.some((function(e) {
                    return t.bitrate === e.bitrate &amp;&amp; t.width === e.width &amp;&amp; t.height === e.height
                }
                ))
            }
            ,
            t.getMaxLevelByMediaSize = function(t, e, r) {
                if (null == t || !t.length)
                    return -1;
                for (var i, n, a = t.length - 1, s = Math.max(e, r), o = 0; o &lt; t.length; o += 1) {
                    var l = t[o];
                    if ((l.width &gt;= s || l.height &gt;= s) &amp;&amp; (i = l,
                    !(n = t[o + 1]) || i.width !== n.width || i.height !== n.height)) {
                        a = o;
                        break
                    }
                }
                return a
            }
            ,
            s(t, [{
                key: &quot;mediaWidth&quot;,
                get: function() {
                    return this.getDimensions().width * this.contentScaleFactor
                }
            }, {
                key: &quot;mediaHeight&quot;,
                get: function() {
                    return this.getDimensions().height * this.contentScaleFactor
                }
            }, {
                key: &quot;contentScaleFactor&quot;,
                get: function() {
                    var t = 1;
                    if (!this.hls.config.ignoreDevicePixelRatio)
                        try {
                            t = self.devicePixelRatio
                        } catch (t) {}
                    return t
                }
            }]),
            t
        }()
          , Qa = function() {
            function t(t) {
                this.hls = void 0,
                this.isVideoPlaybackQualityAvailable = !1,
                this.timer = void 0,
                this.media = null,
                this.lastTime = void 0,
                this.lastDroppedFrames = 0,
                this.lastDecodedFrames = 0,
                this.streamController = void 0,
                this.hls = t,
                this.registerListeners()
            }
            var e = t.prototype;
            return e.setStreamController = function(t) {
                this.streamController = t
            }
            ,
            e.registerListeners = function() {
                this.hls.on(S.MEDIA_ATTACHING, this.onMediaAttaching, this)
            }
            ,
            e.unregisterListeners = function() {
                this.hls.off(S.MEDIA_ATTACHING, this.onMediaAttaching, this)
            }
            ,
            e.destroy = function() {
                this.timer &amp;&amp; clearInterval(this.timer),
                this.unregisterListeners(),
                this.isVideoPlaybackQualityAvailable = !1,
                this.media = null
            }
            ,
            e.onMediaAttaching = function(t, e) {
                var r = this.hls.config;
                if (r.capLevelOnFPSDrop) {
                    var i = e.media instanceof self.HTMLVideoElement ? e.media : null;
                    this.media = i,
                    i &amp;&amp; &quot;function&quot; == typeof i.getVideoPlaybackQuality &amp;&amp; (this.isVideoPlaybackQualityAvailable = !0),
                    self.clearInterval(this.timer),
                    this.timer = self.setInterval(this.checkFPSInterval.bind(this), r.fpsDroppedMonitoringPeriod)
                }
            }
            ,
            e.checkFPS = function(t, e, r) {
                var i = performance.now();
                if (e) {
                    if (this.lastTime) {
                        var n = i - this.lastTime
                          , a = r - this.lastDroppedFrames
                          , s = e - this.lastDecodedFrames
                          , o = 1e3 * a / n
                          , l = this.hls;
                        if (l.trigger(S.FPS_DROP, {
                            currentDropped: a,
                            currentDecoded: s,
                            totalDroppedFrames: r
                        }),
                        o &gt; 0 &amp;&amp; a &gt; l.config.fpsDroppedMonitoringThreshold * s) {
                            var u = l.currentLevel;
                            w.warn(&quot;drop FPS ratio greater than max allowed value for currentLevel: &quot; + u),
                            u &gt; 0 &amp;&amp; (-1 === l.autoLevelCapping || l.autoLevelCapping &gt;= u) &amp;&amp; (u -= 1,
                            l.trigger(S.FPS_DROP_LEVEL_CAPPING, {
                                level: u,
                                droppedLevel: l.currentLevel
                            }),
                            l.autoLevelCapping = u,
                            this.streamController.nextLevelSwitch())
                        }
                    }
                    this.lastTime = i,
                    this.lastDroppedFrames = r,
                    this.lastDecodedFrames = e
                }
            }
            ,
            e.checkFPSInterval = function() {
                var t = this.media;
                if (t)
                    if (this.isVideoPlaybackQualityAvailable) {
                        var e = t.getVideoPlaybackQuality();
                        this.checkFPS(t, e.totalVideoFrames, e.droppedVideoFrames)
                    } else
                        this.checkFPS(t, t.webkitDecodedFrameCount, t.webkitDroppedFrameCount)
            }
            ,
            t
        }()
          , Ja = &quot;[eme]&quot;
          , $a = function() {
            function t(e) {
                this.hls = void 0,
                this.config = void 0,
                this.media = null,
                this.keyFormatPromise = null,
                this.keySystemAccessPromises = {},
                this._requestLicenseFailureCount = 0,
                this.mediaKeySessions = [],
                this.keyIdToKeySessionPromise = {},
                this.setMediaKeysQueue = t.CDMCleanupPromise ? [t.CDMCleanupPromise] : [],
                this.onMediaEncrypted = this._onMediaEncrypted.bind(this),
                this.onWaitingForKey = this._onWaitingForKey.bind(this),
                this.debug = w.debug.bind(w, Ja),
                this.log = w.log.bind(w, Ja),
                this.warn = w.warn.bind(w, Ja),
                this.error = w.error.bind(w, Ja),
                this.hls = e,
                this.config = e.config,
                this.registerListeners()
            }
            var e = t.prototype;
            return e.destroy = function() {
                this.unregisterListeners(),
                this.onMediaDetached();
                var t = this.config;
                t.requestMediaKeySystemAccessFunc = null,
                t.licenseXhrSetup = t.licenseResponseCallback = void 0,
                t.drmSystems = t.drmSystemOptions = {},
                this.hls = this.onMediaEncrypted = this.onWaitingForKey = this.keyIdToKeySessionPromise = null,
                this.config = null
            }
            ,
            e.registerListeners = function() {
                this.hls.on(S.MEDIA_ATTACHED, this.onMediaAttached, this),
                this.hls.on(S.MEDIA_DETACHED, this.onMediaDetached, this),
                this.hls.on(S.MANIFEST_LOADING, this.onManifestLoading, this),
                this.hls.on(S.MANIFEST_LOADED, this.onManifestLoaded, this)
            }
            ,
            e.unregisterListeners = function() {
                this.hls.off(S.MEDIA_ATTACHED, this.onMediaAttached, this),
                this.hls.off(S.MEDIA_DETACHED, this.onMediaDetached, this),
                this.hls.off(S.MANIFEST_LOADING, this.onManifestLoading, this),
                this.hls.off(S.MANIFEST_LOADED, this.onManifestLoaded, this)
            }
            ,
            e.getLicenseServerUrl = function(t) {
                var e = this.config
                  , r = e.drmSystems
                  , i = e.widevineLicenseUrl
                  , n = r[t];
                if (n)
                    return n.licenseUrl;
                if (t === q.WIDEVINE &amp;&amp; i)
                    return i;
                throw new Error(&#39;no license server URL configured for key-system &quot;&#39; + t + &#39;&quot;&#39;)
            }
            ,
            e.getServerCertificateUrl = function(t) {
                var e = this.config.drmSystems[t];
                if (e)
                    return e.serverCertificateUrl;
                this.log(&#39;No Server Certificate in config.drmSystems[&quot;&#39; + t + &#39;&quot;]&#39;)
            }
            ,
            e.attemptKeySystemAccess = function(t) {
                var e = this
                  , r = this.hls.levels
                  , i = function(t, e, r) {
                    return !!t &amp;&amp; r.indexOf(t) === e
                }
                  , n = r.map((function(t) {
                    return t.audioCodec
                }
                )).filter(i)
                  , a = r.map((function(t) {
                    return t.videoCodec
                }
                )).filter(i);
                return n.length + a.length === 0 &amp;&amp; a.push(&quot;avc1.42e01e&quot;),
                new Promise((function(r, i) {
                    !function t(s) {
                        var o = s.shift();
                        e.getMediaKeysPromise(o, n, a).then((function(t) {
                            return r({
                                keySystem: o,
                                mediaKeys: t
                            })
                        }
                        )).catch((function(e) {
                            s.length ? t(s) : i(e instanceof is ? e : new is({
                                type: L.KEY_SYSTEM_ERROR,
                                details: A.KEY_SYSTEM_NO_ACCESS,
                                error: e,
                                fatal: !0
                            },e.message))
                        }
                        ))
                    }(t)
                }
                ))
            }
            ,
            e.requestMediaKeySystemAccess = function(t, e) {
                var r = this.config.requestMediaKeySystemAccessFunc;
                if (&quot;function&quot; != typeof r) {
                    var i = &quot;Configured requestMediaKeySystemAccess is not a function &quot; + r;
                    return null === it &amp;&amp; &quot;http:&quot; === self.location.protocol &amp;&amp; (i = &quot;navigator.requestMediaKeySystemAccess is not available over insecure protocol &quot; + location.protocol),
                    Promise.reject(new Error(i))
                }
                return r(t, e)
            }
            ,
            e.getMediaKeysPromise = function(t, e, r) {
                var i = this
                  , n = function(t, e, r, i) {
                    var n;
                    switch (t) {
                    case q.FAIRPLAY:
                        n = [&quot;cenc&quot;, &quot;sinf&quot;];
                        break;
                    case q.WIDEVINE:
                    case q.PLAYREADY:
                        n = [&quot;cenc&quot;];
                        break;
                    case q.CLEARKEY:
                        n = [&quot;cenc&quot;, &quot;keyids&quot;];
                        break;
                    default:
                        throw new Error(&quot;Unknown key-system: &quot; + t)
                    }
                    return function(t, e, r, i) {
                        return [{
                            initDataTypes: t,
                            persistentState: i.persistentState || &quot;optional&quot;,
                            distinctiveIdentifier: i.distinctiveIdentifier || &quot;optional&quot;,
                            sessionTypes: i.sessionTypes || [i.sessionType || &quot;temporary&quot;],
                            audioCapabilities: e.map((function(t) {
                                return {
                                    contentType: &#39;audio/mp4; codecs=&quot;&#39; + t + &#39;&quot;&#39;,
                                    robustness: i.audioRobustness || &quot;&quot;,
                                    encryptionScheme: i.audioEncryptionScheme || null
                                }
                            }
                            )),
                            videoCapabilities: r.map((function(t) {
                                return {
                                    contentType: &#39;video/mp4; codecs=&quot;&#39; + t + &#39;&quot;&#39;,
                                    robustness: i.videoRobustness || &quot;&quot;,
                                    encryptionScheme: i.videoEncryptionScheme || null
                                }
                            }
                            ))
                        }]
                    }(n, e, r, i)
                }(t, e, r, this.config.drmSystemOptions)
                  , a = this.keySystemAccessPromises[t]
                  , s = null == a ? void 0 : a.keySystemAccess;
                if (!s) {
                    this.log(&#39;Requesting encrypted media &quot;&#39; + t + &#39;&quot; key-system access with config: &#39; + JSON.stringify(n)),
                    s = this.requestMediaKeySystemAccess(t, n);
                    var o = this.keySystemAccessPromises[t] = {
                        keySystemAccess: s
                    };
                    return s.catch((function(e) {
                        i.log(&#39;Failed to obtain access to key-system &quot;&#39; + t + &#39;&quot;: &#39; + e)
                    }
                    )),
                    s.then((function(e) {
                        i.log(&#39;Access for key-system &quot;&#39; + e.keySystem + &#39;&quot; obtained&#39;);
                        var r = i.fetchServerCertificate(t);
                        return i.log(&#39;Create media-keys for &quot;&#39; + t + &#39;&quot;&#39;),
                        o.mediaKeys = e.createMediaKeys().then((function(e) {
                            return i.log(&#39;Media-keys created for &quot;&#39; + t + &#39;&quot;&#39;),
                            r.then((function(r) {
                                return r ? i.setMediaKeysServerCertificate(e, t, r) : e
                            }
                            ))
                        }
                        )),
                        o.mediaKeys.catch((function(e) {
                            i.error(&#39;Failed to create media-keys for &quot;&#39; + t + &#39;&quot;}: &#39; + e)
                        }
                        )),
                        o.mediaKeys
                    }
                    ))
                }
                return s.then((function() {
                    return a.mediaKeys
                }
                ))
            }
            ,
            e.createMediaKeySessionContext = function(t) {
                var e = t.decryptdata
                  , r = t.keySystem
                  , i = t.mediaKeys;
                this.log(&#39;Creating key-system session &quot;&#39; + r + &#39;&quot; keyId: &#39; + Lt(e.keyId || []));
                var n = i.createSession()
                  , a = {
                    decryptdata: e,
                    keySystem: r,
                    mediaKeys: i,
                    mediaKeysSession: n,
                    keyStatus: &quot;status-pending&quot;
                };
                return this.mediaKeySessions.push(a),
                a
            }
            ,
            e.renewKeySession = function(t) {
                var e = t.decryptdata;
                if (e.pssh) {
                    var r = this.createMediaKeySessionContext(t)
                      , i = this.getKeyIdString(e);
                    this.keyIdToKeySessionPromise[i] = this.generateRequestWithPreferredKeySession(r, &quot;cenc&quot;, e.pssh, &quot;expired&quot;)
                } else
                    this.warn(&quot;Could not renew expired session. Missing pssh initData.&quot;);
                this.removeSession(t)
            }
            ,
            e.getKeyIdString = function(t) {
                if (!t)
                    throw new Error(&quot;Could not read keyId of undefined decryptdata&quot;);
                if (null === t.keyId)
                    throw new Error(&quot;keyId is null&quot;);
                return Lt(t.keyId)
            }
            ,
            e.updateKeySession = function(t, e) {
                var r, i = t.mediaKeysSession;
                return this.log(&#39;Updating key-session &quot;&#39; + i.sessionId + &#39;&quot; for keyID &#39; + Lt((null == (r = t.decryptdata) ? void 0 : r.keyId) || []) + &quot;\n      } (data length: &quot; + (e ? e.byteLength : e) + &quot;)&quot;),
                i.update(e)
            }
            ,
            e.selectKeySystemFormat = function(t) {
                var e = Object.keys(t.levelkeys || {});
                return this.keyFormatPromise || (this.log(&quot;Selecting key-system from fragment (sn: &quot; + t.sn + &quot; &quot; + t.type + &quot;: &quot; + t.level + &quot;) key formats &quot; + e.join(&quot;, &quot;)),
                this.keyFormatPromise = this.getKeyFormatPromise(e)),
                this.keyFormatPromise
            }
            ,
            e.getKeyFormatPromise = function(t) {
                var e = this;
                return new Promise((function(r, i) {
                    var n = et(e.config)
                      , a = t.map($).filter((function(t) {
                        return !!t &amp;&amp; -1 !== n.indexOf(t)
                    }
                    ));
                    return e.getKeySystemSelectionPromise(a).then((function(t) {
                        var e = t.keySystem
                          , n = tt(e);
                        n ? r(n) : i(new Error(&#39;Unable to find format for key-system &quot;&#39; + e + &#39;&quot;&#39;))
                    }
                    )).catch(i)
                }
                ))
            }
            ,
            e.loadKey = function(t) {
                var e = this
                  , r = t.keyInfo.decryptdata
                  , i = this.getKeyIdString(r)
                  , n = &quot;(keyId: &quot; + i + &#39; format: &quot;&#39; + r.keyFormat + &#39;&quot; method: &#39; + r.method + &quot; uri: &quot; + r.uri + &quot;)&quot;;
                this.log(&quot;Starting session for key &quot; + n);
                var a = this.keyIdToKeySessionPromise[i];
                return a || (a = this.keyIdToKeySessionPromise[i] = this.getKeySystemForKeyPromise(r).then((function(i) {
                    var a = i.keySystem
                      , s = i.mediaKeys;
                    return e.throwIfDestroyed(),
                    e.log(&quot;Handle encrypted media sn: &quot; + t.frag.sn + &quot; &quot; + t.frag.type + &quot;: &quot; + t.frag.level + &quot; using key &quot; + n),
                    e.attemptSetMediaKeys(a, s).then((function() {
                        e.throwIfDestroyed();
                        var t = e.createMediaKeySessionContext({
                            keySystem: a,
                            mediaKeys: s,
                            decryptdata: r
                        });
                        return e.generateRequestWithPreferredKeySession(t, &quot;cenc&quot;, r.pssh, &quot;playlist-key&quot;)
                    }
                    ))
                }
                ))).catch((function(t) {
                    return e.handleError(t)
                }
                )),
                a
            }
            ,
            e.throwIfDestroyed = function(t) {
                if (!this.hls)
                    throw new Error(&quot;invalid state&quot;)
            }
            ,
            e.handleError = function(t) {
                this.hls &amp;&amp; (this.error(t.message),
                t instanceof is ? this.hls.trigger(S.ERROR, t.data) : this.hls.trigger(S.ERROR, {
                    type: L.KEY_SYSTEM_ERROR,
                    details: A.KEY_SYSTEM_NO_KEYS,
                    error: t,
                    fatal: !0
                }))
            }
            ,
            e.getKeySystemForKeyPromise = function(t) {
                var e = this.getKeyIdString(t)
                  , r = this.keyIdToKeySessionPromise[e];
                if (!r) {
                    var i = $(t.keyFormat)
                      , n = i ? [i] : et(this.config);
                    return this.attemptKeySystemAccess(n)
                }
                return r
            }
            ,
            e.getKeySystemSelectionPromise = function(t) {
                if (t.length || (t = et(this.config)),
                0 === t.length)
                    throw new is({
                        type: L.KEY_SYSTEM_ERROR,
                        details: A.KEY_SYSTEM_NO_CONFIGURED_LICENSE,
                        fatal: !0
                    },&quot;Missing key-system license configuration options &quot; + JSON.stringify({
                        drmSystems: this.config.drmSystems
                    }));
                return this.attemptKeySystemAccess(t)
            }
            ,
            e._onMediaEncrypted = function(t) {
                var e = this
                  , r = t.initDataType
                  , i = t.initData;
                if (this.debug(&#39;&quot;&#39; + t.type + &#39;&quot; event: init data type: &quot;&#39; + r + &#39;&quot;&#39;),
                null !== i) {
                    var n, a;
                    if (&quot;sinf&quot; === r &amp;&amp; this.config.drmSystems[q.FAIRPLAY]) {
                        var s = bt(new Uint8Array(i));
                        try {
                            var o = V(JSON.parse(s).sinf)
                              , l = Bt(new Uint8Array(o));
                            if (!l)
                                return;
                            n = l.subarray(8, 24),
                            a = q.FAIRPLAY
                        } catch (t) {
                            return void this.warn(&#39;Failed to parse sinf &quot;encrypted&quot; event message initData&#39;)
                        }
                    } else {
                        var u = function(t) {
                            if (!(t instanceof ArrayBuffer) || t.byteLength &lt; 32)
                                return null;
                            var e = {
                                version: 0,
                                systemId: &quot;&quot;,
                                kids: null,
                                data: null
                            }
                              , r = new DataView(t)
                              , i = r.getUint32(0);
                            if (t.byteLength !== i &amp;&amp; i &gt; 44)
                                return null;
                            if (1886614376 !== r.getUint32(4))
                                return null;
                            if (e.version = r.getUint32(8) &gt;&gt;&gt; 24,
                            e.version &gt; 1)
                                return null;
                            e.systemId = Lt(new Uint8Array(t,12,16));
                            var n = r.getUint32(28);
                            if (0 === e.version) {
                                if (i - 32 &lt; n)
                                    return null;
                                e.data = new Uint8Array(t,32,n)
                            } else if (1 === e.version) {
                                e.kids = [];
                                for (var a = 0; a &lt; n; a++)
                                    e.kids.push(new Uint8Array(t,32 + 16 * a,16))
                            }
                            return e
                        }(i);
                        if (null === u)
                            return;
                        0 === u.version &amp;&amp; u.systemId === Z &amp;&amp; u.data &amp;&amp; (n = u.data.subarray(8, 24)),
                        a = function(t) {
                            if (t === Z)
                                return q.WIDEVINE
                        }(u.systemId)
                    }
                    if (a &amp;&amp; n) {
                        for (var h, d = Lt(n), c = this.keyIdToKeySessionPromise, f = this.mediaKeySessions, g = c[d], v = function() {
                            var t = f[m]
                              , a = t.decryptdata;
                            if (a.pssh || !a.keyId)
                                return 0;
                            var s = Lt(a.keyId);
                            return d === s || -1 !== a.uri.replace(/-/g, &quot;&quot;).indexOf(d) ? (g = c[s],
                            delete c[s],
                            a.pssh = new Uint8Array(i),
                            a.keyId = n,
                            g = c[d] = g.then((function() {
                                return e.generateRequestWithPreferredKeySession(t, r, i, &quot;encrypted-event-key-match&quot;)
                            }
                            )),
                            1) : void 0
                        }, m = 0; m &lt; f.length &amp;&amp; (0 === (h = v()) || 1 !== h); m++)
                            ;
                        g || (g = c[d] = this.getKeySystemSelectionPromise([a]).then((function(t) {
                            var a, s = t.keySystem, o = t.mediaKeys;
                            e.throwIfDestroyed();
                            var l = new Xt(&quot;ISO-23001-7&quot;,d,null != (a = tt(s)) ? a : &quot;&quot;);
                            return l.pssh = new Uint8Array(i),
                            l.keyId = n,
                            e.attemptSetMediaKeys(s, o).then((function() {
                                e.throwIfDestroyed();
                                var t = e.createMediaKeySessionContext({
                                    decryptdata: l,
                                    keySystem: s,
                                    mediaKeys: o
                                });
                                return e.generateRequestWithPreferredKeySession(t, r, i, &quot;encrypted-event-no-match&quot;)
                            }
                            ))
                        }
                        ))),
                        g.catch((function(t) {
                            return e.handleError(t)
                        }
                        ))
                    }
                }
            }
            ,
            e._onWaitingForKey = function(t) {
                this.log(&#39;&quot;&#39; + t.type + &#39;&quot; event&#39;)
            }
            ,
            e.attemptSetMediaKeys = function(t, e) {
                var r = this
                  , i = this.setMediaKeysQueue.slice();
                this.log(&#39;Setting media-keys for &quot;&#39; + t + &#39;&quot;&#39;);
                var n = Promise.all(i).then((function() {
                    if (!r.media)
                        throw new Error(&quot;Attempted to set mediaKeys without media element attached&quot;);
                    return r.media.setMediaKeys(e)
                }
                ));
                return this.setMediaKeysQueue.push(n),
                n.then((function() {
                    r.log(&#39;Media-keys set for &quot;&#39; + t + &#39;&quot;&#39;),
                    i.push(n),
                    r.setMediaKeysQueue = r.setMediaKeysQueue.filter((function(t) {
                        return -1 === i.indexOf(t)
                    }
                    ))
                }
                ))
            }
            ,
            e.generateRequestWithPreferredKeySession = function(t, e, r, i) {
                var n, a, s = this, o = null == (n = this.config.drmSystems) || null == (a = n[t.keySystem]) ? void 0 : a.generateRequest;
                if (o)
                    try {
                        var l = o.call(this.hls, e, r, t);
                        if (!l)
                            throw new Error(&quot;Invalid response from configured generateRequest filter&quot;);
                        e = l.initDataType,
                        r = t.decryptdata.pssh = l.initData ? new Uint8Array(l.initData) : null
                    } catch (t) {
                        var u;
                        if (this.warn(t.message),
                        null != (u = this.hls) &amp;&amp; u.config.debug)
                            throw t
                    }
                if (null === r)
                    return this.log(&#39;Skipping key-session request for &quot;&#39; + i + &#39;&quot; (no initData)&#39;),
                    Promise.resolve(t);
                var h = this.getKeyIdString(t.decryptdata);
                this.log(&#39;Generating key-session request for &quot;&#39; + i + &#39;&quot;: &#39; + h + &quot; (init data type: &quot; + e + &quot; length: &quot; + (r ? r.byteLength : null) + &quot;)&quot;);
                var d = new Un
                  , c = t._onmessage = function(e) {
                    var r = t.mediaKeysSession;
                    if (r) {
                        var i = e.messageType
                          , n = e.message;
                        s.log(&#39;&quot;&#39; + i + &#39;&quot; message event for session &quot;&#39; + r.sessionId + &#39;&quot; message size: &#39; + n.byteLength),
                        &quot;license-request&quot; === i || &quot;license-renewal&quot; === i ? s.renewLicense(t, n).catch((function(t) {
                            s.handleError(t),
                            d.emit(&quot;error&quot;, t)
                        }
                        )) : &quot;license-release&quot; === i ? t.keySystem === q.FAIRPLAY &amp;&amp; (s.updateKeySession(t, W(&quot;acknowledged&quot;)),
                        s.removeSession(t)) : s.warn(&#39;unhandled media key message type &quot;&#39; + i + &#39;&quot;&#39;)
                    } else
                        d.emit(&quot;error&quot;, new Error(&quot;invalid state&quot;))
                }
                  , f = t._onkeystatuseschange = function(e) {
                    if (t.mediaKeysSession) {
                        s.onKeyStatusChange(t);
                        var r = t.keyStatus;
                        d.emit(&quot;keyStatus&quot;, r),
                        &quot;expired&quot; === r &amp;&amp; (s.warn(t.keySystem + &quot; expired for key &quot; + h),
                        s.renewKeySession(t))
                    } else
                        d.emit(&quot;error&quot;, new Error(&quot;invalid state&quot;))
                }
                ;
                t.mediaKeysSession.addEventListener(&quot;message&quot;, c),
                t.mediaKeysSession.addEventListener(&quot;keystatuseschange&quot;, f);
                var g = new Promise((function(t, e) {
                    d.on(&quot;error&quot;, e),
                    d.on(&quot;keyStatus&quot;, (function(r) {
                        r.startsWith(&quot;usable&quot;) ? t() : &quot;output-restricted&quot; === r ? e(new is({
                            type: L.KEY_SYSTEM_ERROR,
                            details: A.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED,
                            fatal: !1
                        },&quot;HDCP level output restricted&quot;)) : &quot;internal-error&quot; === r ? e(new is({
                            type: L.KEY_SYSTEM_ERROR,
                            details: A.KEY_SYSTEM_STATUS_INTERNAL_ERROR,
                            fatal: !0
                        },&#39;key status changed to &quot;&#39; + r + &#39;&quot;&#39;)) : &quot;expired&quot; === r ? e(new Error(&quot;key expired while generating request&quot;)) : s.warn(&#39;unhandled key status change &quot;&#39; + r + &#39;&quot;&#39;)
                    }
                    ))
                }
                ));
                return t.mediaKeysSession.generateRequest(e, r).then((function() {
                    var e;
                    s.log(&#39;Request generated for key-session &quot;&#39; + (null == (e = t.mediaKeysSession) ? void 0 : e.sessionId) + &#39;&quot; keyId: &#39; + h)
                }
                )).catch((function(t) {
                    throw new is({
                        type: L.KEY_SYSTEM_ERROR,
                        details: A.KEY_SYSTEM_NO_SESSION,
                        error: t,
                        fatal: !1
                    },&quot;Error generating key-session request: &quot; + t)
                }
                )).then((function() {
                    return g
                }
                )).catch((function(e) {
                    throw d.removeAllListeners(),
                    s.removeSession(t),
                    e
                }
                )).then((function() {
                    return d.removeAllListeners(),
                    t
                }
                ))
            }
            ,
            e.onKeyStatusChange = function(t) {
                var e = this;
                t.mediaKeysSession.keyStatuses.forEach((function(r, i) {
                    e.log(&#39;key status change &quot;&#39; + r + &#39;&quot; for keyStatuses keyId: &#39; + Lt(&quot;buffer&quot;in i ? new Uint8Array(i.buffer,i.byteOffset,i.byteLength) : new Uint8Array(i)) + &quot; session keyId: &quot; + Lt(new Uint8Array(t.decryptdata.keyId || [])) + &quot; uri: &quot; + t.decryptdata.uri),
                    t.keyStatus = r
                }
                ))
            }
            ,
            e.fetchServerCertificate = function(t) {
                var e = this.config
                  , r = new (0,
                e.loader)(e)
                  , n = this.getServerCertificateUrl(t);
                return n ? (this.log(&#39;Fetching server certificate for &quot;&#39; + t + &#39;&quot;&#39;),
                new Promise((function(a, s) {
                    var o = {
                        responseType: &quot;arraybuffer&quot;,
                        url: n
                    }
                      , l = e.certLoadPolicy.default
                      , u = {
                        loadPolicy: l,
                        timeout: l.maxLoadTimeMs,
                        maxRetry: 0,
                        retryDelay: 0,
                        maxRetryDelay: 0
                    }
                      , h = {
                        onSuccess: function(t, e, r, i) {
                            a(t.data)
                        },
                        onError: function(e, r, a, l) {
                            s(new is({
                                type: L.KEY_SYSTEM_ERROR,
                                details: A.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED,
                                fatal: !0,
                                networkDetails: a,
                                response: i({
                                    url: o.url,
                                    data: void 0
                                }, e)
                            },&#39;&quot;&#39; + t + &#39;&quot; certificate request failed (&#39; + n + &quot;). Status: &quot; + e.code + &quot; (&quot; + e.text + &quot;)&quot;))
                        },
                        onTimeout: function(e, r, i) {
                            s(new is({
                                type: L.KEY_SYSTEM_ERROR,
                                details: A.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED,
                                fatal: !0,
                                networkDetails: i,
                                response: {
                                    url: o.url,
                                    data: void 0
                                }
                            },&#39;&quot;&#39; + t + &#39;&quot; certificate request timed out (&#39; + n + &quot;)&quot;))
                        },
                        onAbort: function(t, e, r) {
                            s(new Error(&quot;aborted&quot;))
                        }
                    };
                    r.load(o, u, h)
                }
                ))) : Promise.resolve()
            }
            ,
            e.setMediaKeysServerCertificate = function(t, e, r) {
                var i = this;
                return new Promise((function(n, a) {
                    t.setServerCertificate(r).then((function(a) {
                        i.log(&quot;setServerCertificate &quot; + (a ? &quot;success&quot; : &quot;not supported by CDM&quot;) + &quot; (&quot; + (null == r ? void 0 : r.byteLength) + &#39;) on &quot;&#39; + e + &#39;&quot;&#39;),
                        n(t)
                    }
                    )).catch((function(t) {
                        a(new is({
                            type: L.KEY_SYSTEM_ERROR,
                            details: A.KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED,
                            error: t,
                            fatal: !0
                        },t.message))
                    }
                    ))
                }
                ))
            }
            ,
            e.renewLicense = function(t, e) {
                var r = this;
                return this.requestLicense(t, new Uint8Array(e)).then((function(e) {
                    return r.updateKeySession(t, new Uint8Array(e)).catch((function(t) {
                        throw new is({
                            type: L.KEY_SYSTEM_ERROR,
                            details: A.KEY_SYSTEM_SESSION_UPDATE_FAILED,
                            error: t,
                            fatal: !0
                        },t.message)
                    }
                    ))
                }
                ))
            }
            ,
            e.unpackPlayReadyKeyMessage = function(t, e) {
                var r = String.fromCharCode.apply(null, new Uint16Array(e.buffer));
                if (!r.includes(&quot;PlayReadyKeyMessage&quot;))
                    return t.setRequestHeader(&quot;Content-Type&quot;, &quot;text/xml; charset=utf-8&quot;),
                    e;
                var i = (new DOMParser).parseFromString(r, &quot;application/xml&quot;)
                  , n = i.querySelectorAll(&quot;HttpHeader&quot;);
                if (n.length &gt; 0)
                    for (var a, s = 0, o = n.length; s &lt; o; s++) {
                        var l, u, h = null == (l = (a = n[s]).querySelector(&quot;name&quot;)) ? void 0 : l.textContent, d = null == (u = a.querySelector(&quot;value&quot;)) ? void 0 : u.textContent;
                        h &amp;&amp; d &amp;&amp; t.setRequestHeader(h, d)
                    }
                var c = i.querySelector(&quot;Challenge&quot;)
                  , f = null == c ? void 0 : c.textContent;
                if (!f)
                    throw new Error(&quot;Cannot find &lt;Challenge&gt; in key message&quot;);
                return W(atob(f))
            }
            ,
            e.setupLicenseXHR = function(t, e, r, i) {
                var n = this
                  , a = this.config.licenseXhrSetup;
                return a ? Promise.resolve().then((function() {
                    if (!r.decryptdata)
                        throw new Error(&quot;Key removed&quot;);
                    return a.call(n.hls, t, e, r, i)
                }
                )).catch((function(s) {
                    if (!r.decryptdata)
                        throw s;
                    return t.open(&quot;POST&quot;, e, !0),
                    a.call(n.hls, t, e, r, i)
                }
                )).then((function(r) {
                    return t.readyState || t.open(&quot;POST&quot;, e, !0),
                    {
                        xhr: t,
                        licenseChallenge: r || i
                    }
                }
                )) : (t.open(&quot;POST&quot;, e, !0),
                Promise.resolve({
                    xhr: t,
                    licenseChallenge: i
                }))
            }
            ,
            e.requestLicense = function(t, e) {
                var r = this
                  , i = this.config.keyLoadPolicy.default;
                return new Promise((function(n, a) {
                    var s = r.getLicenseServerUrl(t.keySystem);
                    r.log(&quot;Sending license request to URL: &quot; + s);
                    var o = new XMLHttpRequest;
                    o.responseType = &quot;arraybuffer&quot;,
                    o.onreadystatechange = function() {
                        if (!r.hls || !t.mediaKeysSession)
                            return a(new Error(&quot;invalid state&quot;));
                        if (4 === o.readyState)
                            if (200 === o.status) {
                                r._requestLicenseFailureCount = 0;
                                var l = o.response;
                                r.log(&quot;License received &quot; + (l instanceof ArrayBuffer ? l.byteLength : l));
                                var u = r.config.licenseResponseCallback;
                                if (u)
                                    try {
                                        l = u.call(r.hls, o, s, t)
                                    } catch (t) {
                                        r.error(t)
                                    }
                                n(l)
                            } else {
                                var h = i.errorRetry
                                  , d = h ? h.maxNumRetry : 0;
                                if (r._requestLicenseFailureCount++,
                                r._requestLicenseFailureCount &gt; d || o.status &gt;= 400 &amp;&amp; o.status &lt; 500)
                                    a(new is({
                                        type: L.KEY_SYSTEM_ERROR,
                                        details: A.KEY_SYSTEM_LICENSE_REQUEST_FAILED,
                                        fatal: !0,
                                        networkDetails: o,
                                        response: {
                                            url: s,
                                            data: void 0,
                                            code: o.status,
                                            text: o.statusText
                                        }
                                    },&quot;License Request XHR failed (&quot; + s + &quot;). Status: &quot; + o.status + &quot; (&quot; + o.statusText + &quot;)&quot;));
                                else {
                                    var c = d - r._requestLicenseFailureCount + 1;
                                    r.warn(&quot;Retrying license request, &quot; + c + &quot; attempts left&quot;),
                                    r.requestLicense(t, e).then(n, a)
                                }
                            }
                    }
                    ,
                    t.licenseXhr &amp;&amp; t.licenseXhr.readyState !== XMLHttpRequest.DONE &amp;&amp; t.licenseXhr.abort(),
                    t.licenseXhr = o,
                    r.setupLicenseXHR(o, s, t, e).then((function(e) {
                        var i = e.xhr
                          , n = e.licenseChallenge;
                        t.keySystem == q.PLAYREADY &amp;&amp; (n = r.unpackPlayReadyKeyMessage(i, n)),
                        i.send(n)
                    }
                    ))
                }
                ))
            }
            ,
            e.onMediaAttached = function(t, e) {
                if (this.config.emeEnabled) {
                    var r = e.media;
                    this.media = r,
                    r.addEventListener(&quot;encrypted&quot;, this.onMediaEncrypted),
                    r.addEventListener(&quot;waitingforkey&quot;, this.onWaitingForKey)
                }
            }
            ,
            e.onMediaDetached = function() {
                var e = this
                  , r = this.media
                  , i = this.mediaKeySessions;
                r &amp;&amp; (r.removeEventListener(&quot;encrypted&quot;, this.onMediaEncrypted),
                r.removeEventListener(&quot;waitingforkey&quot;, this.onWaitingForKey),
                this.media = null),
                this._requestLicenseFailureCount = 0,
                this.setMediaKeysQueue = [],
                this.mediaKeySessions = [],
                this.keyIdToKeySessionPromise = {},
                Xt.clearKeyUriToKeyIdMap();
                var n = i.length;
                t.CDMCleanupPromise = Promise.all(i.map((function(t) {
                    return e.removeSession(t)
                }
                )).concat(null == r ? void 0 : r.setMediaKeys(null).catch((function(t) {
                    e.log(&quot;Could not clear media keys: &quot; + t)
                }
                )))).then((function() {
                    n &amp;&amp; (e.log(&quot;finished closing key sessions and clearing media keys&quot;),
                    i.length = 0)
                }
                )).catch((function(t) {
                    e.log(&quot;Could not close sessions and clear media keys: &quot; + t)
                }
                ))
            }
            ,
            e.onManifestLoading = function() {
                this.keyFormatPromise = null
            }
            ,
            e.onManifestLoaded = function(t, e) {
                var r = e.sessionKeys;
                if (r &amp;&amp; this.config.emeEnabled &amp;&amp; !this.keyFormatPromise) {
                    var i = r.reduce((function(t, e) {
                        return -1 === t.indexOf(e.keyFormat) &amp;&amp; t.push(e.keyFormat),
                        t
                    }
                    ), []);
                    this.log(&quot;Selecting key-system from session-keys &quot; + i.join(&quot;, &quot;)),
                    this.keyFormatPromise = this.getKeyFormatPromise(i)
                }
            }
            ,
            e.removeSession = function(t) {
                var e = this
                  , r = t.mediaKeysSession
                  , i = t.licenseXhr;
                if (r) {
                    this.log(&quot;Remove licenses and keys and close session &quot; + r.sessionId),
                    t._onmessage &amp;&amp; (r.removeEventListener(&quot;message&quot;, t._onmessage),
                    t._onmessage = void 0),
                    t._onkeystatuseschange &amp;&amp; (r.removeEventListener(&quot;keystatuseschange&quot;, t._onkeystatuseschange),
                    t._onkeystatuseschange = void 0),
                    i &amp;&amp; i.readyState !== XMLHttpRequest.DONE &amp;&amp; i.abort(),
                    t.mediaKeysSession = t.decryptdata = t.licenseXhr = void 0;
                    var n = this.mediaKeySessions.indexOf(t);
                    return n &gt; -1 &amp;&amp; this.mediaKeySessions.splice(n, 1),
                    r.remove().catch((function(t) {
                        e.log(&quot;Could not remove session: &quot; + t)
                    }
                    )).then((function() {
                        return r.close()
                    }
                    )).catch((function(t) {
                        e.log(&quot;Could not close session: &quot; + t)
                    }
                    ))
                }
            }
            ,
            t
        }();
        $a.CDMCleanupPromise = void 0;
        var Za, ts, es, rs, is = function(t) {
            function e(e, r) {
                var i;
                return (i = t.call(this, r) || this).data = void 0,
                e.error || (e.error = new Error(r)),
                i.data = e,
                e.err = e.error,
                i
            }
            return l(e, t),
            e
        }(c(Error));
        !function(t) {
            t.MANIFEST = &quot;m&quot;,
            t.AUDIO = &quot;a&quot;,
            t.VIDEO = &quot;v&quot;,
            t.MUXED = &quot;av&quot;,
            t.INIT = &quot;i&quot;,
            t.CAPTION = &quot;c&quot;,
            t.TIMED_TEXT = &quot;tt&quot;,
            t.KEY = &quot;k&quot;,
            t.OTHER = &quot;o&quot;
        }(Za || (Za = {})),
        function(t) {
            t.DASH = &quot;d&quot;,
            t.HLS = &quot;h&quot;,
            t.SMOOTH = &quot;s&quot;,
            t.OTHER = &quot;o&quot;
        }(ts || (ts = {})),
        function(t) {
            t.OBJECT = &quot;CMCD-Object&quot;,
            t.REQUEST = &quot;CMCD-Request&quot;,
            t.SESSION = &quot;CMCD-Session&quot;,
            t.STATUS = &quot;CMCD-Status&quot;
        }(es || (es = {}));
        var ns = ((rs = {})[es.OBJECT] = [&quot;br&quot;, &quot;d&quot;, &quot;ot&quot;, &quot;tb&quot;],
        rs[es.REQUEST] = [&quot;bl&quot;, &quot;dl&quot;, &quot;mtp&quot;, &quot;nor&quot;, &quot;nrr&quot;, &quot;su&quot;],
        rs[es.SESSION] = [&quot;cid&quot;, &quot;pr&quot;, &quot;sf&quot;, &quot;sid&quot;, &quot;st&quot;, &quot;v&quot;],
        rs[es.STATUS] = [&quot;bs&quot;, &quot;rtp&quot;],
        rs)
          , as = function t(e, r) {
            this.value = void 0,
            this.params = void 0,
            Array.isArray(e) &amp;&amp; (e = e.map((function(e) {
                return e instanceof t ? e : new t(e)
            }
            ))),
            this.value = e,
            this.params = r
        }
          , ss = function(t) {
            this.description = void 0,
            this.description = t
        }
          , os = &quot;Dict&quot;;
        function ls(t, e, r, i) {
            return new Error(&quot;failed to &quot; + t + &#39; &quot;&#39; + (n = e,
            (Array.isArray(n) ? JSON.stringify(n) : n instanceof Map ? &quot;Map{}&quot; : n instanceof Set ? &quot;Set{}&quot; : &quot;object&quot; == typeof n ? JSON.stringify(n) : String(n)) + &#39;&quot; as &#39;) + r,{
                cause: i
            });
            var n
        }
        var us = &quot;Bare Item&quot;
          , hs = &quot;Boolean&quot;
          , ds = &quot;Byte Sequence&quot;
          , cs = &quot;Decimal&quot;
          , fs = &quot;Integer&quot;
          , gs = /[\x00-\x1f\x7f]+/
          , vs = &quot;Token&quot;
          , ms = &quot;Key&quot;;
        function ps(t, e, r) {
            return ls(&quot;serialize&quot;, t, e, r)
        }
        function ys(t) {
            if (!1 === ArrayBuffer.isView(t))
                throw ps(t, ds);
            return &quot;:&quot; + (e = t,
            btoa(String.fromCharCode.apply(String, e)) + &quot;:&quot;);
            var e
        }
        function Es(t) {
            if (function(t) {
                return t &lt; -999999999999999 || 999999999999999 &lt; t
            }(t))
                throw ps(t, fs);
            return t.toString()
        }
        function Ts(t, e) {
            if (t &lt; 0)
                return -Ts(-t, e);
            var r = Math.pow(10, e);
            if (Math.abs(t * r % 1 - .5) &lt; Number.EPSILON) {
                var i = Math.floor(t * r);
                return (i % 2 == 0 ? i : i + 1) / r
            }
            return Math.round(t * r) / r
        }
        function Ss(t) {
            var e = Ts(t, 3);
            if (Math.floor(Math.abs(e)).toString().length &gt; 12)
                throw ps(t, cs);
            var r = e.toString();
            return r.includes(&quot;.&quot;) ? r : r + &quot;.0&quot;
        }
        var Ls = &quot;String&quot;;
        function As(t) {
            var e, r = (e = t).description || e.toString().slice(7, -1);
            if (!1 === /^([a-zA-Z*])([!#$%&amp;&#39;*+\-.^_`|~\w:/]*)$/.test(r))
                throw ps(r, vs);
            return r
        }
        function Rs(t) {
            switch (typeof t) {
            case &quot;number&quot;:
                if (!y(t))
                    throw ps(t, us);
                return Number.isInteger(t) ? Es(t) : Ss(t);
            case &quot;string&quot;:
                return function(t) {
                    if (gs.test(t))
                        throw ps(t, Ls);
                    return &#39;&quot;&#39; + t.replace(/\\/g, &quot;\\\\&quot;).replace(/&quot;/g, &#39;\\&quot;&#39;) + &#39;&quot;&#39;
                }(t);
            case &quot;symbol&quot;:
                return As(t);
            case &quot;boolean&quot;:
                return function(t) {
                    if (&quot;boolean&quot; != typeof t)
                        throw ps(t, hs);
                    return t ? &quot;?1&quot; : &quot;?0&quot;
                }(t);
            case &quot;object&quot;:
                if (t instanceof Date)
                    return function(t) {
                        return &quot;@&quot; + Es(t.getTime() / 1e3)
                    }(t);
                if (t instanceof Uint8Array)
                    return ys(t);
                if (t instanceof ss)
                    return As(t);
            default:
                throw ps(t, us)
            }
        }
        function ks(t) {
            if (!1 === /^[a-z*][a-z0-9\-_.*]*$/.test(t))
                throw ps(t, ms);
            return t
        }
        function bs(t) {
            return null == t ? &quot;&quot; : Object.entries(t).map((function(t) {
                var e = t[0]
                  , r = t[1];
                return !0 === r ? &quot;;&quot; + ks(e) : &quot;;&quot; + ks(e) + &quot;=&quot; + Rs(r)
            }
            )).join(&quot;&quot;)
        }
        function Ds(t) {
            return t instanceof as ? &quot;&quot; + Rs(t.value) + bs(t.params) : Rs(t)
        }
        function Is(t, e) {
            var r;
            if (void 0 === e &amp;&amp; (e = {
                whitespace: !0
            }),
            &quot;object&quot; != typeof t)
                throw ps(t, os);
            var i = t instanceof Map ? t.entries() : Object.entries(t)
              , n = null != (r = e) &amp;&amp; r.whitespace ? &quot; &quot; : &quot;&quot;;
            return Array.from(i).map((function(t) {
                var e = t[0]
                  , r = t[1];
                r instanceof as == 0 &amp;&amp; (r = new as(r));
                var i, n = ks(e);
                return !0 === r.value ? n += bs(r.params) : (n += &quot;=&quot;,
                Array.isArray(r.value) ? n += &quot;(&quot; + (i = r).value.map(Ds).join(&quot; &quot;) + &quot;)&quot; + bs(i.params) : n += Ds(r)),
                n
            }
            )).join(&quot;,&quot; + n)
        }
        var ws = function(t) {
            return &quot;ot&quot; === t || &quot;sf&quot; === t || &quot;st&quot; === t
        }
          , Cs = function(t) {
            return &quot;number&quot; == typeof t ? y(t) : null != t &amp;&amp; &quot;&quot; !== t &amp;&amp; !1 !== t
        }
          , _s = function(t) {
            return Math.round(t)
        }
          , xs = function(t) {
            return 100 * _s(t / 100)
        }
          , Ps = {
            br: _s,
            d: _s,
            bl: xs,
            dl: xs,
            mtp: xs,
            nor: function(t, e) {
                return null != e &amp;&amp; e.baseUrl &amp;&amp; (t = function(t, e) {
                    var r = new URL(t)
                      , i = new URL(e);
                    if (r.origin !== i.origin)
                        return t;
                    for (var n = r.pathname.split(&quot;/&quot;).slice(1), a = i.pathname.split(&quot;/&quot;).slice(1, -1); n[0] === a[0]; )
                        n.shift(),
                        a.shift();
                    for (; a.length; )
                        a.shift(),
                        n.unshift(&quot;..&quot;);
                    return n.join(&quot;/&quot;)
                }(t, e.baseUrl)),
                encodeURIComponent(t)
            },
            rtp: xs,
            tb: _s
        };
        function Fs(t, e) {
            return void 0 === e &amp;&amp; (e = {}),
            t ? function(t, e) {
                return Is(t, e)
            }(function(t, e) {
                var r = {};
                if (null == t || &quot;object&quot; != typeof t)
                    return r;
                var i = Object.keys(t).sort()
                  , n = o({}, Ps, null == e ? void 0 : e.formatters)
                  , a = null == e ? void 0 : e.filter;
                return i.forEach((function(i) {
                    if (null == a || !a(i)) {
                        var s = t[i]
                          , o = n[i];
                        o &amp;&amp; (s = o(s, e)),
                        &quot;v&quot; === i &amp;&amp; 1 === s || &quot;pr&quot; == i &amp;&amp; 1 === s || Cs(s) &amp;&amp; (ws(i) &amp;&amp; &quot;string&quot; == typeof s &amp;&amp; (s = new ss(s)),
                        r[i] = s)
                    }
                }
                )),
                r
            }(t, e), o({
                whitespace: !1
            }, e)) : &quot;&quot;
        }
        function Ms(t, e, r) {
            return o(t, function(t, e) {
                var r;
                if (void 0 === e &amp;&amp; (e = {}),
                !t)
                    return {};
                var i = Object.entries(t)
                  , n = Object.entries(ns).concat(Object.entries((null == (r = e) ? void 0 : r.customHeaderMap) || {}))
                  , a = i.reduce((function(t, e) {
                    var r, i = e[0], a = e[1], s = (null == (r = n.find((function(t) {
                        return t[1].includes(i)
                    }
                    ))) ? void 0 : r[0]) || es.REQUEST;
                    return null != t[s] || (t[s] = {}),
                    t[s][i] = a,
                    t
                }
                ), {});
                return Object.entries(a).reduce((function(t, r) {
                    var i = r[0]
                      , n = r[1];
                    return t[i] = Fs(n, e),
                    t
                }
                ), {})
            }(e, r))
        }
        var Os = &quot;CMCD&quot;
          , Ns = /CMCD=[^&amp;#]+/;
        function Us(t, e, r) {
            var i = function(t, e) {
                if (void 0 === e &amp;&amp; (e = {}),
                !t)
                    return &quot;&quot;;
                var r = Fs(t, e);
                return Os + &quot;=&quot; + encodeURIComponent(r)
            }(e, r);
            if (!i)
                return t;
            if (Ns.test(t))
                return t.replace(Ns, i);
            var n = t.includes(&quot;?&quot;) ? &quot;&amp;&quot; : &quot;?&quot;;
            return &quot;&quot; + t + n + i
        }
        var Bs = function() {
            function t(t) {
                var e = this;
                this.hls = void 0,
                this.config = void 0,
                this.media = void 0,
                this.sid = void 0,
                this.cid = void 0,
                this.useHeaders = !1,
                this.includeKeys = void 0,
                this.initialized = !1,
                this.starved = !1,
                this.buffering = !0,
                this.audioBuffer = void 0,
                this.videoBuffer = void 0,
                this.onWaiting = function() {
                    e.initialized &amp;&amp; (e.starved = !0),
                    e.buffering = !0
                }
                ,
                this.onPlaying = function() {
                    e.initialized || (e.initialized = !0),
                    e.buffering = !1
                }
                ,
                this.applyPlaylistData = function(t) {
                    try {
                        e.apply(t, {
                            ot: Za.MANIFEST,
                            su: !e.initialized
                        })
                    } catch (t) {
                        w.warn(&quot;Could not generate manifest CMCD data.&quot;, t)
                    }
                }
                ,
                this.applyFragmentData = function(t) {
                    try {
                        var r = t.frag
                          , i = e.hls.levels[r.level]
                          , n = e.getObjectType(r)
                          , a = {
                            d: 1e3 * r.duration,
                            ot: n
                        };
                        n !== Za.VIDEO &amp;&amp; n !== Za.AUDIO &amp;&amp; n != Za.MUXED || (a.br = i.bitrate / 1e3,
                        a.tb = e.getTopBandwidth(n) / 1e3,
                        a.bl = e.getBufferLength(n)),
                        e.apply(t, a)
                    } catch (t) {
                        w.warn(&quot;Could not generate segment CMCD data.&quot;, t)
                    }
                }
                ,
                this.hls = t;
                var r = this.config = t.config
                  , i = r.cmcd;
                null != i &amp;&amp; (r.pLoader = this.createPlaylistLoader(),
                r.fLoader = this.createFragmentLoader(),
                this.sid = i.sessionId || function() {
                    try {
                        return crypto.randomUUID()
                    } catch (i) {
                        try {
                            var t = URL.createObjectURL(new Blob)
                              , e = t.toString();
                            return URL.revokeObjectURL(t),
                            e.slice(e.lastIndexOf(&quot;/&quot;) + 1)
                        } catch (t) {
                            var r = (new Date).getTime();
                            return &quot;xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx&quot;.replace(/[xy]/g, (function(t) {
                                var e = (r + 16 * Math.random()) % 16 | 0;
                                return r = Math.floor(r / 16),
                                (&quot;x&quot; == t ? e : 3 &amp; e | 8).toString(16)
                            }
                            ))
                        }
                    }
                }(),
                this.cid = i.contentId,
                this.useHeaders = !0 === i.useHeaders,
                this.includeKeys = i.includeKeys,
                this.registerListeners())
            }
            var e = t.prototype;
            return e.registerListeners = function() {
                var t = this.hls;
                t.on(S.MEDIA_ATTACHED, this.onMediaAttached, this),
                t.on(S.MEDIA_DETACHED, this.onMediaDetached, this),
                t.on(S.BUFFER_CREATED, this.onBufferCreated, this)
            }
            ,
            e.unregisterListeners = function() {
                var t = this.hls;
                t.off(S.MEDIA_ATTACHED, this.onMediaAttached, this),
                t.off(S.MEDIA_DETACHED, this.onMediaDetached, this),
                t.off(S.BUFFER_CREATED, this.onBufferCreated, this)
            }
            ,
            e.destroy = function() {
                this.unregisterListeners(),
                this.onMediaDetached(),
                this.hls = this.config = this.audioBuffer = this.videoBuffer = null,
                this.onWaiting = this.onPlaying = null
            }
            ,
            e.onMediaAttached = function(t, e) {
                this.media = e.media,
                this.media.addEventListener(&quot;waiting&quot;, this.onWaiting),
                this.media.addEventListener(&quot;playing&quot;, this.onPlaying)
            }
            ,
            e.onMediaDetached = function() {
                this.media &amp;&amp; (this.media.removeEventListener(&quot;waiting&quot;, this.onWaiting),
                this.media.removeEventListener(&quot;playing&quot;, this.onPlaying),
                this.media = null)
            }
            ,
            e.onBufferCreated = function(t, e) {
                var r, i;
                this.audioBuffer = null == (r = e.tracks.audio) ? void 0 : r.buffer,
                this.videoBuffer = null == (i = e.tracks.video) ? void 0 : i.buffer
            }
            ,
            e.createData = function() {
                var t;
                return {
                    v: 1,
                    sf: ts.HLS,
                    sid: this.sid,
                    cid: this.cid,
                    pr: null == (t = this.media) ? void 0 : t.playbackRate,
                    mtp: this.hls.bandwidthEstimate / 1e3
                }
            }
            ,
            e.apply = function(t, e) {
                void 0 === e &amp;&amp; (e = {}),
                o(e, this.createData());
                var r = e.ot === Za.INIT || e.ot === Za.VIDEO || e.ot === Za.MUXED;
                this.starved &amp;&amp; r &amp;&amp; (e.bs = !0,
                e.su = !0,
                this.starved = !1),
                null == e.su &amp;&amp; (e.su = this.buffering);
                var i = this.includeKeys;
                i &amp;&amp; (e = Object.keys(e).reduce((function(t, r) {
                    return i.includes(r) &amp;&amp; (t[r] = e[r]),
                    t
                }
                ), {})),
                this.useHeaders ? (t.headers || (t.headers = {}),
                Ms(t.headers, e)) : t.url = Us(t.url, e)
            }
            ,
            e.getObjectType = function(t) {
                var e = t.type;
                return &quot;subtitle&quot; === e ? Za.TIMED_TEXT : &quot;initSegment&quot; === t.sn ? Za.INIT : &quot;audio&quot; === e ? Za.AUDIO : &quot;main&quot; === e ? this.hls.audioTracks.length ? Za.VIDEO : Za.MUXED : void 0
            }
            ,
            e.getTopBandwidth = function(t) {
                var e, r = 0, i = this.hls;
                if (t === Za.AUDIO)
                    e = i.audioTracks;
                else {
                    var n = i.maxAutoLevel
                      , a = n &gt; -1 ? n + 1 : i.levels.length;
                    e = i.levels.slice(0, a)
                }
                for (var s, o = g(e); !(s = o()).done; ) {
                    var l = s.value;
                    l.bitrate &gt; r &amp;&amp; (r = l.bitrate)
                }
                return r &gt; 0 ? r : NaN
            }
            ,
            e.getBufferLength = function(t) {
                var e = this.hls.media
                  , r = t === Za.AUDIO ? this.audioBuffer : this.videoBuffer;
                return r &amp;&amp; e ? 1e3 * Jr.bufferInfo(r, e.currentTime, this.config.maxBufferHole).len : NaN
            }
            ,
            e.createPlaylistLoader = function() {
                var t = this.config.pLoader
                  , e = this.applyPlaylistData
                  , r = t || this.config.loader;
                return function() {
                    function t(t) {
                        this.loader = void 0,
                        this.loader = new r(t)
                    }
                    var i = t.prototype;
                    return i.destroy = function() {
                        this.loader.destroy()
                    }
                    ,
                    i.abort = function() {
                        this.loader.abort()
                    }
                    ,
                    i.load = function(t, r, i) {
                        e(t),
                        this.loader.load(t, r, i)
                    }
                    ,
                    s(t, [{
                        key: &quot;stats&quot;,
                        get: function() {
                            return this.loader.stats
                        }
                    }, {
                        key: &quot;context&quot;,
                        get: function() {
                            return this.loader.context
                        }
                    }]),
                    t
                }()
            }
            ,
            e.createFragmentLoader = function() {
                var t = this.config.fLoader
                  , e = this.applyFragmentData
                  , r = t || this.config.loader;
                return function() {
                    function t(t) {
                        this.loader = void 0,
                        this.loader = new r(t)
                    }
                    var i = t.prototype;
                    return i.destroy = function() {
                        this.loader.destroy()
                    }
                    ,
                    i.abort = function() {
                        this.loader.abort()
                    }
                    ,
                    i.load = function(t, r, i) {
                        e(t),
                        this.loader.load(t, r, i)
                    }
                    ,
                    s(t, [{
                        key: &quot;stats&quot;,
                        get: function() {
                            return this.loader.stats
                        }
                    }, {
                        key: &quot;context&quot;,
                        get: function() {
                            return this.loader.context
                        }
                    }]),
                    t
                }()
            }
            ,
            t
        }()
          , Gs = function() {
            function t(t) {
                this.hls = void 0,
                this.log = void 0,
                this.loader = null,
                this.uri = null,
                this.pathwayId = &quot;.&quot;,
                this.pathwayPriority = null,
                this.timeToLoad = 300,
                this.reloadTimer = -1,
                this.updated = 0,
                this.started = !1,
                this.enabled = !0,
                this.levels = null,
                this.audioTracks = null,
                this.subtitleTracks = null,
                this.penalizedPathways = {},
                this.hls = t,
                this.log = w.log.bind(w, &quot;[content-steering]:&quot;),
                this.registerListeners()
            }
            var e = t.prototype;
            return e.registerListeners = function() {
                var t = this.hls;
                t.on(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.on(S.MANIFEST_LOADED, this.onManifestLoaded, this),
                t.on(S.MANIFEST_PARSED, this.onManifestParsed, this),
                t.on(S.ERROR, this.onError, this)
            }
            ,
            e.unregisterListeners = function() {
                var t = this.hls;
                t &amp;&amp; (t.off(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.off(S.MANIFEST_LOADED, this.onManifestLoaded, this),
                t.off(S.MANIFEST_PARSED, this.onManifestParsed, this),
                t.off(S.ERROR, this.onError, this))
            }
            ,
            e.startLoad = function() {
                if (this.started = !0,
                this.clearTimeout(),
                this.enabled &amp;&amp; this.uri) {
                    if (this.updated) {
                        var t = 1e3 * this.timeToLoad - (performance.now() - this.updated);
                        if (t &gt; 0)
                            return void this.scheduleRefresh(this.uri, t)
                    }
                    this.loadSteeringManifest(this.uri)
                }
            }
            ,
            e.stopLoad = function() {
                this.started = !1,
                this.loader &amp;&amp; (this.loader.destroy(),
                this.loader = null),
                this.clearTimeout()
            }
            ,
            e.clearTimeout = function() {
                -1 !== this.reloadTimer &amp;&amp; (self.clearTimeout(this.reloadTimer),
                this.reloadTimer = -1)
            }
            ,
            e.destroy = function() {
                this.unregisterListeners(),
                this.stopLoad(),
                this.hls = null,
                this.levels = this.audioTracks = this.subtitleTracks = null
            }
            ,
            e.removeLevel = function(t) {
                var e = this.levels;
                e &amp;&amp; (this.levels = e.filter((function(e) {
                    return e !== t
                }
                )))
            }
            ,
            e.onManifestLoading = function() {
                this.stopLoad(),
                this.enabled = !0,
                this.timeToLoad = 300,
                this.updated = 0,
                this.uri = null,
                this.pathwayId = &quot;.&quot;,
                this.levels = this.audioTracks = this.subtitleTracks = null
            }
            ,
            e.onManifestLoaded = function(t, e) {
                var r = e.contentSteering;
                null !== r &amp;&amp; (this.pathwayId = r.pathwayId,
                this.uri = r.uri,
                this.started &amp;&amp; this.startLoad())
            }
            ,
            e.onManifestParsed = function(t, e) {
                this.audioTracks = e.audioTracks,
                this.subtitleTracks = e.subtitleTracks
            }
            ,
            e.onError = function(t, e) {
                var r = e.errorAction;
                if ((null == r ? void 0 : r.action) === Lr &amp;&amp; r.flags === br) {
                    var i = this.levels
                      , n = this.pathwayPriority
                      , a = this.pathwayId;
                    if (e.context) {
                        var s = e.context
                          , o = s.groupId
                          , l = s.pathwayId
                          , u = s.type;
                        o &amp;&amp; i ? a = this.getPathwayForGroupId(o, u, a) : l &amp;&amp; (a = l)
                    }
                    a in this.penalizedPathways || (this.penalizedPathways[a] = performance.now()),
                    !n &amp;&amp; i &amp;&amp; (n = i.reduce((function(t, e) {
                        return -1 === t.indexOf(e.pathwayId) &amp;&amp; t.push(e.pathwayId),
                        t
                    }
                    ), [])),
                    n &amp;&amp; n.length &gt; 1 &amp;&amp; (this.updatePathwayPriority(n),
                    r.resolved = this.pathwayId !== a),
                    r.resolved || w.warn(&quot;Could not resolve &quot; + e.details + &#39; (&quot;&#39; + e.error.message + &#39;&quot;) with content-steering for Pathway: &#39; + a + &quot; levels: &quot; + (i ? i.length : i) + &quot; priorities: &quot; + JSON.stringify(n) + &quot; penalized: &quot; + JSON.stringify(this.penalizedPathways))
                }
            }
            ,
            e.filterParsedLevels = function(t) {
                this.levels = t;
                var e = this.getLevelsForPathway(this.pathwayId);
                if (0 === e.length) {
                    var r = t[0].pathwayId;
                    this.log(&quot;No levels found in Pathway &quot; + this.pathwayId + &#39;. Setting initial Pathway to &quot;&#39; + r + &#39;&quot;&#39;),
                    e = this.getLevelsForPathway(r),
                    this.pathwayId = r
                }
                return e.length !== t.length ? (this.log(&quot;Found &quot; + e.length + &quot;/&quot; + t.length + &#39; levels in Pathway &quot;&#39; + this.pathwayId + &#39;&quot;&#39;),
                e) : t
            }
            ,
            e.getLevelsForPathway = function(t) {
                return null === this.levels ? [] : this.levels.filter((function(e) {
                    return t === e.pathwayId
                }
                ))
            }
            ,
            e.updatePathwayPriority = function(t) {
                var e;
                this.pathwayPriority = t;
                var r = this.penalizedPathways
                  , i = performance.now();
                Object.keys(r).forEach((function(t) {
                    i - r[t] &gt; 3e5 &amp;&amp; delete r[t]
                }
                ));
                for (var n = 0; n &lt; t.length; n++) {
                    var a = t[n];
                    if (!(a in r)) {
                        if (a === this.pathwayId)
                            return;
                        var s = this.hls.nextLoadLevel
                          , o = this.hls.levels[s];
                        if ((e = this.getLevelsForPathway(a)).length &gt; 0) {
                            this.log(&#39;Setting Pathway to &quot;&#39; + a + &#39;&quot;&#39;),
                            this.pathwayId = a,
                            dr(e),
                            this.hls.trigger(S.LEVELS_UPDATED, {
                                levels: e
                            });
                            var l = this.hls.levels[s];
                            o &amp;&amp; l &amp;&amp; this.levels &amp;&amp; (l.attrs[&quot;STABLE-VARIANT-ID&quot;] !== o.attrs[&quot;STABLE-VARIANT-ID&quot;] &amp;&amp; l.bitrate !== o.bitrate &amp;&amp; this.log(&quot;Unstable Pathways change from bitrate &quot; + o.bitrate + &quot; to &quot; + l.bitrate),
                            this.hls.nextLoadLevel = s);
                            break
                        }
                    }
                }
            }
            ,
            e.getPathwayForGroupId = function(t, e, r) {
                for (var i = this.getLevelsForPathway(r).concat(this.levels || []), n = 0; n &lt; i.length; n++)
                    if (e === De &amp;&amp; i[n].hasAudioGroup(t) || e === Ie &amp;&amp; i[n].hasSubtitleGroup(t))
                        return i[n].pathwayId;
                return r
            }
            ,
            e.clonePathways = function(t) {
                var e = this
                  , r = this.levels;
                if (r) {
                    var i = {}
                      , n = {};
                    t.forEach((function(t) {
                        var a = t.ID
                          , s = t[&quot;BASE-ID&quot;]
                          , o = t[&quot;URI-REPLACEMENT&quot;];
                        if (!r.some((function(t) {
                            return t.pathwayId === a
                        }
                        ))) {
                            var l = e.getLevelsForPathway(s).map((function(t) {
                                var e = new x(t.attrs);
                                e[&quot;PATHWAY-ID&quot;] = a;
                                var r = e.AUDIO &amp;&amp; e.AUDIO + &quot;_clone_&quot; + a
                                  , s = e.SUBTITLES &amp;&amp; e.SUBTITLES + &quot;_clone_&quot; + a;
                                r &amp;&amp; (i[e.AUDIO] = r,
                                e.AUDIO = r),
                                s &amp;&amp; (n[e.SUBTITLES] = s,
                                e.SUBTITLES = s);
                                var l = Hs(t.uri, e[&quot;STABLE-VARIANT-ID&quot;], &quot;PER-VARIANT-URIS&quot;, o)
                                  , u = new rr({
                                    attrs: e,
                                    audioCodec: t.audioCodec,
                                    bitrate: t.bitrate,
                                    height: t.height,
                                    name: t.name,
                                    url: l,
                                    videoCodec: t.videoCodec,
                                    width: t.width
                                });
                                if (t.audioGroups)
                                    for (var h = 1; h &lt; t.audioGroups.length; h++)
                                        u.addGroupId(&quot;audio&quot;, t.audioGroups[h] + &quot;_clone_&quot; + a);
                                if (t.subtitleGroups)
                                    for (var d = 1; d &lt; t.subtitleGroups.length; d++)
                                        u.addGroupId(&quot;text&quot;, t.subtitleGroups[d] + &quot;_clone_&quot; + a);
                                return u
                            }
                            ));
                            r.push.apply(r, l),
                            Ks(e.audioTracks, i, o, a),
                            Ks(e.subtitleTracks, n, o, a)
                        }
                    }
                    ))
                }
            }
            ,
            e.loadSteeringManifest = function(t) {
                var e, r = this, i = this.hls.config, n = i.loader;
                this.loader &amp;&amp; this.loader.destroy(),
                this.loader = new n(i);
                try {
                    e = new self.URL(t)
                } catch (e) {
                    return this.enabled = !1,
                    void this.log(&quot;Failed to parse Steering Manifest URI: &quot; + t)
                }
                if (&quot;data:&quot; !== e.protocol) {
                    var a = 0 | (this.hls.bandwidthEstimate || i.abrEwmaDefaultEstimate);
                    e.searchParams.set(&quot;_HLS_pathway&quot;, this.pathwayId),
                    e.searchParams.set(&quot;_HLS_throughput&quot;, &quot;&quot; + a)
                }
                var s = {
                    responseType: &quot;json&quot;,
                    url: e.href
                }
                  , o = i.steeringManifestLoadPolicy.default
                  , l = o.errorRetry || o.timeoutRetry || {}
                  , u = {
                    loadPolicy: o,
                    timeout: o.maxLoadTimeMs,
                    maxRetry: l.maxNumRetry || 0,
                    retryDelay: l.retryDelayMs || 0,
                    maxRetryDelay: l.maxRetryDelayMs || 0
                }
                  , h = {
                    onSuccess: function(t, i, n, a) {
                        r.log(&#39;Loaded steering manifest: &quot;&#39; + e + &#39;&quot;&#39;);
                        var s = t.data;
                        if (1 === s.VERSION) {
                            r.updated = performance.now(),
                            r.timeToLoad = s.TTL;
                            var o = s[&quot;RELOAD-URI&quot;]
                              , l = s[&quot;PATHWAY-CLONES&quot;]
                              , u = s[&quot;PATHWAY-PRIORITY&quot;];
                            if (o)
                                try {
                                    r.uri = new self.URL(o,e).href
                                } catch (t) {
                                    return r.enabled = !1,
                                    void r.log(&quot;Failed to parse Steering Manifest RELOAD-URI: &quot; + o)
                                }
                            r.scheduleRefresh(r.uri || n.url),
                            l &amp;&amp; r.clonePathways(l);
                            var h = {
                                steeringManifest: s,
                                url: e.toString()
                            };
                            r.hls.trigger(S.STEERING_MANIFEST_LOADED, h),
                            u &amp;&amp; r.updatePathwayPriority(u)
                        } else
                            r.log(&quot;Steering VERSION &quot; + s.VERSION + &quot; not supported!&quot;)
                    },
                    onError: function(t, e, i, n) {
                        if (r.log(&quot;Error loading steering manifest: &quot; + t.code + &quot; &quot; + t.text + &quot; (&quot; + e.url + &quot;)&quot;),
                        r.stopLoad(),
                        410 === t.code)
                            return r.enabled = !1,
                            void r.log(&quot;Steering manifest &quot; + e.url + &quot; no longer available&quot;);
                        var a = 1e3 * r.timeToLoad;
                        if (429 !== t.code)
                            r.scheduleRefresh(r.uri || e.url, a);
                        else {
                            var s = r.loader;
                            if (&quot;function&quot; == typeof (null == s ? void 0 : s.getResponseHeader)) {
                                var o = s.getResponseHeader(&quot;Retry-After&quot;);
                                o &amp;&amp; (a = 1e3 * parseFloat(o))
                            }
                            r.log(&quot;Steering manifest &quot; + e.url + &quot; rate limited&quot;)
                        }
                    },
                    onTimeout: function(t, e, i) {
                        r.log(&quot;Timeout loading steering manifest (&quot; + e.url + &quot;)&quot;),
                        r.scheduleRefresh(r.uri || e.url)
                    }
                };
                this.log(&quot;Requesting steering manifest: &quot; + e),
                this.loader.load(s, u, h)
            }
            ,
            e.scheduleRefresh = function(t, e) {
                var r = this;
                void 0 === e &amp;&amp; (e = 1e3 * this.timeToLoad),
                this.clearTimeout(),
                this.reloadTimer = self.setTimeout((function() {
                    var e, i = null == (e = r.hls) ? void 0 : e.media;
                    !i || i.ended ? r.scheduleRefresh(t, 1e3 * r.timeToLoad) : r.loadSteeringManifest(t)
                }
                ), e)
            }
            ,
            t
        }();
        function Ks(t, e, r, i) {
            t &amp;&amp; Object.keys(e).forEach((function(n) {
                var a = t.filter((function(t) {
                    return t.groupId === n
                }
                )).map((function(t) {
                    var a = o({}, t);
                    return a.details = void 0,
                    a.attrs = new x(a.attrs),
                    a.url = a.attrs.URI = Hs(t.url, t.attrs[&quot;STABLE-RENDITION-ID&quot;], &quot;PER-RENDITION-URIS&quot;, r),
                    a.groupId = a.attrs[&quot;GROUP-ID&quot;] = e[n],
                    a.attrs[&quot;PATHWAY-ID&quot;] = i,
                    a
                }
                ));
                t.push.apply(t, a)
            }
            ))
        }
        function Hs(t, e, r, i) {
            var n, a = i.HOST, s = i.PARAMS, o = i[r];
            e &amp;&amp; (n = null == o ? void 0 : o[e]) &amp;&amp; (t = n);
            var l = new self.URL(t);
            return a &amp;&amp; !n &amp;&amp; (l.host = a),
            s &amp;&amp; Object.keys(s).sort().forEach((function(t) {
                t &amp;&amp; l.searchParams.set(t, s[t])
            }
            )),
            l.href
        }
        var Vs = /^age:\s*[\d.]+\s*$/im
          , Ys = function() {
            function t(t) {
                this.xhrSetup = void 0,
                this.requestTimeout = void 0,
                this.retryTimeout = void 0,
                this.retryDelay = void 0,
                this.config = null,
                this.callbacks = null,
                this.context = null,
                this.loader = null,
                this.stats = void 0,
                this.xhrSetup = t &amp;&amp; t.xhrSetup || null,
                this.stats = new M,
                this.retryDelay = 0
            }
            var e = t.prototype;
            return e.destroy = function() {
                this.callbacks = null,
                this.abortInternal(),
                this.loader = null,
                this.config = null,
                this.context = null,
                this.xhrSetup = null
            }
            ,
            e.abortInternal = function() {
                var t = this.loader;
                self.clearTimeout(this.requestTimeout),
                self.clearTimeout(this.retryTimeout),
                t &amp;&amp; (t.onreadystatechange = null,
                t.onprogress = null,
                4 !== t.readyState &amp;&amp; (this.stats.aborted = !0,
                t.abort()))
            }
            ,
            e.abort = function() {
                var t;
                this.abortInternal(),
                null != (t = this.callbacks) &amp;&amp; t.onAbort &amp;&amp; this.callbacks.onAbort(this.stats, this.context, this.loader)
            }
            ,
            e.load = function(t, e, r) {
                if (this.stats.loading.start)
                    throw new Error(&quot;Loader can only be used once.&quot;);
                this.stats.loading.start = self.performance.now(),
                this.context = t,
                this.config = e,
                this.callbacks = r,
                this.loadInternal()
            }
            ,
            e.loadInternal = function() {
                var t = this
                  , e = this.config
                  , r = this.context;
                if (e &amp;&amp; r) {
                    var i = this.loader = new self.XMLHttpRequest
                      , n = this.stats;
                    n.loading.first = 0,
                    n.loaded = 0,
                    n.aborted = !1;
                    var a = this.xhrSetup;
                    a ? Promise.resolve().then((function() {
                        if (t.loader === i &amp;&amp; !t.stats.aborted)
                            return a(i, r.url)
                    }
                    )).catch((function(e) {
                        if (t.loader === i &amp;&amp; !t.stats.aborted)
                            return i.open(&quot;GET&quot;, r.url, !0),
                            a(i, r.url)
                    }
                    )).then((function() {
                        t.loader !== i || t.stats.aborted || t.openAndSendXhr(i, r, e)
                    }
                    )).catch((function(e) {
                        t.callbacks.onError({
                            code: i.status,
                            text: e.message
                        }, r, i, n)
                    }
                    )) : this.openAndSendXhr(i, r, e)
                }
            }
            ,
            e.openAndSendXhr = function(t, e, r) {
                t.readyState || t.open(&quot;GET&quot;, e.url, !0);
                var i = e.headers
                  , n = r.loadPolicy
                  , a = n.maxTimeToFirstByteMs
                  , s = n.maxLoadTimeMs;
                if (i)
                    for (var o in i)
                        t.setRequestHeader(o, i[o]);
                e.rangeEnd &amp;&amp; t.setRequestHeader(&quot;Range&quot;, &quot;bytes=&quot; + e.rangeStart + &quot;-&quot; + (e.rangeEnd - 1)),
                t.onreadystatechange = this.readystatechange.bind(this),
                t.onprogress = this.loadprogress.bind(this),
                t.responseType = e.responseType,
                self.clearTimeout(this.requestTimeout),
                r.timeout = a &amp;&amp; y(a) ? a : s,
                this.requestTimeout = self.setTimeout(this.loadtimeout.bind(this), r.timeout),
                t.send()
            }
            ,
            e.readystatechange = function() {
                var t = this.context
                  , e = this.loader
                  , r = this.stats;
                if (t &amp;&amp; e) {
                    var i = e.readyState
                      , n = this.config;
                    if (!r.aborted &amp;&amp; i &gt;= 2 &amp;&amp; (0 === r.loading.first &amp;&amp; (r.loading.first = Math.max(self.performance.now(), r.loading.start),
                    n.timeout !== n.loadPolicy.maxLoadTimeMs &amp;&amp; (self.clearTimeout(this.requestTimeout),
                    n.timeout = n.loadPolicy.maxLoadTimeMs,
                    this.requestTimeout = self.setTimeout(this.loadtimeout.bind(this), n.loadPolicy.maxLoadTimeMs - (r.loading.first - r.loading.start)))),
                    4 === i)) {
                        self.clearTimeout(this.requestTimeout),
                        e.onreadystatechange = null,
                        e.onprogress = null;
                        var a = e.status
                          , s = &quot;text&quot; !== e.responseType;
                        if (a &gt;= 200 &amp;&amp; a &lt; 300 &amp;&amp; (s &amp;&amp; e.response || null !== e.responseText)) {
                            r.loading.end = Math.max(self.performance.now(), r.loading.first);
                            var o = s ? e.response : e.responseText
                              , l = &quot;arraybuffer&quot; === e.responseType ? o.byteLength : o.length;
                            if (r.loaded = r.total = l,
                            r.bwEstimate = 8e3 * r.total / (r.loading.end - r.loading.first),
                            !this.callbacks)
                                return;
                            var u = this.callbacks.onProgress;
                            if (u &amp;&amp; u(r, t, o, e),
                            !this.callbacks)
                                return;
                            var h = {
                                url: e.responseURL,
                                data: o,
                                code: a
                            };
                            this.callbacks.onSuccess(h, r, t, e)
                        } else {
                            var d = n.loadPolicy.errorRetry;
                            mr(d, r.retry, !1, {
                                url: t.url,
                                data: void 0,
                                code: a
                            }) ? this.retry(d) : (w.error(a + &quot; while loading &quot; + t.url),
                            this.callbacks.onError({
                                code: a,
                                text: e.statusText
                            }, t, e, r))
                        }
                    }
                }
            }
            ,
            e.loadtimeout = function() {
                if (this.config) {
                    var t = this.config.loadPolicy.timeoutRetry;
                    if (mr(t, this.stats.retry, !0))
                        this.retry(t);
                    else {
                        var e;
                        w.warn(&quot;timeout while loading &quot; + (null == (e = this.context) ? void 0 : e.url));
                        var r = this.callbacks;
                        r &amp;&amp; (this.abortInternal(),
                        r.onTimeout(this.stats, this.context, this.loader))
                    }
                }
            }
            ,
            e.retry = function(t) {
                var e = this.context
                  , r = this.stats;
                this.retryDelay = gr(t, r.retry),
                r.retry++,
                w.warn((status ? &quot;HTTP Status &quot; + status : &quot;Timeout&quot;) + &quot; while loading &quot; + (null == e ? void 0 : e.url) + &quot;, retrying &quot; + r.retry + &quot;/&quot; + t.maxNumRetry + &quot; in &quot; + this.retryDelay + &quot;ms&quot;),
                this.abortInternal(),
                this.loader = null,
                self.clearTimeout(this.retryTimeout),
                this.retryTimeout = self.setTimeout(this.loadInternal.bind(this), this.retryDelay)
            }
            ,
            e.loadprogress = function(t) {
                var e = this.stats;
                e.loaded = t.loaded,
                t.lengthComputable &amp;&amp; (e.total = t.total)
            }
            ,
            e.getCacheAge = function() {
                var t = null;
                if (this.loader &amp;&amp; Vs.test(this.loader.getAllResponseHeaders())) {
                    var e = this.loader.getResponseHeader(&quot;age&quot;);
                    t = e ? parseFloat(e) : null
                }
                return t
            }
            ,
            e.getResponseHeader = function(t) {
                return this.loader &amp;&amp; new RegExp(&quot;^&quot; + t + &quot;:\\s*[\\d.]+\\s*$&quot;,&quot;im&quot;).test(this.loader.getAllResponseHeaders()) ? this.loader.getResponseHeader(t) : null
            }
            ,
            t
        }()
          , Ws = /(\d+)-(\d+)\/(\d+)/
          , js = function() {
            function t(t) {
                this.fetchSetup = void 0,
                this.requestTimeout = void 0,
                this.request = null,
                this.response = null,
                this.controller = void 0,
                this.context = null,
                this.config = null,
                this.callbacks = null,
                this.stats = void 0,
                this.loader = null,
                this.fetchSetup = t.fetchSetup || qs,
                this.controller = new self.AbortController,
                this.stats = new M
            }
            var e = t.prototype;
            return e.destroy = function() {
                this.loader = this.callbacks = this.context = this.config = this.request = null,
                this.abortInternal(),
                this.response = null,
                this.fetchSetup = this.controller = this.stats = null
            }
            ,
            e.abortInternal = function() {
                this.controller &amp;&amp; !this.stats.loading.end &amp;&amp; (this.stats.aborted = !0,
                this.controller.abort())
            }
            ,
            e.abort = function() {
                var t;
                this.abortInternal(),
                null != (t = this.callbacks) &amp;&amp; t.onAbort &amp;&amp; this.callbacks.onAbort(this.stats, this.context, this.response)
            }
            ,
            e.load = function(t, e, r) {
                var i = this
                  , n = this.stats;
                if (n.loading.start)
                    throw new Error(&quot;Loader can only be used once.&quot;);
                n.loading.start = self.performance.now();
                var a = function(t, e) {
                    var r = {
                        method: &quot;GET&quot;,
                        mode: &quot;cors&quot;,
                        credentials: &quot;same-origin&quot;,
                        signal: e,
                        headers: new self.Headers(o({}, t.headers))
                    };
                    return t.rangeEnd &amp;&amp; r.headers.set(&quot;Range&quot;, &quot;bytes=&quot; + t.rangeStart + &quot;-&quot; + String(t.rangeEnd - 1)),
                    r
                }(t, this.controller.signal)
                  , s = r.onProgress
                  , l = &quot;arraybuffer&quot; === t.responseType
                  , u = l ? &quot;byteLength&quot; : &quot;length&quot;
                  , h = e.loadPolicy
                  , d = h.maxTimeToFirstByteMs
                  , c = h.maxLoadTimeMs;
                this.context = t,
                this.config = e,
                this.callbacks = r,
                this.request = this.fetchSetup(t, a),
                self.clearTimeout(this.requestTimeout),
                e.timeout = d &amp;&amp; y(d) ? d : c,
                this.requestTimeout = self.setTimeout((function() {
                    i.abortInternal(),
                    r.onTimeout(n, t, i.response)
                }
                ), e.timeout),
                self.fetch(this.request).then((function(a) {
                    i.response = i.loader = a;
                    var o = Math.max(self.performance.now(), n.loading.start);
                    if (self.clearTimeout(i.requestTimeout),
                    e.timeout = c,
                    i.requestTimeout = self.setTimeout((function() {
                        i.abortInternal(),
                        r.onTimeout(n, t, i.response)
                    }
                    ), c - (o - n.loading.start)),
                    !a.ok) {
                        var u = a.status
                          , h = a.statusText;
                        throw new zs(h || &quot;fetch, bad network response&quot;,u,a)
                    }
                    return n.loading.first = o,
                    n.total = function(t) {
                        var e = t.get(&quot;Content-Range&quot;);
                        if (e) {
                            var r = function(t) {
                                var e = Ws.exec(t);
                                if (e)
                                    return parseInt(e[2]) - parseInt(e[1]) + 1
                            }(e);
                            if (y(r))
                                return r
                        }
                        var i = t.get(&quot;Content-Length&quot;);
                        if (i)
                            return parseInt(i)
                    }(a.headers) || n.total,
                    s &amp;&amp; y(e.highWaterMark) ? i.loadProgressively(a, n, t, e.highWaterMark, s) : l ? a.arrayBuffer() : &quot;json&quot; === t.responseType ? a.json() : a.text()
                }
                )).then((function(a) {
                    var o = i.response;
                    if (!o)
                        throw new Error(&quot;loader destroyed&quot;);
                    self.clearTimeout(i.requestTimeout),
                    n.loading.end = Math.max(self.performance.now(), n.loading.first);
                    var l = a[u];
                    l &amp;&amp; (n.loaded = n.total = l);
                    var h = {
                        url: o.url,
                        data: a,
                        code: o.status
                    };
                    s &amp;&amp; !y(e.highWaterMark) &amp;&amp; s(n, t, a, o),
                    r.onSuccess(h, n, t, o)
                }
                )).catch((function(e) {
                    if (self.clearTimeout(i.requestTimeout),
                    !n.aborted) {
                        var a = e &amp;&amp; e.code || 0
                          , s = e ? e.message : null;
                        r.onError({
                            code: a,
                            text: s
                        }, t, e ? e.details : null, n)
                    }
                }
                ))
            }
            ,
            e.getCacheAge = function() {
                var t = null;
                if (this.response) {
                    var e = this.response.headers.get(&quot;age&quot;);
                    t = e ? parseFloat(e) : null
                }
                return t
            }
            ,
            e.getResponseHeader = function(t) {
                return this.response ? this.response.headers.get(t) : null
            }
            ,
            e.loadProgressively = function(t, e, r, i, n) {
                void 0 === i &amp;&amp; (i = 0);
                var a = new Di
                  , s = t.body.getReader();
                return function o() {
                    return s.read().then((function(s) {
                        if (s.done)
                            return a.dataLength &amp;&amp; n(e, r, a.flush(), t),
                            Promise.resolve(new ArrayBuffer(0));
                        var l = s.value
                          , u = l.length;
                        return e.loaded += u,
                        u &lt; i || a.dataLength ? (a.push(l),
                        a.dataLength &gt;= i &amp;&amp; n(e, r, a.flush(), t)) : n(e, r, l, t),
                        o()
                    }
                    )).catch((function() {
                        return Promise.reject()
                    }
                    ))
                }()
            }
            ,
            t
        }();
        function qs(t, e) {
            return new self.Request(t.url,e)
        }
        var Xs, zs = function(t) {
            function e(e, r, i) {
                var n;
                return (n = t.call(this, e) || this).code = void 0,
                n.details = void 0,
                n.code = r,
                n.details = i,
                n
            }
            return l(e, t),
            e
        }(c(Error)), Qs = /\s/, Js = i(i({
            autoStartLoad: !0,
            startPosition: -1,
            defaultAudioCodec: void 0,
            debug: !1,
            capLevelOnFPSDrop: !1,
            capLevelToPlayerSize: !1,
            ignoreDevicePixelRatio: !1,
            preferManagedMediaSource: !0,
            initialLiveManifestSize: 1,
            maxBufferLength: 30,
            backBufferLength: 1 / 0,
            frontBufferFlushThreshold: 1 / 0,
            maxBufferSize: 6e7,
            maxBufferHole: .1,
            highBufferWatchdogPeriod: 2,
            nudgeOffset: .1,
            nudgeMaxRetry: 3,
            maxFragLookUpTolerance: .25,
            liveSyncDurationCount: 3,
            liveMaxLatencyDurationCount: 1 / 0,
            liveSyncDuration: void 0,
            liveMaxLatencyDuration: void 0,
            maxLiveSyncPlaybackRate: 1,
            liveDurationInfinity: !1,
            liveBackBufferLength: null,
            maxMaxBufferLength: 600,
            enableWorker: !0,
            workerPath: null,
            enableSoftwareAES: !0,
            startLevel: void 0,
            startFragPrefetch: !1,
            fpsDroppedMonitoringPeriod: 5e3,
            fpsDroppedMonitoringThreshold: .2,
            appendErrorMaxRetry: 3,
            loader: Ys,
            fLoader: void 0,
            pLoader: void 0,
            xhrSetup: void 0,
            licenseXhrSetup: void 0,
            licenseResponseCallback: void 0,
            abrController: Kr,
            bufferController: Zn,
            capLevelController: za,
            errorController: Ir,
            fpsController: Qa,
            stretchShortVideoTrack: !1,
            maxAudioFramesDrift: 1,
            forceKeyFrameOnDiscontinuity: !0,
            abrEwmaFastLive: 3,
            abrEwmaSlowLive: 9,
            abrEwmaFastVoD: 3,
            abrEwmaSlowVoD: 9,
            abrEwmaDefaultEstimate: 5e5,
            abrEwmaDefaultEstimateMax: 5e6,
            abrBandWidthFactor: .95,
            abrBandWidthUpFactor: .7,
            abrMaxWithRealBitrate: !1,
            maxStarvationDelay: 4,
            maxLoadingDelay: 4,
            minAutoBitrate: 0,
            emeEnabled: !1,
            widevineLicenseUrl: void 0,
            drmSystems: {},
            drmSystemOptions: {},
            requestMediaKeySystemAccessFunc: it,
            testBandwidth: !0,
            progressive: !1,
            lowLatencyMode: !0,
            cmcd: void 0,
            enableDateRangeMetadataCues: !0,
            enableEmsgMetadataCues: !0,
            enableID3MetadataCues: !0,
            useMediaCapabilities: !0,
            certLoadPolicy: {
                default: {
                    maxTimeToFirstByteMs: 8e3,
                    maxLoadTimeMs: 2e4,
                    timeoutRetry: null,
                    errorRetry: null
                }
            },
            keyLoadPolicy: {
                default: {
                    maxTimeToFirstByteMs: 8e3,
                    maxLoadTimeMs: 2e4,
                    timeoutRetry: {
                        maxNumRetry: 1,
                        retryDelayMs: 1e3,
                        maxRetryDelayMs: 2e4,
                        backoff: &quot;linear&quot;
                    },
                    errorRetry: {
                        maxNumRetry: 8,
                        retryDelayMs: 1e3,
                        maxRetryDelayMs: 2e4,
                        backoff: &quot;linear&quot;
                    }
                }
            },
            manifestLoadPolicy: {
                default: {
                    maxTimeToFirstByteMs: 1 / 0,
                    maxLoadTimeMs: 2e4,
                    timeoutRetry: {
                        maxNumRetry: 2,
                        retryDelayMs: 0,
                        maxRetryDelayMs: 0
                    },
                    errorRetry: {
                        maxNumRetry: 1,
                        retryDelayMs: 1e3,
                        maxRetryDelayMs: 8e3
                    }
                }
            },
            playlistLoadPolicy: {
                default: {
                    maxTimeToFirstByteMs: 1e4,
                    maxLoadTimeMs: 2e4,
                    timeoutRetry: {
                        maxNumRetry: 2,
                        retryDelayMs: 0,
                        maxRetryDelayMs: 0
                    },
                    errorRetry: {
                        maxNumRetry: 2,
                        retryDelayMs: 1e3,
                        maxRetryDelayMs: 8e3
                    }
                }
            },
            fragLoadPolicy: {
                default: {
                    maxTimeToFirstByteMs: 1e4,
                    maxLoadTimeMs: 12e4,
                    timeoutRetry: {
                        maxNumRetry: 4,
                        retryDelayMs: 0,
                        maxRetryDelayMs: 0
                    },
                    errorRetry: {
                        maxNumRetry: 6,
                        retryDelayMs: 1e3,
                        maxRetryDelayMs: 8e3
                    }
                }
            },
            steeringManifestLoadPolicy: {
                default: {
                    maxTimeToFirstByteMs: 1e4,
                    maxLoadTimeMs: 2e4,
                    timeoutRetry: {
                        maxNumRetry: 2,
                        retryDelayMs: 0,
                        maxRetryDelayMs: 0
                    },
                    errorRetry: {
                        maxNumRetry: 1,
                        retryDelayMs: 1e3,
                        maxRetryDelayMs: 8e3
                    }
                }
            },
            manifestLoadingTimeOut: 1e4,
            manifestLoadingMaxRetry: 1,
            manifestLoadingRetryDelay: 1e3,
            manifestLoadingMaxRetryTimeout: 64e3,
            levelLoadingTimeOut: 1e4,
            levelLoadingMaxRetry: 4,
            levelLoadingRetryDelay: 1e3,
            levelLoadingMaxRetryTimeout: 64e3,
            fragLoadingTimeOut: 2e4,
            fragLoadingMaxRetry: 6,
            fragLoadingRetryDelay: 1e3,
            fragLoadingMaxRetryTimeout: 64e3
        }, {
            cueHandler: {
                newCue: function(t, e, r, i) {
                    for (var n, a, s, o, l, u = [], h = self.VTTCue || self.TextTrackCue, d = 0; d &lt; i.rows.length; d++)
                        if (s = !0,
                        o = 0,
                        l = &quot;&quot;,
                        !(n = i.rows[d]).isEmpty()) {
                            for (var c, f = 0; f &lt; n.chars.length; f++)
                                Qs.test(n.chars[f].uchar) &amp;&amp; s ? o++ : (l += n.chars[f].uchar,
                                s = !1);
                            n.cueStartTime = e,
                            e === r &amp;&amp; (r += 1e-4),
                            o &gt;= 16 ? o-- : o++;
                            var g = Ia(l.trim())
                              , v = Pa(e, r, g);
                            null != t &amp;&amp; null != (c = t.cues) &amp;&amp; c.getCueById(v) || ((a = new h(e,r,g)).id = v,
                            a.line = d + 1,
                            a.align = &quot;left&quot;,
                            a.position = 10 + Math.min(80, 10 * Math.floor(8 * o / 32)),
                            u.push(a))
                        }
                    return t &amp;&amp; u.length &amp;&amp; (u.sort((function(t, e) {
                        return &quot;auto&quot; === t.line || &quot;auto&quot; === e.line ? 0 : t.line &gt; 8 &amp;&amp; e.line &gt; 8 ? e.line - t.line : t.line - e.line
                    }
                    )),
                    u.forEach((function(e) {
                        return Oe(t, e)
                    }
                    ))),
                    u
                }
            },
            enableWebVTT: !0,
            enableIMSC1: !0,
            enableCEA708Captions: !0,
            captionsTextTrack1Label: &quot;English&quot;,
            captionsTextTrack1LanguageCode: &quot;en&quot;,
            captionsTextTrack2Label: &quot;Spanish&quot;,
            captionsTextTrack2LanguageCode: &quot;es&quot;,
            captionsTextTrack3Label: &quot;Unknown CC&quot;,
            captionsTextTrack3LanguageCode: &quot;&quot;,
            captionsTextTrack4Label: &quot;Unknown CC&quot;,
            captionsTextTrack4LanguageCode: &quot;&quot;,
            renderTextTracksNatively: !0
        }), {}, {
            subtitleStreamController: Xn,
            subtitleTrackController: Qn,
            timelineController: ja,
            audioStreamController: jn,
            audioTrackController: qn,
            emeController: $a,
            cmcdController: Bs,
            contentSteeringController: Gs
        });
        function $s(t) {
            return t &amp;&amp; &quot;object&quot; == typeof t ? Array.isArray(t) ? t.map($s) : Object.keys(t).reduce((function(e, r) {
                return e[r] = $s(t[r]),
                e
            }
            ), {}) : t
        }
        function Zs(t) {
            var e = t.loader;
            e !== js &amp;&amp; e !== Ys ? (w.log(&quot;[config]: Custom loader detected, cannot enable progressive streaming&quot;),
            t.progressive = !1) : function() {
                if (self.fetch &amp;&amp; self.AbortController &amp;&amp; self.ReadableStream &amp;&amp; self.Request)
                    try {
                        return new self.ReadableStream({}),
                        !0
                    } catch (t) {}
                return !1
            }() &amp;&amp; (t.loader = js,
            t.progressive = !0,
            t.enableSoftwareAES = !0,
            w.log(&quot;[config]: Progressive streaming enabled, using FetchLoader&quot;))
        }
        var to = function(t) {
            function e(e, r) {
                var i;
                return (i = t.call(this, e, &quot;[level-controller]&quot;) || this)._levels = [],
                i._firstLevel = -1,
                i._maxAutoLevel = -1,
                i._startLevel = void 0,
                i.currentLevel = null,
                i.currentLevelIndex = -1,
                i.manualLevelIndex = -1,
                i.steering = void 0,
                i.onParsedComplete = void 0,
                i.steering = r,
                i._registerListeners(),
                i
            }
            l(e, t);
            var r = e.prototype;
            return r._registerListeners = function() {
                var t = this.hls;
                t.on(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.on(S.MANIFEST_LOADED, this.onManifestLoaded, this),
                t.on(S.LEVEL_LOADED, this.onLevelLoaded, this),
                t.on(S.LEVELS_UPDATED, this.onLevelsUpdated, this),
                t.on(S.FRAG_BUFFERED, this.onFragBuffered, this),
                t.on(S.ERROR, this.onError, this)
            }
            ,
            r._unregisterListeners = function() {
                var t = this.hls;
                t.off(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.off(S.MANIFEST_LOADED, this.onManifestLoaded, this),
                t.off(S.LEVEL_LOADED, this.onLevelLoaded, this),
                t.off(S.LEVELS_UPDATED, this.onLevelsUpdated, this),
                t.off(S.FRAG_BUFFERED, this.onFragBuffered, this),
                t.off(S.ERROR, this.onError, this)
            }
            ,
            r.destroy = function() {
                this._unregisterListeners(),
                this.steering = null,
                this.resetLevels(),
                t.prototype.destroy.call(this)
            }
            ,
            r.stopLoad = function() {
                this._levels.forEach((function(t) {
                    t.loadError = 0,
                    t.fragmentError = 0
                }
                )),
                t.prototype.stopLoad.call(this)
            }
            ,
            r.resetLevels = function() {
                this._startLevel = void 0,
                this.manualLevelIndex = -1,
                this.currentLevelIndex = -1,
                this.currentLevel = null,
                this._levels = [],
                this._maxAutoLevel = -1
            }
            ,
            r.onManifestLoading = function(t, e) {
                this.resetLevels()
            }
            ,
            r.onManifestLoaded = function(t, e) {
                var r = this.hls.config.preferManagedMediaSource
                  , i = []
                  , n = {}
                  , a = {}
                  , s = !1
                  , o = !1
                  , l = !1;
                e.levels.forEach((function(t) {
                    var e, u, h = t.attrs, d = t.audioCodec, c = t.videoCodec;
                    -1 !== (null == (e = d) ? void 0 : e.indexOf(&quot;mp4a.40.34&quot;)) &amp;&amp; (Xs || (Xs = /chrome|firefox/i.test(navigator.userAgent)),
                    Xs &amp;&amp; (t.audioCodec = d = void 0)),
                    d &amp;&amp; (t.audioCodec = d = he(d, r)),
                    0 === (null == (u = c) ? void 0 : u.indexOf(&quot;avc1&quot;)) &amp;&amp; (c = t.videoCodec = function(t) {
                        var e = t.split(&quot;.&quot;);
                        if (e.length &gt; 2) {
                            var r = e.shift() + &quot;.&quot;;
                            return (r += parseInt(e.shift()).toString(16)) + (&quot;000&quot; + parseInt(e.shift()).toString(16)).slice(-4)
                        }
                        return t
                    }(c));
                    var f = t.width
                      , g = t.height
                      , v = t.unknownCodecs;
                    if (s || (s = !(!f || !g)),
                    o || (o = !!c),
                    l || (l = !!d),
                    !(null != v &amp;&amp; v.length || d &amp;&amp; !ie(d, &quot;audio&quot;, r) || c &amp;&amp; !ie(c, &quot;video&quot;, r))) {
                        var m = h.CODECS
                          , p = h[&quot;FRAME-RATE&quot;]
                          , y = h[&quot;HDCP-LEVEL&quot;]
                          , E = h[&quot;PATHWAY-ID&quot;]
                          , T = h.RESOLUTION
                          , S = h[&quot;VIDEO-RANGE&quot;]
                          , L = (E || &quot;.&quot;) + &quot;-&quot; + t.bitrate + &quot;-&quot; + T + &quot;-&quot; + p + &quot;-&quot; + m + &quot;-&quot; + S + &quot;-&quot; + y;
                        if (n[L])
                            if (n[L].uri === t.url || t.attrs[&quot;PATHWAY-ID&quot;])
                                n[L].addGroupId(&quot;audio&quot;, h.AUDIO),
                                n[L].addGroupId(&quot;text&quot;, h.SUBTITLES);
                            else {
                                var A = a[L] += 1;
                                t.attrs[&quot;PATHWAY-ID&quot;] = new Array(A + 1).join(&quot;.&quot;);
                                var R = new rr(t);
                                n[L] = R,
                                i.push(R)
                            }
                        else {
                            var k = new rr(t);
                            n[L] = k,
                            a[L] = 1,
                            i.push(k)
                        }
                    }
                }
                )),
                this.filterAndSortMediaOptions(i, e, s, o, l)
            }
            ,
            r.filterAndSortMediaOptions = function(t, e, r, i, n) {
                var a = this
                  , s = []
                  , o = []
                  , l = t;
                if ((r || i) &amp;&amp; n &amp;&amp; (l = l.filter((function(t) {
                    var e, r = t.videoCodec, i = t.videoRange, n = t.width, a = t.height;
                    return (!!r || !(!n || !a)) &amp;&amp; !!(e = i) &amp;&amp; Qe.indexOf(e) &gt; -1
                }
                ))),
                0 !== l.length) {
                    if (e.audioTracks) {
                        var u = this.hls.config.preferManagedMediaSource;
                        eo(s = e.audioTracks.filter((function(t) {
                            return !t.audioCodec || ie(t.audioCodec, &quot;audio&quot;, u)
                        }
                        )))
                    }
                    e.subtitles &amp;&amp; eo(o = e.subtitles);
                    var h = l.slice(0);
                    l.sort((function(t, e) {
                        if (t.attrs[&quot;HDCP-LEVEL&quot;] !== e.attrs[&quot;HDCP-LEVEL&quot;])
                            return (t.attrs[&quot;HDCP-LEVEL&quot;] || &quot;&quot;) &gt; (e.attrs[&quot;HDCP-LEVEL&quot;] || &quot;&quot;) ? 1 : -1;
                        if (r &amp;&amp; t.height !== e.height)
                            return t.height - e.height;
                        if (t.frameRate !== e.frameRate)
                            return t.frameRate - e.frameRate;
                        if (t.videoRange !== e.videoRange)
                            return Qe.indexOf(t.videoRange) - Qe.indexOf(e.videoRange);
                        if (t.videoCodec !== e.videoCodec) {
                            var i = se(t.videoCodec)
                              , n = se(e.videoCodec);
                            if (i !== n)
                                return n - i
                        }
                        if (t.uri === e.uri &amp;&amp; t.codecSet !== e.codecSet) {
                            var a = oe(t.codecSet)
                              , s = oe(e.codecSet);
                            if (a !== s)
                                return s - a
                        }
                        return t.averageBitrate !== e.averageBitrate ? t.averageBitrate - e.averageBitrate : 0
                    }
                    ));
                    var d = h[0];
                    if (this.steering &amp;&amp; (l = this.steering.filterParsedLevels(l)).length !== h.length)
                        for (var c = 0; c &lt; h.length; c++)
                            if (h[c].pathwayId === l[0].pathwayId) {
                                d = h[c];
                                break
                            }
                    this._levels = l;
                    for (var f = 0; f &lt; l.length; f++)
                        if (l[f] === d) {
                            var g;
                            this._firstLevel = f;
                            var v = d.bitrate
                              , m = this.hls.bandwidthEstimate;
                            if (this.log(&quot;manifest loaded, &quot; + l.length + &quot; level(s) found, first bitrate: &quot; + v),
                            void 0 === (null == (g = this.hls.userConfig) ? void 0 : g.abrEwmaDefaultEstimate)) {
                                var p = Math.min(v, this.hls.config.abrEwmaDefaultEstimateMax);
                                p &gt; m &amp;&amp; m === Js.abrEwmaDefaultEstimate &amp;&amp; (this.hls.bandwidthEstimate = p)
                            }
                            break
                        }
                    var y = n &amp;&amp; !i
                      , E = {
                        levels: l,
                        audioTracks: s,
                        subtitleTracks: o,
                        sessionData: e.sessionData,
                        sessionKeys: e.sessionKeys,
                        firstLevel: this._firstLevel,
                        stats: e.stats,
                        audio: n,
                        video: i,
                        altAudio: !y &amp;&amp; s.some((function(t) {
                            return !!t.url
                        }
                        ))
                    };
                    this.hls.trigger(S.MANIFEST_PARSED, E),
                    (this.hls.config.autoStartLoad || this.hls.forceStartLoad) &amp;&amp; this.hls.startLoad(this.hls.config.startPosition)
                } else
                    Promise.resolve().then((function() {
                        if (a.hls) {
                            e.levels.length &amp;&amp; a.warn(&quot;One or more CODECS in variant not supported: &quot; + JSON.stringify(e.levels[0].attrs));
                            var t = new Error(&quot;no level with compatible codecs found in manifest&quot;);
                            a.hls.trigger(S.ERROR, {
                                type: L.MEDIA_ERROR,
                                details: A.MANIFEST_INCOMPATIBLE_CODECS_ERROR,
                                fatal: !0,
                                url: e.url,
                                error: t,
                                reason: t.message
                            })
                        }
                    }
                    ))
            }
            ,
            r.onError = function(t, e) {
                !e.fatal &amp;&amp; e.context &amp;&amp; e.context.type === be &amp;&amp; e.context.level === this.level &amp;&amp; this.checkRetry(e)
            }
            ,
            r.onFragBuffered = function(t, e) {
                var r = e.frag;
                if (void 0 !== r &amp;&amp; r.type === we) {
                    var i = r.elementaryStreams;
                    if (!Object.keys(i).some((function(t) {
                        return !!i[t]
                    }
                    )))
                        return;
                    var n = this._levels[r.level];
                    null != n &amp;&amp; n.loadError &amp;&amp; (this.log(&quot;Resetting level error count of &quot; + n.loadError + &quot; on frag buffered&quot;),
                    n.loadError = 0)
                }
            }
            ,
            r.onLevelLoaded = function(t, e) {
                var r, i, n = e.level, a = e.details, s = this._levels[n];
                if (!s)
                    return this.warn(&quot;Invalid level index &quot; + n),
                    void (null != (i = e.deliveryDirectives) &amp;&amp; i.skip &amp;&amp; (a.deltaUpdateFailed = !0));
                n === this.currentLevelIndex ? (0 === s.fragmentError &amp;&amp; (s.loadError = 0),
                this.playlistLoaded(n, e, s.details)) : null != (r = e.deliveryDirectives) &amp;&amp; r.skip &amp;&amp; (a.deltaUpdateFailed = !0)
            }
            ,
            r.loadPlaylist = function(e) {
                t.prototype.loadPlaylist.call(this);
                var r = this.currentLevelIndex
                  , i = this.currentLevel;
                if (i &amp;&amp; this.shouldLoadPlaylist(i)) {
                    var n = i.uri;
                    if (e)
                        try {
                            n = e.addDirectives(n)
                        } catch (t) {
                            this.warn(&quot;Could not construct new URL with HLS Delivery Directives: &quot; + t)
                        }
                    var a = i.attrs[&quot;PATHWAY-ID&quot;];
                    this.log(&quot;Loading level index &quot; + r + (void 0 !== (null == e ? void 0 : e.msn) ? &quot; at sn &quot; + e.msn + &quot; part &quot; + e.part : &quot;&quot;) + &quot; with&quot; + (a ? &quot; Pathway &quot; + a : &quot;&quot;) + &quot; &quot; + n),
                    this.clearTimer(),
                    this.hls.trigger(S.LEVEL_LOADING, {
                        url: n,
                        level: r,
                        pathwayId: i.attrs[&quot;PATHWAY-ID&quot;],
                        id: 0,
                        deliveryDirectives: e || null
                    })
                }
            }
            ,
            r.removeLevel = function(t) {
                var e, r = this, i = this._levels.filter((function(e, i) {
                    return i !== t || (r.steering &amp;&amp; r.steering.removeLevel(e),
                    e === r.currentLevel &amp;&amp; (r.currentLevel = null,
                    r.currentLevelIndex = -1,
                    e.details &amp;&amp; e.details.fragments.forEach((function(t) {
                        return t.level = -1
                    }
                    ))),
                    !1)
                }
                ));
                dr(i),
                this._levels = i,
                this.currentLevelIndex &gt; -1 &amp;&amp; null != (e = this.currentLevel) &amp;&amp; e.details &amp;&amp; (this.currentLevelIndex = this.currentLevel.details.fragments[0].level),
                this.hls.trigger(S.LEVELS_UPDATED, {
                    levels: i
                })
            }
            ,
            r.onLevelsUpdated = function(t, e) {
                var r = e.levels;
                this._levels = r
            }
            ,
            r.checkMaxAutoUpdated = function() {
                var t = this.hls
                  , e = t.autoLevelCapping
                  , r = t.maxAutoLevel
                  , i = t.maxHdcpLevel;
                this._maxAutoLevel !== r &amp;&amp; (this._maxAutoLevel = r,
                this.hls.trigger(S.MAX_AUTO_LEVEL_UPDATED, {
                    autoLevelCapping: e,
                    levels: this.levels,
                    maxAutoLevel: r,
                    minAutoLevel: this.hls.minAutoLevel,
                    maxHdcpLevel: i
                }))
            }
            ,
            s(e, [{
                key: &quot;levels&quot;,
                get: function() {
                    return 0 === this._levels.length ? null : this._levels
                }
            }, {
                key: &quot;level&quot;,
                get: function() {
                    return this.currentLevelIndex
                },
                set: function(t) {
                    var e = this._levels;
                    if (0 !== e.length) {
                        if (t &lt; 0 || t &gt;= e.length) {
                            var r = new Error(&quot;invalid level idx&quot;)
                              , i = t &lt; 0;
                            if (this.hls.trigger(S.ERROR, {
                                type: L.OTHER_ERROR,
                                details: A.LEVEL_SWITCH_ERROR,
                                level: t,
                                fatal: i,
                                error: r,
                                reason: r.message
                            }),
                            i)
                                return;
                            t = Math.min(t, e.length - 1)
                        }
                        var n = this.currentLevelIndex
                          , a = this.currentLevel
                          , s = a ? a.attrs[&quot;PATHWAY-ID&quot;] : void 0
                          , o = e[t]
                          , l = o.attrs[&quot;PATHWAY-ID&quot;];
                        if (this.currentLevelIndex = t,
                        this.currentLevel = o,
                        n !== t || !o.details || !a || s !== l) {
                            this.log(&quot;Switching to level &quot; + t + &quot; (&quot; + (o.height ? o.height + &quot;p &quot; : &quot;&quot;) + (o.videoRange ? o.videoRange + &quot; &quot; : &quot;&quot;) + (o.codecSet ? o.codecSet + &quot; &quot; : &quot;&quot;) + &quot;@&quot; + o.bitrate + &quot;)&quot; + (l ? &quot; with Pathway &quot; + l : &quot;&quot;) + &quot; from level &quot; + n + (s ? &quot; with Pathway &quot; + s : &quot;&quot;));
                            var u = {
                                level: t,
                                attrs: o.attrs,
                                details: o.details,
                                bitrate: o.bitrate,
                                averageBitrate: o.averageBitrate,
                                maxBitrate: o.maxBitrate,
                                realBitrate: o.realBitrate,
                                width: o.width,
                                height: o.height,
                                codecSet: o.codecSet,
                                audioCodec: o.audioCodec,
                                videoCodec: o.videoCodec,
                                audioGroups: o.audioGroups,
                                subtitleGroups: o.subtitleGroups,
                                loaded: o.loaded,
                                loadError: o.loadError,
                                fragmentError: o.fragmentError,
                                name: o.name,
                                id: o.id,
                                uri: o.uri,
                                url: o.url,
                                urlId: 0,
                                audioGroupIds: o.audioGroupIds,
                                textGroupIds: o.textGroupIds
                            };
                            this.hls.trigger(S.LEVEL_SWITCHING, u);
                            var h = o.details;
                            if (!h || h.live) {
                                var d = this.switchParams(o.uri, null == a ? void 0 : a.details, h);
                                this.loadPlaylist(d)
                            }
                        }
                    }
                }
            }, {
                key: &quot;manualLevel&quot;,
                get: function() {
                    return this.manualLevelIndex
                },
                set: function(t) {
                    this.manualLevelIndex = t,
                    void 0 === this._startLevel &amp;&amp; (this._startLevel = t),
                    -1 !== t &amp;&amp; (this.level = t)
                }
            }, {
                key: &quot;firstLevel&quot;,
                get: function() {
                    return this._firstLevel
                },
                set: function(t) {
                    this._firstLevel = t
                }
            }, {
                key: &quot;startLevel&quot;,
                get: function() {
                    if (void 0 === this._startLevel) {
                        var t = this.hls.config.startLevel;
                        return void 0 !== t ? t : this.hls.firstAutoLevel
                    }
                    return this._startLevel
                },
                set: function(t) {
                    this._startLevel = t
                }
            }, {
                key: &quot;nextLoadLevel&quot;,
                get: function() {
                    return -1 !== this.manualLevelIndex ? this.manualLevelIndex : this.hls.nextAutoLevel
                },
                set: function(t) {
                    this.level = t,
                    -1 === this.manualLevelIndex &amp;&amp; (this.hls.nextAutoLevel = t)
                }
            }]),
            e
        }(wr);
        function eo(t) {
            var e = {};
            t.forEach((function(t) {
                var r = t.groupId || &quot;&quot;;
                t.id = e[r] = e[r] || 0,
                e[r]++
            }
            ))
        }
        var ro = function() {
            function t(t) {
                this.config = void 0,
                this.keyUriToKeyInfo = {},
                this.emeController = null,
                this.config = t
            }
            var e = t.prototype;
            return e.abort = function(t) {
                for (var e in this.keyUriToKeyInfo) {
                    var r = this.keyUriToKeyInfo[e].loader;
                    if (r) {
                        var i;
                        if (t &amp;&amp; t !== (null == (i = r.context) ? void 0 : i.frag.type))
                            return;
                        r.abort()
                    }
                }
            }
            ,
            e.detach = function() {
                for (var t in this.keyUriToKeyInfo) {
                    var e = this.keyUriToKeyInfo[t];
                    (e.mediaKeySessionContext || e.decryptdata.isCommonEncryption) &amp;&amp; delete this.keyUriToKeyInfo[t]
                }
            }
            ,
            e.destroy = function() {
                for (var t in this.detach(),
                this.keyUriToKeyInfo) {
                    var e = this.keyUriToKeyInfo[t].loader;
                    e &amp;&amp; e.destroy()
                }
                this.keyUriToKeyInfo = {}
            }
            ,
            e.createKeyLoadError = function(t, e, r, i, n) {
                return void 0 === e &amp;&amp; (e = A.KEY_LOAD_ERROR),
                new li({
                    type: L.NETWORK_ERROR,
                    details: e,
                    fatal: !1,
                    frag: t,
                    response: n,
                    error: r,
                    networkDetails: i
                })
            }
            ,
            e.loadClear = function(t, e) {
                var r = this;
                if (this.emeController &amp;&amp; this.config.emeEnabled)
                    for (var i = t.sn, n = t.cc, a = function() {
                        var t = e[s];
                        if (n &lt;= t.cc &amp;&amp; (&quot;initSegment&quot; === i || &quot;initSegment&quot; === t.sn || i &lt; t.sn))
                            return r.emeController.selectKeySystemFormat(t).then((function(e) {
                                t.setKeyFormat(e)
                            }
                            )),
                            1
                    }, s = 0; s &lt; e.length &amp;&amp; !a(); s++)
                        ;
            }
            ,
            e.load = function(t) {
                var e = this;
                return !t.decryptdata &amp;&amp; t.encrypted &amp;&amp; this.emeController ? this.emeController.selectKeySystemFormat(t).then((function(r) {
                    return e.loadInternal(t, r)
                }
                )) : this.loadInternal(t)
            }
            ,
            e.loadInternal = function(t, e) {
                var r, i;
                e &amp;&amp; t.setKeyFormat(e);
                var n = t.decryptdata;
                if (!n) {
                    var a = new Error(e ? &quot;Expected frag.decryptdata to be defined after setting format &quot; + e : &quot;Missing decryption data on fragment in onKeyLoading&quot;);
                    return Promise.reject(this.createKeyLoadError(t, A.KEY_LOAD_ERROR, a))
                }
                var s = n.uri;
                if (!s)
                    return Promise.reject(this.createKeyLoadError(t, A.KEY_LOAD_ERROR, new Error(&#39;Invalid key URI: &quot;&#39; + s + &#39;&quot;&#39;)));
                var o, l = this.keyUriToKeyInfo[s];
                if (null != (r = l) &amp;&amp; r.decryptdata.key)
                    return n.key = l.decryptdata.key,
                    Promise.resolve({
                        frag: t,
                        keyInfo: l
                    });
                if (null != (i = l) &amp;&amp; i.keyLoadPromise)
                    switch (null == (o = l.mediaKeySessionContext) ? void 0 : o.keyStatus) {
                    case void 0:
                    case &quot;status-pending&quot;:
                    case &quot;usable&quot;:
                    case &quot;usable-in-future&quot;:
                        return l.keyLoadPromise.then((function(e) {
                            return n.key = e.keyInfo.decryptdata.key,
                            {
                                frag: t,
                                keyInfo: l
                            }
                        }
                        ))
                    }
                switch (l = this.keyUriToKeyInfo[s] = {
                    decryptdata: n,
                    keyLoadPromise: null,
                    loader: null,
                    mediaKeySessionContext: null
                },
                n.method) {
                case &quot;ISO-23001-7&quot;:
                case &quot;SAMPLE-AES&quot;:
                case &quot;SAMPLE-AES-CENC&quot;:
                case &quot;SAMPLE-AES-CTR&quot;:
                    return &quot;identity&quot; === n.keyFormat ? this.loadKeyHTTP(l, t) : this.loadKeyEME(l, t);
                case &quot;AES-128&quot;:
                    return this.loadKeyHTTP(l, t);
                default:
                    return Promise.reject(this.createKeyLoadError(t, A.KEY_LOAD_ERROR, new Error(&#39;Key supplied with unsupported METHOD: &quot;&#39; + n.method + &#39;&quot;&#39;)))
                }
            }
            ,
            e.loadKeyEME = function(t, e) {
                var r = {
                    frag: e,
                    keyInfo: t
                };
                if (this.emeController &amp;&amp; this.config.emeEnabled) {
                    var i = this.emeController.loadKey(r);
                    if (i)
                        return (t.keyLoadPromise = i.then((function(e) {
                            return t.mediaKeySessionContext = e,
                            r
                        }
                        ))).catch((function(e) {
                            throw t.keyLoadPromise = null,
                            e
                        }
                        ))
                }
                return Promise.resolve(r)
            }
            ,
            e.loadKeyHTTP = function(t, e) {
                var r = this
                  , n = this.config
                  , a = new (0,
                n.loader)(n);
                return e.keyLoader = t.loader = a,
                t.keyLoadPromise = new Promise((function(s, o) {
                    var l = {
                        keyInfo: t,
                        frag: e,
                        responseType: &quot;arraybuffer&quot;,
                        url: t.decryptdata.uri
                    }
                      , u = n.keyLoadPolicy.default
                      , h = {
                        loadPolicy: u,
                        timeout: u.maxLoadTimeMs,
                        maxRetry: 0,
                        retryDelay: 0,
                        maxRetryDelay: 0
                    }
                      , d = {
                        onSuccess: function(t, e, i, n) {
                            var a = i.frag
                              , l = i.keyInfo
                              , u = i.url;
                            if (!a.decryptdata || l !== r.keyUriToKeyInfo[u])
                                return o(r.createKeyLoadError(a, A.KEY_LOAD_ERROR, new Error(&quot;after key load, decryptdata unset or changed&quot;), n));
                            l.decryptdata.key = a.decryptdata.key = new Uint8Array(t.data),
                            a.keyLoader = null,
                            l.loader = null,
                            s({
                                frag: a,
                                keyInfo: l
                            })
                        },
                        onError: function(t, n, a, s) {
                            r.resetLoader(n),
                            o(r.createKeyLoadError(e, A.KEY_LOAD_ERROR, new Error(&quot;HTTP Error &quot; + t.code + &quot; loading key &quot; + t.text), a, i({
                                url: l.url,
                                data: void 0
                            }, t)))
                        },
                        onTimeout: function(t, i, n) {
                            r.resetLoader(i),
                            o(r.createKeyLoadError(e, A.KEY_LOAD_TIMEOUT, new Error(&quot;key loading timed out&quot;), n))
                        },
                        onAbort: function(t, i, n) {
                            r.resetLoader(i),
                            o(r.createKeyLoadError(e, A.INTERNAL_ABORTED, new Error(&quot;key loading aborted&quot;), n))
                        }
                    };
                    a.load(l, h, d)
                }
                ))
            }
            ,
            e.resetLoader = function(t) {
                var e = t.frag
                  , r = t.keyInfo
                  , i = t.url
                  , n = r.loader;
                e.keyLoader === n &amp;&amp; (e.keyLoader = null,
                r.loader = null),
                delete this.keyUriToKeyInfo[i],
                n &amp;&amp; n.destroy()
            }
            ,
            t
        }();
        function io() {
            return self.SourceBuffer || self.WebKitSourceBuffer
        }
        function no() {
            if (!ee())
                return !1;
            var t = io();
            return !t || t.prototype &amp;&amp; &quot;function&quot; == typeof t.prototype.appendBuffer &amp;&amp; &quot;function&quot; == typeof t.prototype.remove
        }
        var ao = function() {
            function t(t, e, r, i) {
                this.config = void 0,
                this.media = null,
                this.fragmentTracker = void 0,
                this.hls = void 0,
                this.nudgeRetry = 0,
                this.stallReported = !1,
                this.stalled = null,
                this.moved = !1,
                this.seeking = !1,
                this.config = t,
                this.media = e,
                this.fragmentTracker = r,
                this.hls = i
            }
            var e = t.prototype;
            return e.destroy = function() {
                this.media = null,
                this.hls = this.fragmentTracker = null
            }
            ,
            e.poll = function(t, e) {
                var r = this.config
                  , i = this.media
                  , n = this.stalled;
                if (null !== i) {
                    var a = i.currentTime
                      , s = i.seeking
                      , o = this.seeking &amp;&amp; !s
                      , l = !this.seeking &amp;&amp; s;
                    if (this.seeking = s,
                    a === t)
                        if (l || o)
                            this.stalled = null;
                        else if (i.paused &amp;&amp; !s || i.ended || 0 === i.playbackRate || !Jr.getBuffered(i).length)
                            this.nudgeRetry = 0;
                        else {
                            var u = Jr.bufferInfo(i, a, 0)
                              , h = u.nextStart || 0;
                            if (s) {
                                var d = u.len &gt; 2
                                  , c = !h || e &amp;&amp; e.start &lt;= a || h - a &gt; 2 &amp;&amp; !this.fragmentTracker.getPartialFragment(a);
                                if (d || c)
                                    return;
                                this.moved = !1
                            }
                            if (!this.moved &amp;&amp; null !== this.stalled) {
                                var f;
                                if (!(u.len &gt; 0 || h))
                                    return;
                                var g = Math.max(h, u.start || 0) - a
                                  , v = this.hls.levels ? this.hls.levels[this.hls.currentLevel] : null
                                  , m = (null == v || null == (f = v.details) ? void 0 : f.live) ? 2 * v.details.targetduration : 2
                                  , p = this.fragmentTracker.getPartialFragment(a);
                                if (g &gt; 0 &amp;&amp; (g &lt;= m || p))
                                    return void (i.paused || this._trySkipBufferHole(p))
                            }
                            var y = self.performance.now();
                            if (null !== n) {
                                var E = y - n;
                                if (s || !(E &gt;= 250) || (this._reportStall(u),
                                this.media)) {
                                    var T = Jr.bufferInfo(i, a, r.maxBufferHole);
                                    this._tryFixBufferStall(T, E)
                                }
                            } else
                                this.stalled = y
                        }
                    else if (this.moved = !0,
                    s || (this.nudgeRetry = 0),
                    null !== n) {
                        if (this.stallReported) {
                            var S = self.performance.now() - n;
                            w.warn(&quot;playback not stuck anymore @&quot; + a + &quot;, after &quot; + Math.round(S) + &quot;ms&quot;),
                            this.stallReported = !1
                        }
                        this.stalled = null
                    }
                }
            }
            ,
            e._tryFixBufferStall = function(t, e) {
                var r = this.config
                  , i = this.fragmentTracker
                  , n = this.media;
                if (null !== n) {
                    var a = n.currentTime
                      , s = i.getPartialFragment(a);
                    if (s &amp;&amp; (this._trySkipBufferHole(s) || !this.media))
                        return;
                    (t.len &gt; r.maxBufferHole || t.nextStart &amp;&amp; t.nextStart - a &lt; r.maxBufferHole) &amp;&amp; e &gt; 1e3 * r.highBufferWatchdogPeriod &amp;&amp; (w.warn(&quot;Trying to nudge playhead over buffer-hole&quot;),
                    this.stalled = null,
                    this._tryNudgeBuffer())
                }
            }
            ,
            e._reportStall = function(t) {
                var e = this.hls
                  , r = this.media;
                if (!this.stallReported &amp;&amp; r) {
                    this.stallReported = !0;
                    var i = new Error(&quot;Playback stalling at @&quot; + r.currentTime + &quot; due to low buffer (&quot; + JSON.stringify(t) + &quot;)&quot;);
                    w.warn(i.message),
                    e.trigger(S.ERROR, {
                        type: L.MEDIA_ERROR,
                        details: A.BUFFER_STALLED_ERROR,
                        fatal: !1,
                        error: i,
                        buffer: t.len
                    })
                }
            }
            ,
            e._trySkipBufferHole = function(t) {
                var e = this.config
                  , r = this.hls
                  , i = this.media;
                if (null === i)
                    return 0;
                var n = i.currentTime
                  , a = Jr.bufferInfo(i, n, 0)
                  , s = n &lt; a.start ? a.start : a.nextStart;
                if (s) {
                    var o = a.len &lt;= e.maxBufferHole
                      , l = a.len &gt; 0 &amp;&amp; a.len &lt; 1 &amp;&amp; i.readyState &lt; 3
                      , u = s - n;
                    if (u &gt; 0 &amp;&amp; (o || l)) {
                        if (u &gt; e.maxBufferHole) {
                            var h = this.fragmentTracker
                              , d = !1;
                            if (0 === n) {
                                var c = h.getAppendedFrag(0, we);
                                c &amp;&amp; s &lt; c.end &amp;&amp; (d = !0)
                            }
                            if (!d) {
                                var f = t || h.getAppendedFrag(n, we);
                                if (f) {
                                    for (var g = !1, v = f.end; v &lt; s; ) {
                                        var m = h.getPartialFragment(v);
                                        if (!m) {
                                            g = !0;
                                            break
                                        }
                                        v += m.duration
                                    }
                                    if (g)
                                        return 0
                                }
                            }
                        }
                        var p = Math.max(s + .05, n + .1);
                        if (w.warn(&quot;skipping hole, adjusting currentTime from &quot; + n + &quot; to &quot; + p),
                        this.moved = !0,
                        this.stalled = null,
                        i.currentTime = p,
                        t &amp;&amp; !t.gap) {
                            var y = new Error(&quot;fragment loaded with buffer holes, seeking from &quot; + n + &quot; to &quot; + p);
                            r.trigger(S.ERROR, {
                                type: L.MEDIA_ERROR,
                                details: A.BUFFER_SEEK_OVER_HOLE,
                                fatal: !1,
                                error: y,
                                reason: y.message,
                                frag: t
                            })
                        }
                        return p
                    }
                }
                return 0
            }
            ,
            e._tryNudgeBuffer = function() {
                var t = this.config
                  , e = this.hls
                  , r = this.media
                  , i = this.nudgeRetry;
                if (null !== r) {
                    var n = r.currentTime;
                    if (this.nudgeRetry++,
                    i &lt; t.nudgeMaxRetry) {
                        var a = n + (i + 1) * t.nudgeOffset
                          , s = new Error(&quot;Nudging &#39;currentTime&#39; from &quot; + n + &quot; to &quot; + a);
                        w.warn(s.message),
                        r.currentTime = a,
                        e.trigger(S.ERROR, {
                            type: L.MEDIA_ERROR,
                            details: A.BUFFER_NUDGE_ON_STALL,
                            error: s,
                            fatal: !1
                        })
                    } else {
                        var o = new Error(&quot;Playhead still not moving while enough data buffered @&quot; + n + &quot; after &quot; + t.nudgeMaxRetry + &quot; nudges&quot;);
                        w.error(o.message),
                        e.trigger(S.ERROR, {
                            type: L.MEDIA_ERROR,
                            details: A.BUFFER_STALLED_ERROR,
                            error: o,
                            fatal: !0
                        })
                    }
                }
            }
            ,
            t
        }()
          , so = function(t) {
            function e(e, r, i) {
                var n;
                return (n = t.call(this, e, r, i, &quot;[stream-controller]&quot;, we) || this).audioCodecSwap = !1,
                n.gapController = null,
                n.level = -1,
                n._forceStartLoad = !1,
                n.altAudio = !1,
                n.audioOnly = !1,
                n.fragPlaying = null,
                n.onvplaying = null,
                n.onvseeked = null,
                n.fragLastKbps = 0,
                n.couldBacktrack = !1,
                n.backtrackFragment = null,
                n.audioCodecSwitch = !1,
                n.videoBuffer = null,
                n._registerListeners(),
                n
            }
            l(e, t);
            var r = e.prototype;
            return r._registerListeners = function() {
                var t = this.hls;
                t.on(S.MEDIA_ATTACHED, this.onMediaAttached, this),
                t.on(S.MEDIA_DETACHING, this.onMediaDetaching, this),
                t.on(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.on(S.MANIFEST_PARSED, this.onManifestParsed, this),
                t.on(S.LEVEL_LOADING, this.onLevelLoading, this),
                t.on(S.LEVEL_LOADED, this.onLevelLoaded, this),
                t.on(S.FRAG_LOAD_EMERGENCY_ABORTED, this.onFragLoadEmergencyAborted, this),
                t.on(S.ERROR, this.onError, this),
                t.on(S.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this),
                t.on(S.AUDIO_TRACK_SWITCHED, this.onAudioTrackSwitched, this),
                t.on(S.BUFFER_CREATED, this.onBufferCreated, this),
                t.on(S.BUFFER_FLUSHED, this.onBufferFlushed, this),
                t.on(S.LEVELS_UPDATED, this.onLevelsUpdated, this),
                t.on(S.FRAG_BUFFERED, this.onFragBuffered, this)
            }
            ,
            r._unregisterListeners = function() {
                var t = this.hls;
                t.off(S.MEDIA_ATTACHED, this.onMediaAttached, this),
                t.off(S.MEDIA_DETACHING, this.onMediaDetaching, this),
                t.off(S.MANIFEST_LOADING, this.onManifestLoading, this),
                t.off(S.MANIFEST_PARSED, this.onManifestParsed, this),
                t.off(S.LEVEL_LOADED, this.onLevelLoaded, this),
                t.off(S.FRAG_LOAD_EMERGENCY_ABORTED, this.onFragLoadEmergencyAborted, this),
                t.off(S.ERROR, this.onError, this),
                t.off(S.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this),
                t.off(S.AUDIO_TRACK_SWITCHED, this.onAudioTrackSwitched, this),
                t.off(S.BUFFER_CREATED, this.onBufferCreated, this),
                t.off(S.BUFFER_FLUSHED, this.onBufferFlushed, this),
                t.off(S.LEVELS_UPDATED, this.onLevelsUpdated, this),
                t.off(S.FRAG_BUFFERED, this.onFragBuffered, this)
            }
            ,
            r.onHandlerDestroying = function() {
                this._unregisterListeners(),
                t.prototype.onHandlerDestroying.call(this)
            }
            ,
            r.startLoad = function(t) {
                if (this.levels) {
                    var e = this.lastCurrentTime
                      , r = this.hls;
                    if (this.stopLoad(),
                    this.setInterval(100),
                    this.level = -1,
                    !this.startFragRequested) {
                        var i = r.startLevel;
                        -1 === i &amp;&amp; (r.config.testBandwidth &amp;&amp; this.levels.length &gt; 1 ? (i = 0,
                        this.bitrateTest = !0) : i = r.firstAutoLevel),
                        r.nextLoadLevel = i,
                        this.level = r.loadLevel,
                        this.loadedmetadata = !1
                    }
                    e &gt; 0 &amp;&amp; -1 === t &amp;&amp; (this.log(&quot;Override startPosition with lastCurrentTime @&quot; + e.toFixed(3)),
                    t = e),
                    this.state = vi,
                    this.nextLoadPosition = this.startPosition = this.lastCurrentTime = t,
                    this.tick()
                } else
                    this._forceStartLoad = !0,
                    this.state = gi
            }
            ,
            r.stopLoad = function() {
                this._forceStartLoad = !1,
                t.prototype.stopLoad.call(this)
            }
            ,
            r.doTick = function() {
                switch (this.state) {
                case ki:
                    var t = this.levels
                      , e = this.level
                      , r = null == t ? void 0 : t[e]
                      , i = null == r ? void 0 : r.details;
                    if (i &amp;&amp; (!i.live || this.levelLastLoaded === r)) {
                        if (this.waitForCdnTuneIn(i))
                            break;
                        this.state = vi;
                        break
                    }
                    if (this.hls.nextLoadLevel !== this.level) {
                        this.state = vi;
                        break
                    }
                    break;
                case yi:
                    var n, a = self.performance.now(), s = this.retryDate;
                    if (!s || a &gt;= s || null != (n = this.media) &amp;&amp; n.seeking) {
                        var o = this.levels
                          , l = this.level
                          , u = null == o ? void 0 : o[l];
                        this.resetStartWhenNotLoaded(u || null),
                        this.state = vi
                    }
                }
                this.state === vi &amp;&amp; this.doTickIdle(),
                this.onTickEnd()
            }
            ,
            r.onTickEnd = function() {
                t.prototype.onTickEnd.call(this),
                this.checkBuffer(),
                this.checkFragmentChanged()
            }
            ,
            r.doTickIdle = function() {
                var t = this.hls
                  , e = this.levelLastLoaded
                  , r = this.levels
                  , i = this.media;
                if (null !== e &amp;&amp; (i || !this.startFragRequested &amp;&amp; t.config.startFragPrefetch) &amp;&amp; (!this.altAudio || !this.audioOnly)) {
                    var n = t.nextLoadLevel;
                    if (null != r &amp;&amp; r[n]) {
                        var a = r[n]
                          , s = this.getMainFwdBufferInfo();
                        if (null !== s) {
                            var o = this.getLevelDetails();
                            if (o &amp;&amp; this._streamEnded(s, o)) {
                                var l = {};
                                return this.altAudio &amp;&amp; (l.type = &quot;video&quot;),
                                this.hls.trigger(S.BUFFER_EOS, l),
                                void (this.state = Li)
                            }
                            t.loadLevel !== n &amp;&amp; -1 === t.manualLevel &amp;&amp; this.log(&quot;Adapting to level &quot; + n + &quot; from level &quot; + this.level),
                            this.level = t.nextLoadLevel = n;
                            var u = a.details;
                            if (!u || this.state === ki || u.live &amp;&amp; this.levelLastLoaded !== a)
                                return this.level = n,
                                void (this.state = ki);
                            var h = s.len
                              , d = this.getMaxBufferLength(a.maxBitrate);
                            if (!(h &gt;= d)) {
                                this.backtrackFragment &amp;&amp; this.backtrackFragment.start &gt; s.end &amp;&amp; (this.backtrackFragment = null);
                                var c = this.backtrackFragment ? this.backtrackFragment.start : s.end
                                  , f = this.getNextFragment(c, u);
                                if (this.couldBacktrack &amp;&amp; !this.fragPrevious &amp;&amp; f &amp;&amp; &quot;initSegment&quot; !== f.sn &amp;&amp; this.fragmentTracker.getState(f) !== jr) {
                                    var g, v = (null != (g = this.backtrackFragment) ? g : f).sn - u.startSN, m = u.fragments[v - 1];
                                    m &amp;&amp; f.cc === m.cc &amp;&amp; (f = m,
                                    this.fragmentTracker.removeFragment(m))
                                } else
                                    this.backtrackFragment &amp;&amp; s.len &amp;&amp; (this.backtrackFragment = null);
                                if (f &amp;&amp; this.isLoopLoading(f, c)) {
                                    if (!f.gap) {
                                        var p = this.audioOnly &amp;&amp; !this.altAudio ? O : N
                                          , y = (p === N ? this.videoBuffer : this.mediaBuffer) || this.media;
                                        y &amp;&amp; this.afterBufferFlushed(y, p, we)
                                    }
                                    f = this.getNextFragmentLoopLoading(f, u, s, we, d)
                                }
                                f &amp;&amp; (!f.initSegment || f.initSegment.data || this.bitrateTest || (f = f.initSegment),
                                this.loadFragment(f, a, c))
                            }
                        }
                    }
                }
            }
            ,
            r.loadFragment = function(e, r, i) {
                var n = this.fragmentTracker.getState(e);
                this.fragCurrent = e,
                n === Vr || n === Wr ? &quot;initSegment&quot; === e.sn ? this._loadInitSegment(e, r) : this.bitrateTest ? (this.log(&quot;Fragment &quot; + e.sn + &quot; of level &quot; + e.level + &quot; is being downloaded to test bitrate and will not be buffered&quot;),
                this._loadBitrateTestFrag(e, r)) : (this.startFragRequested = !0,
                t.prototype.loadFragment.call(this, e, r, i)) : this.clearTrackerIfNeeded(e)
            }
            ,
            r.getBufferedFrag = function(t) {
                return this.fragmentTracker.getBufferedFrag(t, we)
            }
            ,
            r.followingBufferedFrag = function(t) {
                return t ? this.getBufferedFrag(t.end + .5) : null
            }
            ,
            r.immediateLevelSwitch = function() {
                this.abortCurrentFrag(),
                this.flushMainBuffer(0, Number.POSITIVE_INFINITY)
            }
            ,
            r.nextLevelSwitch = function() {
                var t = this.levels
                  , e = this.media;
                if (null != e &amp;&amp; e.readyState) {
                    var r, i = this.getAppendedFrag(e.currentTime);
                    i &amp;&amp; i.start &gt; 1 &amp;&amp; this.flushMainBuffer(0, i.start - 1);
                    var n = this.getLevelDetails();
                    if (null != n &amp;&amp; n.live) {
                        var a = this.getMainFwdBufferInfo();
                        if (!a || a.len &lt; 2 * n.targetduration)
                            return
                    }
                    if (!e.paused &amp;&amp; t) {
                        var s = t[this.hls.nextLoadLevel]
                          , o = this.fragLastKbps;
                        r = o &amp;&amp; this.fragCurrent ? this.fragCurrent.duration * s.maxBitrate / (1e3 * o) + 1 : 0
                    } else
                        r = 0;
                    var l = this.getBufferedFrag(e.currentTime + r);
                    if (l) {
                        var u = this.followingBufferedFrag(l);
                        if (u) {
                            this.abortCurrentFrag();
                            var h = u.maxStartPTS ? u.maxStartPTS : u.start
                              , d = u.duration
                              , c = Math.max(l.end, h + Math.min(Math.max(d - this.config.maxFragLookUpTolerance, d * (this.couldBacktrack ? .5 : .125)), d * (this.couldBacktrack ? .75 : .25)));
                            this.flushMainBuffer(c, Number.POSITIVE_INFINITY)
                        }
                    }
                }
            }
            ,
            r.abortCurrentFrag = function() {
                var t = this.fragCurrent;
                switch (this.fragCurrent = null,
                this.backtrackFragment = null,
                t &amp;&amp; (t.abortRequests(),
                this.fragmentTracker.removeFragment(t)),
                this.state) {
                case mi:
                case pi:
                case yi:
                case Ti:
                case Si:
                    this.state = vi
                }
                this.nextLoadPosition = this.getLoadPosition()
            }
            ,
            r.flushMainBuffer = function(e, r) {
                t.prototype.flushMainBuffer.call(this, e, r, this.altAudio ? &quot;video&quot; : null)
            }
            ,
            r.onMediaAttached = function(e, r) {
                t.prototype.onMediaAttached.call(this, e, r);
                var i = r.media;
                this.onvplaying = this.onMediaPlaying.bind(this),
                this.onvseeked = this.onMediaSeeked.bind(this),
                i.addEventListener(&quot;playing&quot;, this.onvplaying),
                i.addEventListener(&quot;seeked&quot;, this.onvseeked),
                this.gapController = new ao(this.config,i,this.fragmentTracker,this.hls)
            }
            ,
            r.onMediaDetaching = function() {
                var e = this.media;
                e &amp;&amp; this.onvplaying &amp;&amp; this.onvseeked &amp;&amp; (e.removeEventListener(&quot;playing&quot;, this.onvplaying),
                e.removeEventListener(&quot;seeked&quot;, this.onvseeked),
                this.onvplaying = this.onvseeked = null,
                this.videoBuffer = null),
                this.fragPlaying = null,
                this.gapController &amp;&amp; (this.gapController.destroy(),
                this.gapController = null),
                t.prototype.onMediaDetaching.call(this)
            }
            ,
            r.onMediaPlaying = function() {
                this.tick()
            }
            ,
            r.onMediaSeeked = function() {
                var t = this.media
                  , e = t ? t.currentTime : null;
                y(e) &amp;&amp; this.log(&quot;Media seeked to &quot; + e.toFixed(3));
                var r = this.getMainFwdBufferInfo();
                null !== r &amp;&amp; 0 !== r.len ? this.tick() : this.warn(&#39;Main forward buffer length on &quot;seeked&quot; event &#39; + (r ? r.len : &quot;empty&quot;) + &quot;)&quot;)
            }
            ,
            r.onManifestLoading = function() {
                this.log(&quot;Trigger BUFFER_RESET&quot;),
                this.hls.trigger(S.BUFFER_RESET, void 0),
                this.fragmentTracker.removeAllFragments(),
                this.couldBacktrack = !1,
                this.startPosition = this.lastCurrentTime = this.fragLastKbps = 0,
                this.levels = this.fragPlaying = this.backtrackFragment = this.levelLastLoaded = null,
                this.altAudio = this.audioOnly = this.startFragRequested = !1
            }
            ,
            r.onManifestParsed = function(t, e) {
                var r, i, n = !1, a = !1;
                e.levels.forEach((function(t) {
                    var e = t.audioCodec;
                    e &amp;&amp; (n = n || -1 !== e.indexOf(&quot;mp4a.40.2&quot;),
                    a = a || -1 !== e.indexOf(&quot;mp4a.40.5&quot;))
                }
                )),
                this.audioCodecSwitch = n &amp;&amp; a &amp;&amp; !(&quot;function&quot; == typeof (null == (i = io()) || null == (r = i.prototype) ? void 0 : r.changeType)),
                this.audioCodecSwitch &amp;&amp; this.log(&quot;Both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC&quot;),
                this.levels = e.levels,
                this.startFragRequested = !1
            }
            ,
            r.onLevelLoading = function(t, e) {
                var r = this.levels;
                if (r &amp;&amp; this.state === vi) {
                    var i = r[e.level];
                    (!i.details || i.details.live &amp;&amp; this.levelLastLoaded !== i || this.waitForCdnTuneIn(i.details)) &amp;&amp; (this.state = ki)
                }
            }
            ,
            r.onLevelLoaded = function(t, e) {
                var r, i = this.levels, n = e.level, a = e.details, s = a.totalduration;
                if (i) {
                    this.log(&quot;Level &quot; + n + &quot; loaded [&quot; + a.startSN + &quot;,&quot; + a.endSN + &quot;]&quot; + (a.lastPartSn ? &quot;[part-&quot; + a.lastPartSn + &quot;-&quot; + a.lastPartIndex + &quot;]&quot; : &quot;&quot;) + &quot;, cc [&quot; + a.startCC + &quot;, &quot; + a.endCC + &quot;] duration:&quot; + s);
                    var o = i[n]
                      , l = this.fragCurrent;
                    !l || this.state !== pi &amp;&amp; this.state !== yi || l.level !== e.level &amp;&amp; l.loader &amp;&amp; this.abortCurrentFrag();
                    var u = 0;
                    if (a.live || null != (r = o.details) &amp;&amp; r.live) {
                        var h;
                        if (this.checkLiveUpdate(a),
                        a.deltaUpdateFailed)
                            return;
                        u = this.alignPlaylists(a, o.details, null == (h = this.levelLastLoaded) ? void 0 : h.details)
                    }
                    if (o.details = a,
                    this.levelLastLoaded = o,
                    this.hls.trigger(S.LEVEL_UPDATED, {
                        details: a,
                        level: n
                    }),
                    this.state === ki) {
                        if (this.waitForCdnTuneIn(a))
                            return;
                        this.state = vi
                    }
                    this.startFragRequested ? a.live &amp;&amp; this.synchronizeToLiveEdge(a) : this.setStartPosition(a, u),
                    this.tick()
                } else
                    this.warn(&quot;Levels were reset while loading level &quot; + n)
            }
            ,
            r._handleFragmentLoadProgress = function(t) {
                var e, r = t.frag, i = t.part, n = t.payload, a = this.levels;
                if (a) {
                    var s = a[r.level]
                      , o = s.details;
                    if (!o)
                        return this.warn(&quot;Dropping fragment &quot; + r.sn + &quot; of level &quot; + r.level + &quot; after level details were reset&quot;),
                        void this.fragmentTracker.removeFragment(r);
                    var l = s.videoCodec
                      , u = o.PTSKnown || !o.live
                      , h = null == (e = r.initSegment) ? void 0 : e.data
                      , d = this._getAudioCodec(s)
                      , c = this.transmuxer = this.transmuxer || new Hn(this.hls,we,this._handleTransmuxComplete.bind(this),this._handleTransmuxerFlush.bind(this))
                      , f = i ? i.index : -1
                      , g = -1 !== f
                      , v = new $r(r.level,r.sn,r.stats.chunkCount,n.byteLength,f,g)
                      , m = this.initPTS[r.cc];
                    c.push(n, h, d, l, r, i, o.totalduration, u, v, m)
                } else
                    this.warn(&quot;Levels were reset while fragment load was in progress. Fragment &quot; + r.sn + &quot; of level &quot; + r.level + &quot; will not be buffered&quot;)
            }
            ,
            r.onAudioTrackSwitching = function(t, e) {
                var r = this.altAudio;
                if (!e.url) {
                    if (this.mediaBuffer !== this.media) {
                        this.log(&quot;Switching on main audio, use media.buffered to schedule main fragment loading&quot;),
                        this.mediaBuffer = this.media;
                        var i = this.fragCurrent;
                        i &amp;&amp; (this.log(&quot;Switching to main audio track, cancel main fragment load&quot;),
                        i.abortRequests(),
                        this.fragmentTracker.removeFragment(i)),
                        this.resetTransmuxer(),
                        this.resetLoadingState()
                    } else
                        this.audioOnly &amp;&amp; this.resetTransmuxer();
                    var n = this.hls;
                    r &amp;&amp; (n.trigger(S.BUFFER_FLUSHING, {
                        startOffset: 0,
                        endOffset: Number.POSITIVE_INFINITY,
                        type: null
                    }),
                    this.fragmentTracker.removeAllFragments()),
                    n.trigger(S.AUDIO_TRACK_SWITCHED, e)
                }
            }
            ,
            r.onAudioTrackSwitched = function(t, e) {
                var r = e.id
                  , i = !!this.hls.audioTracks[r].url;
                if (i) {
                    var n = this.videoBuffer;
                    n &amp;&amp; this.mediaBuffer !== n &amp;&amp; (this.log(&quot;Switching on alternate audio, use video.buffered to schedule main fragment loading&quot;),
                    this.mediaBuffer = n)
                }
                this.altAudio = i,
                this.tick()
            }
            ,
            r.onBufferCreated = function(t, e) {
                var r, i, n = e.tracks, a = !1;
                for (var s in n) {
                    var o = n[s];
                    if (&quot;main&quot; === o.id) {
                        if (i = s,
                        r = o,
                        &quot;video&quot; === s) {
                            var l = n[s];
                            l &amp;&amp; (this.videoBuffer = l.buffer)
                        }
                    } else
                        a = !0
                }
                a &amp;&amp; r ? (this.log(&quot;Alternate track found, use &quot; + i + &quot;.buffered to schedule main fragment loading&quot;),
                this.mediaBuffer = r.buffer) : this.mediaBuffer = this.media
            }
            ,
            r.onFragBuffered = function(t, e) {
                var r = e.frag
                  , i = e.part;
                if (!r || r.type === we) {
                    if (this.fragContextChanged(r))
                        return this.warn(&quot;Fragment &quot; + r.sn + (i ? &quot; p: &quot; + i.index : &quot;&quot;) + &quot; of level &quot; + r.level + &quot; finished buffering, but was aborted. state: &quot; + this.state),
                        void (this.state === Si &amp;&amp; (this.state = vi));
                    var n = i ? i.stats : r.stats;
                    this.fragLastKbps = Math.round(8 * n.total / (n.buffering.end - n.loading.first)),
                    &quot;initSegment&quot; !== r.sn &amp;&amp; (this.fragPrevious = r),
                    this.fragBufferedComplete(r, i)
                }
            }
            ,
            r.onError = function(t, e) {
                var r;
                if (e.fatal)
                    this.state = Ai;
                else
                    switch (e.details) {
                    case A.FRAG_GAP:
                    case A.FRAG_PARSING_ERROR:
                    case A.FRAG_DECRYPT_ERROR:
                    case A.FRAG_LOAD_ERROR:
                    case A.FRAG_LOAD_TIMEOUT:
                    case A.KEY_LOAD_ERROR:
                    case A.KEY_LOAD_TIMEOUT:
                        this.onFragmentOrKeyLoadError(we, e);
                        break;
                    case A.LEVEL_LOAD_ERROR:
                    case A.LEVEL_LOAD_TIMEOUT:
                    case A.LEVEL_PARSING_ERROR:
                        e.levelRetry || this.state !== ki || (null == (r = e.context) ? void 0 : r.type) !== be || (this.state = vi);
                        break;
                    case A.BUFFER_APPEND_ERROR:
                    case A.BUFFER_FULL_ERROR:
                        if (!e.parent || &quot;main&quot; !== e.parent)
                            return;
                        if (e.details === A.BUFFER_APPEND_ERROR)
                            return void this.resetLoadingState();
                        this.reduceLengthAndFlushBuffer(e) &amp;&amp; this.flushMainBuffer(0, Number.POSITIVE_INFINITY);
                        break;
                    case A.INTERNAL_EXCEPTION:
                        this.recoverWorkerError(e)
                    }
            }
            ,
            r.checkBuffer = function() {
                var t = this.media
                  , e = this.gapController;
                if (t &amp;&amp; e &amp;&amp; t.readyState) {
                    if (this.loadedmetadata || !Jr.getBuffered(t).length) {
                        var r = this.state !== vi ? this.fragCurrent : null;
                        e.poll(this.lastCurrentTime, r)
                    }
                    this.lastCurrentTime = t.currentTime
                }
            }
            ,
            r.onFragLoadEmergencyAborted = function() {
                this.state = vi,
                this.loadedmetadata || (this.startFragRequested = !1,
                this.nextLoadPosition = this.startPosition),
                this.tickImmediate()
            }
            ,
            r.onBufferFlushed = function(t, e) {
                var r = e.type;
                if (r !== O || this.audioOnly &amp;&amp; !this.altAudio) {
                    var i = (r === N ? this.videoBuffer : this.mediaBuffer) || this.media;
                    this.afterBufferFlushed(i, r, we),
                    this.tick()
                }
            }
            ,
            r.onLevelsUpdated = function(t, e) {
                this.level &gt; -1 &amp;&amp; this.fragCurrent &amp;&amp; (this.level = this.fragCurrent.level),
                this.levels = e.levels
            }
            ,
            r.swapAudioCodec = function() {
                this.audioCodecSwap = !this.audioCodecSwap
            }
            ,
            r.seekToStartPos = function() {
                var t = this.media;
                if (t) {
                    var e = t.currentTime
                      , r = this.startPosition;
                    if (r &gt;= 0 &amp;&amp; e &lt; r) {
                        if (t.seeking)
                            return void this.log(&quot;could not seek to &quot; + r + &quot;, already seeking at &quot; + e);
                        var i = Jr.getBuffered(t)
                          , n = (i.length ? i.start(0) : 0) - r;
                        n &gt; 0 &amp;&amp; (n &lt; this.config.maxBufferHole || n &lt; this.config.maxFragLookUpTolerance) &amp;&amp; (this.log(&quot;adjusting start position by &quot; + n + &quot; to match buffer start&quot;),
                        r += n,
                        this.startPosition = r),
                        this.log(&quot;seek to target start position &quot; + r + &quot; from current time &quot; + e),
                        t.currentTime = r
                    }
                }
            }
            ,
            r._getAudioCodec = function(t) {
                var e = this.config.defaultAudioCodec || t.audioCodec;
                return this.audioCodecSwap &amp;&amp; e &amp;&amp; (this.log(&quot;Swapping audio codec&quot;),
                e = -1 !== e.indexOf(&quot;mp4a.40.5&quot;) ? &quot;mp4a.40.2&quot; : &quot;mp4a.40.5&quot;),
                e
            }
            ,
            r._loadBitrateTestFrag = function(t, e) {
                var r = this;
                t.bitrateTest = !0,
                this._doFragLoad(t, e).then((function(i) {
                    var n = r.hls;
                    if (i &amp;&amp; !r.fragContextChanged(t)) {
                        e.fragmentError = 0,
                        r.state = vi,
                        r.startFragRequested = !1,
                        r.bitrateTest = !1;
                        var a = t.stats;
                        a.parsing.start = a.parsing.end = a.buffering.start = a.buffering.end = self.performance.now(),
                        n.trigger(S.FRAG_LOADED, i),
                        t.bitrateTest = !1
                    }
                }
                ))
            }
            ,
            r._handleTransmuxComplete = function(t) {
                var e, r = &quot;main&quot;, i = this.hls, n = t.remuxResult, a = t.chunkMeta, s = this.getCurrentContext(a);
                if (s) {
                    var o = s.frag
                      , l = s.part
                      , u = s.level
                      , h = n.video
                      , d = n.text
                      , c = n.id3
                      , f = n.initSegment
                      , g = u.details
                      , v = this.altAudio ? void 0 : n.audio;
                    if (this.fragContextChanged(o))
                        this.fragmentTracker.removeFragment(o);
                    else {
                        if (this.state = Ti,
                        f) {
                            if (null != f &amp;&amp; f.tracks) {
                                var m = o.initSegment || o;
                                this._bufferInitSegment(u, f.tracks, m, a),
                                i.trigger(S.FRAG_PARSING_INIT_SEGMENT, {
                                    frag: m,
                                    id: r,
                                    tracks: f.tracks
                                })
                            }
                            var p = f.initPTS
                              , E = f.timescale;
                            y(p) &amp;&amp; (this.initPTS[o.cc] = {
                                baseTime: p,
                                timescale: E
                            },
                            i.trigger(S.INIT_PTS_FOUND, {
                                frag: o,
                                id: r,
                                initPTS: p,
                                timescale: E
                            }))
                        }
                        if (h &amp;&amp; g &amp;&amp; &quot;initSegment&quot; !== o.sn) {
                            var T = g.fragments[o.sn - 1 - g.startSN]
                              , L = o.sn === g.startSN
                              , A = !T || o.cc &gt; T.cc;
                            if (!1 !== n.independent) {
                                var R = h.startPTS
                                  , k = h.endPTS
                                  , b = h.startDTS
                                  , D = h.endDTS;
                                if (l)
                                    l.elementaryStreams[h.type] = {
                                        startPTS: R,
                                        endPTS: k,
                                        startDTS: b,
                                        endDTS: D
                                    };
                                else if (h.firstKeyFrame &amp;&amp; h.independent &amp;&amp; 1 === a.id &amp;&amp; !A &amp;&amp; (this.couldBacktrack = !0),
                                h.dropped &amp;&amp; h.independent) {
                                    var I = this.getMainFwdBufferInfo()
                                      , w = (I ? I.end : this.getLoadPosition()) + this.config.maxBufferHole
                                      , C = h.firstKeyFramePTS ? h.firstKeyFramePTS : R;
                                    if (!L &amp;&amp; w &lt; C - this.config.maxBufferHole &amp;&amp; !A)
                                        return void this.backtrack(o);
                                    A &amp;&amp; (o.gap = !0),
                                    o.setElementaryStreamInfo(h.type, o.start, k, o.start, D, !0)
                                } else
                                    L &amp;&amp; R &gt; 2 &amp;&amp; (o.gap = !0);
                                o.setElementaryStreamInfo(h.type, R, k, b, D),
                                this.backtrackFragment &amp;&amp; (this.backtrackFragment = o),
                                this.bufferFragmentData(h, o, l, a, L || A)
                            } else {
                                if (!L &amp;&amp; !A)
                                    return void this.backtrack(o);
                                o.gap = !0
                            }
                        }
                        if (v) {
                            var _ = v.startPTS
                              , x = v.endPTS
                              , P = v.startDTS
                              , F = v.endDTS;
                            l &amp;&amp; (l.elementaryStreams[O] = {
                                startPTS: _,
                                endPTS: x,
                                startDTS: P,
                                endDTS: F
                            }),
                            o.setElementaryStreamInfo(O, _, x, P, F),
                            this.bufferFragmentData(v, o, l, a)
                        }
                        if (g &amp;&amp; null != c &amp;&amp; null != (e = c.samples) &amp;&amp; e.length) {
                            var M = {
                                id: r,
                                frag: o,
                                details: g,
                                samples: c.samples
                            };
                            i.trigger(S.FRAG_PARSING_METADATA, M)
                        }
                        if (g &amp;&amp; d) {
                            var N = {
                                id: r,
                                frag: o,
                                details: g,
                                samples: d.samples
                            };
                            i.trigger(S.FRAG_PARSING_USERDATA, N)
                        }
                    }
                } else
                    this.resetWhenMissingContext(a)
            }
            ,
            r._bufferInitSegment = function(t, e, r, i) {
                var n = this;
                if (this.state === Ti) {
                    this.audioOnly = !!e.audio &amp;&amp; !e.video,
                    this.altAudio &amp;&amp; !this.audioOnly &amp;&amp; delete e.audio;
                    var a = e.audio
                      , s = e.video
                      , o = e.audiovideo;
                    if (a) {
                        var l = t.audioCodec
                          , u = navigator.userAgent.toLowerCase();
                        if (this.audioCodecSwitch) {
                            l &amp;&amp; (l = -1 !== l.indexOf(&quot;mp4a.40.5&quot;) ? &quot;mp4a.40.2&quot; : &quot;mp4a.40.5&quot;);
                            var h = a.metadata;
                            h &amp;&amp; &quot;channelCount&quot;in h &amp;&amp; 1 !== (h.channelCount || 1) &amp;&amp; -1 === u.indexOf(&quot;firefox&quot;) &amp;&amp; (l = &quot;mp4a.40.5&quot;)
                        }
                        l &amp;&amp; -1 !== l.indexOf(&quot;mp4a.40.5&quot;) &amp;&amp; -1 !== u.indexOf(&quot;android&quot;) &amp;&amp; &quot;audio/mpeg&quot; !== a.container &amp;&amp; (l = &quot;mp4a.40.2&quot;,
                        this.log(&quot;Android: force audio codec to &quot; + l)),
                        t.audioCodec &amp;&amp; t.audioCodec !== l &amp;&amp; this.log(&#39;Swapping manifest audio codec &quot;&#39; + t.audioCodec + &#39;&quot; for &quot;&#39; + l + &#39;&quot;&#39;),
                        a.levelCodec = l,
                        a.id = &quot;main&quot;,
                        this.log(&quot;Init audio buffer, container:&quot; + a.container + &quot;, codecs[selected/level/parsed]=[&quot; + (l || &quot;&quot;) + &quot;/&quot; + (t.audioCodec || &quot;&quot;) + &quot;/&quot; + a.codec + &quot;]&quot;)
                    }
                    s &amp;&amp; (s.levelCodec = t.videoCodec,
                    s.id = &quot;main&quot;,
                    this.log(&quot;Init video buffer, container:&quot; + s.container + &quot;, codecs[level/parsed]=[&quot; + (t.videoCodec || &quot;&quot;) + &quot;/&quot; + s.codec + &quot;]&quot;)),
                    o &amp;&amp; this.log(&quot;Init audiovideo buffer, container:&quot; + o.container + &quot;, codecs[level/parsed]=[&quot; + t.codecs + &quot;/&quot; + o.codec + &quot;]&quot;),
                    this.hls.trigger(S.BUFFER_CODECS, e),
                    Object.keys(e).forEach((function(t) {
                        var a = e[t].initSegment;
                        null != a &amp;&amp; a.byteLength &amp;&amp; n.hls.trigger(S.BUFFER_APPENDING, {
                            type: t,
                            data: a,
                            frag: r,
                            part: null,
                            chunkMeta: i,
                            parent: r.type
                        })
                    }
                    )),
                    this.tickImmediate()
                }
            }
            ,
            r.getMainFwdBufferInfo = function() {
                return this.getFwdBufferInfo(this.mediaBuffer ? this.mediaBuffer : this.media, we)
            }
            ,
            r.backtrack = function(t) {
                this.couldBacktrack = !0,
                this.backtrackFragment = t,
                this.resetTransmuxer(),
                this.flushBufferGap(t),
                this.fragmentTracker.removeFragment(t),
                this.fragPrevious = null,
                this.nextLoadPosition = t.start,
                this.state = vi
            }
            ,
            r.checkFragmentChanged = function() {
                var t = this.media
                  , e = null;
                if (t &amp;&amp; t.readyState &gt; 1 &amp;&amp; !1 === t.seeking) {
                    var r = t.currentTime;
                    if (Jr.isBuffered(t, r) ? e = this.getAppendedFrag(r) : Jr.isBuffered(t, r + .1) &amp;&amp; (e = this.getAppendedFrag(r + .1)),
                    e) {
                        this.backtrackFragment = null;
                        var i = this.fragPlaying
                          , n = e.level;
                        i &amp;&amp; e.sn === i.sn &amp;&amp; i.level === n || (this.fragPlaying = e,
                        this.hls.trigger(S.FRAG_CHANGED, {
                            frag: e
                        }),
                        i &amp;&amp; i.level === n || this.hls.trigger(S.LEVEL_SWITCHED, {
                            level: n
                        }))
                    }
                }
            }
            ,
            s(e, [{
                key: &quot;nextLevel&quot;,
                get: function() {
                    var t = this.nextBufferedFrag;
                    return t ? t.level : -1
                }
            }, {
                key: &quot;currentFrag&quot;,
                get: function() {
                    var t = this.media;
                    return t ? this.fragPlaying || this.getAppendedFrag(t.currentTime) : null
                }
            }, {
                key: &quot;currentProgramDateTime&quot;,
                get: function() {
                    var t = this.media;
                    if (t) {
                        var e = t.currentTime
                          , r = this.currentFrag;
                        if (r &amp;&amp; y(e) &amp;&amp; y(r.programDateTime)) {
                            var i = r.programDateTime + 1e3 * (e - r.start);
                            return new Date(i)
                        }
                    }
                    return null
                }
            }, {
                key: &quot;currentLevel&quot;,
                get: function() {
                    var t = this.currentFrag;
                    return t ? t.level : -1
                }
            }, {
                key: &quot;nextBufferedFrag&quot;,
                get: function() {
                    var t = this.currentFrag;
                    return t ? this.followingBufferedFrag(t) : null
                }
            }, {
                key: &quot;forceStartLoad&quot;,
                get: function() {
                    return this._forceStartLoad
                }
            }]),
            e
        }(bi)
          , oo = function() {
            function t(e) {
                void 0 === e &amp;&amp; (e = {}),
                this.config = void 0,
                this.userConfig = void 0,
                this.coreComponents = void 0,
                this.networkControllers = void 0,
                this.started = !1,
                this._emitter = new Un,
                this._autoLevelCapping = -1,
                this._maxHdcpLevel = null,
                this.abrController = void 0,
                this.bufferController = void 0,
                this.capLevelController = void 0,
                this.latencyController = void 0,
                this.levelController = void 0,
                this.streamController = void 0,
                this.audioTrackController = void 0,
                this.subtitleTrackController = void 0,
                this.emeController = void 0,
                this.cmcdController = void 0,
                this._media = null,
                this.url = null,
                this.triggeringException = void 0,
                I(e.debug || !1, &quot;Hls instance&quot;);
                var r = this.config = function(t, e) {
                    if ((e.liveSyncDurationCount || e.liveMaxLatencyDurationCount) &amp;&amp; (e.liveSyncDuration || e.liveMaxLatencyDuration))
                        throw new Error(&quot;Illegal hls.js config: don&#39;t mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration&quot;);
                    if (void 0 !== e.liveMaxLatencyDurationCount &amp;&amp; (void 0 === e.liveSyncDurationCount || e.liveMaxLatencyDurationCount &lt;= e.liveSyncDurationCount))
                        throw new Error(&#39;Illegal hls.js config: &quot;liveMaxLatencyDurationCount&quot; must be greater than &quot;liveSyncDurationCount&quot;&#39;);
                    if (void 0 !== e.liveMaxLatencyDuration &amp;&amp; (void 0 === e.liveSyncDuration || e.liveMaxLatencyDuration &lt;= e.liveSyncDuration))
                        throw new Error(&#39;Illegal hls.js config: &quot;liveMaxLatencyDuration&quot; must be greater than &quot;liveSyncDuration&quot;&#39;);
                    var r = $s(t)
                      , n = [&quot;TimeOut&quot;, &quot;MaxRetry&quot;, &quot;RetryDelay&quot;, &quot;MaxRetryTimeout&quot;];
                    return [&quot;manifest&quot;, &quot;level&quot;, &quot;frag&quot;].forEach((function(t) {
                        var i = (&quot;level&quot; === t ? &quot;playlist&quot; : t) + &quot;LoadPolicy&quot;
                          , a = void 0 === e[i]
                          , s = [];
                        n.forEach((function(n) {
                            var o = t + &quot;Loading&quot; + n
                              , l = e[o];
                            if (void 0 !== l &amp;&amp; a) {
                                s.push(o);
                                var u = r[i].default;
                                switch (e[i] = {
                                    default: u
                                },
                                n) {
                                case &quot;TimeOut&quot;:
                                    u.maxLoadTimeMs = l,
                                    u.maxTimeToFirstByteMs = l;
                                    break;
                                case &quot;MaxRetry&quot;:
                                    u.errorRetry.maxNumRetry = l,
                                    u.timeoutRetry.maxNumRetry = l;
                                    break;
                                case &quot;RetryDelay&quot;:
                                    u.errorRetry.retryDelayMs = l,
                                    u.timeoutRetry.retryDelayMs = l;
                                    break;
                                case &quot;MaxRetryTimeout&quot;:
                                    u.errorRetry.maxRetryDelayMs = l,
                                    u.timeoutRetry.maxRetryDelayMs = l
                                }
                            }
                        }
                        )),
                        s.length &amp;&amp; w.warn(&#39;hls.js config: &quot;&#39; + s.join(&#39;&quot;, &quot;&#39;) + &#39;&quot; setting(s) are deprecated, use &quot;&#39; + i + &#39;&quot;: &#39; + JSON.stringify(e[i]))
                    }
                    )),
                    i(i({}, r), e)
                }(t.DefaultConfig, e);
                this.userConfig = e,
                r.progressive &amp;&amp; Zs(r);
                var n = r.abrController
                  , a = r.bufferController
                  , s = r.capLevelController
                  , o = r.errorController
                  , l = r.fpsController
                  , u = new o(this)
                  , h = this.abrController = new n(this)
                  , d = this.bufferController = new a(this)
                  , c = this.capLevelController = new s(this)
                  , f = new l(this)
                  , g = new Fe(this)
                  , v = new qe(this)
                  , m = r.contentSteeringController
                  , p = m ? new m(this) : null
                  , y = this.levelController = new to(this,p)
                  , E = new qr(this)
                  , T = new ro(this.config)
                  , L = this.streamController = new so(this,E,T);
                c.setStreamController(L),
                f.setStreamController(L);
                var A = [g, y, L];
                p &amp;&amp; A.splice(1, 0, p),
                this.networkControllers = A;
                var R = [h, d, c, f, v, E];
                this.audioTrackController = this.createController(r.audioTrackController, A);
                var k = r.audioStreamController;
                k &amp;&amp; A.push(new k(this,E,T)),
                this.subtitleTrackController = this.createController(r.subtitleTrackController, A);
                var b = r.subtitleStreamController;
                b &amp;&amp; A.push(new b(this,E,T)),
                this.createController(r.timelineController, R),
                T.emeController = this.emeController = this.createController(r.emeController, R),
                this.cmcdController = this.createController(r.cmcdController, R),
                this.latencyController = this.createController(Xe, R),
                this.coreComponents = R,
                A.push(u);
                var D = u.onErrorOut;
                &quot;function&quot; == typeof D &amp;&amp; this.on(S.ERROR, D, u)
            }
            t.isMSESupported = function() {
                return no()
            }
            ,
            t.isSupported = function() {
                return function() {
                    if (!no())
                        return !1;
                    var t = ee();
                    return &quot;function&quot; == typeof (null == t ? void 0 : t.isTypeSupported) &amp;&amp; ([&quot;avc1.42E01E,mp4a.40.2&quot;, &quot;av01.0.01M.08&quot;, &quot;vp09.00.50.08&quot;].some((function(e) {
                        return t.isTypeSupported(ae(e, &quot;video&quot;))
                    }
                    )) || [&quot;mp4a.40.2&quot;, &quot;fLaC&quot;].some((function(e) {
                        return t.isTypeSupported(ae(e, &quot;audio&quot;))
                    }
                    )))
                }()
            }
            ,
            t.getMediaSource = function() {
                return ee()
            }
            ;
            var e = t.prototype;
            return e.createController = function(t, e) {
                if (t) {
                    var r = new t(this);
                    return e &amp;&amp; e.push(r),
                    r
                }
                return null
            }
            ,
            e.on = function(t, e, r) {
                void 0 === r &amp;&amp; (r = this),
                this._emitter.on(t, e, r)
            }
            ,
            e.once = function(t, e, r) {
                void 0 === r &amp;&amp; (r = this),
                this._emitter.once(t, e, r)
            }
            ,
            e.removeAllListeners = function(t) {
                this._emitter.removeAllListeners(t)
            }
            ,
            e.off = function(t, e, r, i) {
                void 0 === r &amp;&amp; (r = this),
                this._emitter.off(t, e, r, i)
            }
            ,
            e.listeners = function(t) {
                return this._emitter.listeners(t)
            }
            ,
            e.emit = function(t, e, r) {
                return this._emitter.emit(t, e, r)
            }
            ,
            e.trigger = function(t, e) {
                if (this.config.debug)
                    return this.emit(t, t, e);
                try {
                    return this.emit(t, t, e)
                } catch (e) {
                    if (w.error(&quot;An internal error happened while handling event &quot; + t + &#39;. Error message: &quot;&#39; + e.message + &#39;&quot;. Here is a stacktrace:&#39;, e),
                    !this.triggeringException) {
                        this.triggeringException = !0;
                        var r = t === S.ERROR;
                        this.trigger(S.ERROR, {
                            type: L.OTHER_ERROR,
                            details: A.INTERNAL_EXCEPTION,
                            fatal: r,
                            event: t,
                            error: e
                        }),
                        this.triggeringException = !1
                    }
                }
                return !1
            }
            ,
            e.listenerCount = function(t) {
                return this._emitter.listenerCount(t)
            }
            ,
            e.destroy = function() {
                w.log(&quot;destroy&quot;),
                this.trigger(S.DESTROYING, void 0),
                this.detachMedia(),
                this.removeAllListeners(),
                this._autoLevelCapping = -1,
                this.url = null,
                this.networkControllers.forEach((function(t) {
                    return t.destroy()
                }
                )),
                this.networkControllers.length = 0,
                this.coreComponents.forEach((function(t) {
                    return t.destroy()
                }
                )),
                this.coreComponents.length = 0;
                var t = this.config;
                t.xhrSetup = t.fetchSetup = void 0,
                this.userConfig = null
            }
            ,
            e.attachMedia = function(t) {
                w.log(&quot;attachMedia&quot;),
                this._media = t,
                this.trigger(S.MEDIA_ATTACHING, {
                    media: t
                })
            }
            ,
            e.detachMedia = function() {
                w.log(&quot;detachMedia&quot;),
                this.trigger(S.MEDIA_DETACHING, void 0),
                this._media = null
            }
            ,
            e.loadSource = function(t) {
                this.stopLoad();
                var e = this.media
                  , r = this.url
                  , i = this.url = p.buildAbsoluteURL(self.location.href, t, {
                    alwaysNormalize: !0
                });
                this._autoLevelCapping = -1,
                this._maxHdcpLevel = null,
                w.log(&quot;loadSource:&quot; + i),
                e &amp;&amp; r &amp;&amp; (r !== i || this.bufferController.hasSourceTypes()) &amp;&amp; (this.detachMedia(),
                this.attachMedia(e)),
                this.trigger(S.MANIFEST_LOADING, {
                    url: t
                })
            }
            ,
            e.startLoad = function(t) {
                void 0 === t &amp;&amp; (t = -1),
                w.log(&quot;startLoad(&quot; + t + &quot;)&quot;),
                this.started = !0,
                this.networkControllers.forEach((function(e) {
                    e.startLoad(t)
                }
                ))
            }
            ,
            e.stopLoad = function() {
                w.log(&quot;stopLoad&quot;),
                this.started = !1,
                this.networkControllers.forEach((function(t) {
                    t.stopLoad()
                }
                ))
            }
            ,
            e.resumeBuffering = function() {
                this.started &amp;&amp; this.networkControllers.forEach((function(t) {
                    &quot;fragmentLoader&quot;in t &amp;&amp; t.startLoad(-1)
                }
                ))
            }
            ,
            e.pauseBuffering = function() {
                this.networkControllers.forEach((function(t) {
                    &quot;fragmentLoader&quot;in t &amp;&amp; t.stopLoad()
                }
                ))
            }
            ,
            e.swapAudioCodec = function() {
                w.log(&quot;swapAudioCodec&quot;),
                this.streamController.swapAudioCodec()
            }
            ,
            e.recoverMediaError = function() {
                w.log(&quot;recoverMediaError&quot;);
                var t = this._media;
                this.detachMedia(),
                t &amp;&amp; this.attachMedia(t)
            }
            ,
            e.removeLevel = function(t) {
                this.levelController.removeLevel(t)
            }
            ,
            e.setAudioOption = function(t) {
                var e;
                return null == (e = this.audioTrackController) ? void 0 : e.setAudioOption(t)
            }
            ,
            e.setSubtitleOption = function(t) {
                var e;
                return null == (e = this.subtitleTrackController) || e.setSubtitleOption(t),
                null
            }
            ,
            s(t, [{
                key: &quot;levels&quot;,
                get: function() {
                    var t = this.levelController.levels;
                    return t || []
                }
            }, {
                key: &quot;currentLevel&quot;,
                get: function() {
                    return this.streamController.currentLevel
                },
                set: function(t) {
                    w.log(&quot;set currentLevel:&quot; + t),
                    this.levelController.manualLevel = t,
                    this.streamController.immediateLevelSwitch()
                }
            }, {
                key: &quot;nextLevel&quot;,
                get: function() {
                    return this.streamController.nextLevel
                },
                set: function(t) {
                    w.log(&quot;set nextLevel:&quot; + t),
                    this.levelController.manualLevel = t,
                    this.streamController.nextLevelSwitch()
                }
            }, {
                key: &quot;loadLevel&quot;,
                get: function() {
                    return this.levelController.level
                },
                set: function(t) {
                    w.log(&quot;set loadLevel:&quot; + t),
                    this.levelController.manualLevel = t
                }
            }, {
                key: &quot;nextLoadLevel&quot;,
                get: function() {
                    return this.levelController.nextLoadLevel
                },
                set: function(t) {
                    this.levelController.nextLoadLevel = t
                }
            }, {
                key: &quot;firstLevel&quot;,
                get: function() {
                    return Math.max(this.levelController.firstLevel, this.minAutoLevel)
                },
                set: function(t) {
                    w.log(&quot;set firstLevel:&quot; + t),
                    this.levelController.firstLevel = t
                }
            }, {
                key: &quot;startLevel&quot;,
                get: function() {
                    var t = this.levelController.startLevel;
                    return -1 === t &amp;&amp; this.abrController.forcedAutoLevel &gt; -1 ? this.abrController.forcedAutoLevel : t
                },
                set: function(t) {
                    w.log(&quot;set startLevel:&quot; + t),
                    -1 !== t &amp;&amp; (t = Math.max(t, this.minAutoLevel)),
                    this.levelController.startLevel = t
                }
            }, {
                key: &quot;capLevelToPlayerSize&quot;,
                get: function() {
                    return this.config.capLevelToPlayerSize
                },
                set: function(t) {
                    var e = !!t;
                    e !== this.config.capLevelToPlayerSize &amp;&amp; (e ? this.capLevelController.startCapping() : (this.capLevelController.stopCapping(),
                    this.autoLevelCapping = -1,
                    this.streamController.nextLevelSwitch()),
                    this.config.capLevelToPlayerSize = e)
                }
            }, {
                key: &quot;autoLevelCapping&quot;,
                get: function() {
                    return this._autoLevelCapping
                },
                set: function(t) {
                    this._autoLevelCapping !== t &amp;&amp; (w.log(&quot;set autoLevelCapping:&quot; + t),
                    this._autoLevelCapping = t,
                    this.levelController.checkMaxAutoUpdated())
                }
            }, {
                key: &quot;bandwidthEstimate&quot;,
                get: function() {
                    var t = this.abrController.bwEstimator;
                    return t ? t.getEstimate() : NaN
                },
                set: function(t) {
                    this.abrController.resetEstimator(t)
                }
            }, {
                key: &quot;ttfbEstimate&quot;,
                get: function() {
                    var t = this.abrController.bwEstimator;
                    return t ? t.getEstimateTTFB() : NaN
                }
            }, {
                key: &quot;maxHdcpLevel&quot;,
                get: function() {
                    return this._maxHdcpLevel
                },
                set: function(t) {
                    (function(t) {
                        return ze.indexOf(t) &gt; -1
                    }
                    )(t) &amp;&amp; this._maxHdcpLevel !== t &amp;&amp; (this._maxHdcpLevel = t,
                    this.levelController.checkMaxAutoUpdated())
                }
            }, {
                key: &quot;autoLevelEnabled&quot;,
                get: function() {
                    return -1 === this.levelController.manualLevel
                }
            }, {
                key: &quot;manualLevel&quot;,
                get: function() {
                    return this.levelController.manualLevel
                }
            }, {
                key: &quot;minAutoLevel&quot;,
                get: function() {
                    var t = this.levels
                      , e = this.config.minAutoBitrate;
                    if (!t)
                        return 0;
                    for (var r = t.length, i = 0; i &lt; r; i++)
                        if (t[i].maxBitrate &gt;= e)
                            return i;
                    return 0
                }
            }, {
                key: &quot;maxAutoLevel&quot;,
                get: function() {
                    var t, e = this.levels, r = this.autoLevelCapping, i = this.maxHdcpLevel;
                    if (t = -1 === r &amp;&amp; null != e &amp;&amp; e.length ? e.length - 1 : r,
                    i)
                        for (var n = t; n--; ) {
                            var a = e[n].attrs[&quot;HDCP-LEVEL&quot;];
                            if (a &amp;&amp; a &lt;= i)
                                return n
                        }
                    return t
                }
            }, {
                key: &quot;firstAutoLevel&quot;,
                get: function() {
                    return this.abrController.firstAutoLevel
                }
            }, {
                key: &quot;nextAutoLevel&quot;,
                get: function() {
                    return this.abrController.nextAutoLevel
                },
                set: function(t) {
                    this.abrController.nextAutoLevel = t
                }
            }, {
                key: &quot;playingDate&quot;,
                get: function() {
                    return this.streamController.currentProgramDateTime
                }
            }, {
                key: &quot;mainForwardBufferInfo&quot;,
                get: function() {
                    return this.streamController.getMainFwdBufferInfo()
                }
            }, {
                key: &quot;allAudioTracks&quot;,
                get: function() {
                    var t = this.audioTrackController;
                    return t ? t.allAudioTracks : []
                }
            }, {
                key: &quot;audioTracks&quot;,
                get: function() {
                    var t = this.audioTrackController;
                    return t ? t.audioTracks : []
                }
            }, {
                key: &quot;audioTrack&quot;,
                get: function() {
                    var t = this.audioTrackController;
                    return t ? t.audioTrack : -1
                },
                set: function(t) {
                    var e = this.audioTrackController;
                    e &amp;&amp; (e.audioTrack = t)
                }
            }, {
                key: &quot;allSubtitleTracks&quot;,
                get: function() {
                    var t = this.subtitleTrackController;
                    return t ? t.allSubtitleTracks : []
                }
            }, {
                key: &quot;subtitleTracks&quot;,
                get: function() {
                    var t = this.subtitleTrackController;
                    return t ? t.subtitleTracks : []
                }
            }, {
                key: &quot;subtitleTrack&quot;,
                get: function() {
                    var t = this.subtitleTrackController;
                    return t ? t.subtitleTrack : -1
                },
                set: function(t) {
                    var e = this.subtitleTrackController;
                    e &amp;&amp; (e.subtitleTrack = t)
                }
            }, {
                key: &quot;media&quot;,
                get: function() {
                    return this._media
                }
            }, {
                key: &quot;subtitleDisplay&quot;,
                get: function() {
                    var t = this.subtitleTrackController;
                    return !!t &amp;&amp; t.subtitleDisplay
                },
                set: function(t) {
                    var e = this.subtitleTrackController;
                    e &amp;&amp; (e.subtitleDisplay = t)
                }
            }, {
                key: &quot;lowLatencyMode&quot;,
                get: function() {
                    return this.config.lowLatencyMode
                },
                set: function(t) {
                    this.config.lowLatencyMode = t
                }
            }, {
                key: &quot;liveSyncPosition&quot;,
                get: function() {
                    return this.latencyController.liveSyncPosition
                }
            }, {
                key: &quot;latency&quot;,
                get: function() {
                    return this.latencyController.latency
                }
            }, {
                key: &quot;maxLatency&quot;,
                get: function() {
                    return this.latencyController.maxLatency
                }
            }, {
                key: &quot;targetLatency&quot;,
                get: function() {
                    return this.latencyController.targetLatency
                }
            }, {
                key: &quot;drift&quot;,
                get: function() {
                    return this.latencyController.drift
                }
            }, {
                key: &quot;forceStartLoad&quot;,
                get: function() {
                    return this.streamController.forceStartLoad
                }
            }], [{
                key: &quot;version&quot;,
                get: function() {
                    return &quot;1.5.11&quot;
                }
            }, {
                key: &quot;Events&quot;,
                get: function() {
                    return S
                }
            }, {
                key: &quot;ErrorTypes&quot;,
                get: function() {
                    return L
                }
            }, {
                key: &quot;ErrorDetails&quot;,
                get: function() {
                    return A
                }
            }, {
                key: &quot;DefaultConfig&quot;,
                get: function() {
                    return t.defaultConfig ? t.defaultConfig : Js
                },
                set: function(e) {
                    t.defaultConfig = e
                }
            }]),
            t
        }();
        return oo.defaultConfig = void 0,
        oo
    }
    ,
    &quot;object&quot; == typeof exports &amp;&amp; &quot;undefined&quot; != typeof module ? module.exports = i() : &quot;function&quot; == typeof define &amp;&amp; define.amd ? define(i) : (r = &quot;undefined&quot; != typeof globalThis ? globalThis : r || self).Hls = i()
}(!1);
//# sourceMappingURL=hls.min.js.map

                      
                      &lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/5496202894947244132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/06/t20-world-cup-2024.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/5496202894947244132'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/5496202894947244132'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/06/t20-world-cup-2024.html' title='T20 world Cup 2024 '/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-2410205675290660624</id><published>2024-06-07T22:30:00.000-07:00</published><updated>2024-06-08T01:06:22.169-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Marathi Movies"/><title type='text'>Marathi Series Raanbaazaar</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-eQcfEFxgUtsv5CGXe6Jp_961zi_5xbadY581pg1ren4NlI1WkY8cYsvxc2qD5aCgTVwQTngPzdTah9x0s78gFg-eNp0KapcsZq84WNGq0z5ECDefIXfe4ixotFnACfV7JMHDL7DG_W3QYaQOySV-ef-YefUUXK528RfMh33HbNk2Ac7fSQB6N_0zvB8/s294/RaanBaazaar.jpeg&quot; style=&quot;display: block; padding: 1em 0; text-align: center; clear: left; float: left;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;320&quot; data-original-height=&quot;294&quot; data-original-width=&quot;220&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-eQcfEFxgUtsv5CGXe6Jp_961zi_5xbadY581pg1ren4NlI1WkY8cYsvxc2qD5aCgTVwQTngPzdTah9x0s78gFg-eNp0KapcsZq84WNGq0z5ECDefIXfe4ixotFnACfV7JMHDL7DG_W3QYaQOySV-ef-YefUUXK528RfMh33HbNk2Ac7fSQB6N_0zvB8/s320/RaanBaazaar.jpeg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;style&gt;
.video-gallery-container {
  width: 100%;
  font-family: &quot;Roboto&quot;, sans-serif;
  background: #ffd166;
  padding: 8px 0 0 0;
  margin: 0 auto;
}
  
.video-gallery-container,
.video-gallery-container * {
  box-sizing: border-box;
}

.video-gallery-container h2.title {
  text-align: center;
  font-weight: 300;
  text-transform: uppercase;
  font-size: 34px;
  margin-bottom: 24px;
}

.video-gallery-container .video-gallery {
  display: 100%;
  background: #02151e;
  justify-content: center;
  padding: 16px;
  padding-top: 24px;
  gap: 24px;
  color: #fff;
}

.video-gallery h3.video-title {
  line-height: 1.6;
  font-weight: 700;
  font-size: 20px;
  width: 100%;
}

.video-gallery .thumbnail {
  height: 120px;
  cursor: pointer;
  width: 240px;
  
}

.video-gallery .video {
  position: relative;
}

.video-gallery .video:hover .play-icon {
  opacity: 1;
}

.video-gallery .play-icon {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  pointer-events: none;
  opacity: 0;
  transition: opacity 400ms ease;
}

.video-gallery .video .play-icon img {
  height: 50px;
  width: 50px;
}

.video-gallery .all-videos {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.video-gallery .responsive-iframe {
  position: relative;
  height: 0;
  overflow: hidden;
  padding-top: 56.25%;
  padding-bottom: 30px;
}

.video-gallery .responsive-iframe iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
  @media (max-width: 900px) {
  .video-gallery-container {
    width: 100%;
  }
}
  
@media (max-width: 700px) {
  .video-gallery-container .video-gallery {
    flex-direction: column;
  }

  .video-gallery .all-videos {
    display: grid;
    grid-template-columns: 1fr 1fr;
  }

  .video-gallery .thumbnail {
    height: unset;
    width: 100%;
  }
}

@media (max-width: 500px) {
  .video-gallery .all-videos {
    grid-template-columns: 1fr;
  }

  .video-gallery-container {
    max-width: 400px;
  }

  .video-gallery-container h2.title {
    font-size: 24px;
    font-weight: bold;
  }
}
  .BorderColorChangeElement {
  	animation: BorderColorChange 1s ease-out 0s infinite alternate none running;
}
@keyframes BorderColorChange{
  	0%  { border: 10px solid #ffc0cb;}
  	100%  { border: 10px solid #ff69b4;}
}
@keyframes rotateAnim {
    0% { transform: rotate(deg);}
    100% { transform:rotate(360deg);}
}
@keyframes scaler {
  0% {
    transform: scale(1);
  }
  100% {    transform: scale(1.5);
  }
}
.imgAnim691 {
  animation: rotateAnim 10s linear 0s infinite forwards running;
}
.btnAnim691 {
  animation: scaler 1s linear 0s infinite alternate none running;
}
.btnAnim691:hover{
  animation-play-state: paused;
}
.download-button-container {
  width: 90%;
  max-width: 600px;
  background: #eee;
  margin: 24px auto;
  padding: 16px;
  text-align: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  border-radius: 10px;
  box-shadow: inset 0 10px 15px -3px rgba(0, 0, 0, 0.1);
  display: flex;
  flex-direction: column;
  align-items: center;
}

.download-button-container .download-button {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 200px;
  justify-content: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  font-size: 16px;
  font-weight: 300;
  text-transform: uppercase;
  letter-spacing: 2px;
  background: #ef233c;
  border: none;
  padding: 8px;
  cursor: pointer;
  color: #fff;
}

.download-button-container .download-button.active .download-icon {
  animation: bounceAnim 700ms infinite alternate;
}

.download-button-container .download-icon {
  width: 16px;
}

.download-info h3 {
  color: #023047;
  margin-bottom: 12px;
}

.download-info {
  height: 0;
  overflow: hidden;
  transition: all 400ms ease;
}

.download-button-container .download-button.active + .download-info {
  height: 90px;
}

.download-info .download-link {
  font-size: 14px;
  text-transform: uppercase;
  font-weight: 300;
  color: #023047;
  letter-spacing: 4px;
  text-decoration: underline;
  text-underline-offset: 5px;
}

@keyframes bounceAnim {
  to {
    transform: translateY(4px);
  }
}

&lt;/style&gt;

                                
                                
&lt;div class=&quot;video-gallery-container&quot;&gt;
      
						
  &lt;div class=&quot;pa-main&quot;&gt;
  &lt;div class=&quot;widget-content&quot;&gt;
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...Subscribe our channel for Upcomiiing New movies notification....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;
&lt;/div&gt;
      &lt;div class=&quot;video-gallery&quot;&gt;
        &lt;div class=&quot;featured-video&quot;&gt;
          &lt;div class=&quot;responsive-iframe&quot;&gt;
            &lt;iframe style=&quot;width:100%;height:100%;position:absolute;left:0px;top:0px;overflow:hidden&quot; frameborder=&quot;0&quot; type=&quot;text/html&quot; src=&quot;https://www.dailymotion.com/embed/video/x8ize49?autoplay=1&quot; width=&quot;100%&quot; height=&quot;100%&quot; allowfullscreen title=&quot;Dailymotion Video Player&quot; allow=&quot;autoplay; web-share&quot;&gt; &lt;/iframe&gt;
          &lt;/div&gt;

          &lt;h5 class=&quot;video-title&quot;&gt;
            Marathi Series Raanbaazaar Episode 1&lt;/h5&gt;
        &lt;/div&gt;
        
         &lt;hr&gt;
          &lt;div class=&quot;video-gallery&quot;&gt;
        &lt;div class=&quot;featured-video&quot;&gt;
          &lt;div class=&quot;responsive-iframe&quot;&gt;
            &lt;iframe style=&quot;width:100%;height:100%;position:absolute;left:0px;top:0px;overflow:hidden&quot; frameborder=&quot;0&quot; type=&quot;text/html&quot; src=&quot;https://www.dailymotion.com/embed/video/x8ize6b&quot; width=&quot;100%&quot; height=&quot;100%&quot; allowfullscreen title=&quot;Dailymotion Video Player&quot; allow=&quot;autoplay; web-share&quot;&gt; &lt;/iframe&gt;
          &lt;/div&gt;
          &lt;h5&gt;Marathi Series Raanbaazaar Episode 2&lt;/h5&gt;
&lt;hr&gt;
            &lt;div class=&quot;widget-content&quot;&gt;
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...Subscribe our channel for Upcomiiing New movies notification....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;
&lt;/div&gt;
      &lt;div class=&quot;video-gallery&quot;&gt;
        &lt;div class=&quot;featured-video&quot;&gt;
          &lt;div class=&quot;responsive-iframe&quot;&gt;
            &lt;iframe style=&quot;width:100%;height:100%;position:absolute;left:0px;top:0px;overflow:hidden&quot; frameborder=&quot;0&quot; type=&quot;text/html&quot; src=&quot;https://www.dailymotion.com/embed/video/x8ize8s&quot; width=&quot;100%&quot; height=&quot;100%&quot; allowfullscreen title=&quot;Dailymotion Video Player&quot; allow=&quot;autoplay; web-share&quot;&gt; &lt;/iframe&gt;
          &lt;/div&gt;

          &lt;h5 class=&quot;video-title&quot;&gt;
            Marathi Series Raanbaazaar Episode 3&lt;/h5&gt;
        &lt;/div&gt;
  &lt;hr&gt;
&lt;div class=&quot;widget-content&quot;&gt;
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...Subscribe our channel for Upcomiiing New movies notification....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;
&lt;/div&gt;
      &lt;div class=&quot;video-gallery&quot;&gt;
        &lt;div class=&quot;featured-video&quot;&gt;
          &lt;div class=&quot;responsive-iframe&quot;&gt;
            &lt;iframe style=&quot;width:100%;height:100%;position:absolute;left:0px;top:0px;overflow:hidden&quot; frameborder=&quot;0&quot; type=&quot;text/html&quot; src=&quot;https://www.dailymotion.com/embed/video/x8ize9w&quot; width=&quot;100%&quot; height=&quot;100%&quot; allowfullscreen title=&quot;Dailymotion Video Player&quot; allow=&quot;autoplay; web-share&quot;&gt; &lt;/iframe&gt;
          &lt;/div&gt;

          &lt;h5 class=&quot;video-title&quot;&gt;
            Marathi Series Raanbaazaar Episode 4&lt;/h5&gt;
        &lt;/div&gt;
        &lt;hr&gt;
  &lt;div class=&quot;widget-content&quot;&gt;
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...Subscribe our channel for Upcomiiing New movies notification....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;
&lt;/div&gt;
      &lt;div class=&quot;video-gallery&quot;&gt;
        &lt;div class=&quot;featured-video&quot;&gt;
          &lt;div class=&quot;responsive-iframe&quot;&gt;
            &lt;iframe style=&quot;width:100%;height:100%;position:absolute;left:0px;top:0px;overflow:hidden&quot; frameborder=&quot;0&quot; type=&quot;text/html&quot; src=&quot;https://www.dailymotion.com/embed/video/x8izeb3&quot; width=&quot;100%&quot; height=&quot;100%&quot; allowfullscreen title=&quot;Dailymotion Video Player&quot; allow=&quot;autoplay; web-share&quot;&gt; &lt;/iframe&gt;
          &lt;/div&gt;

          &lt;h5 class=&quot;video-title&quot;&gt;
            Marathi Series Raanbaazaar Episode 5&lt;/h5&gt;
        &lt;/div&gt;
  &lt;hr&gt;
        &lt;div class=&quot;widget-content&quot;&gt;
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...Subscribe our channel for Upcomiiing New movies notification....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;
&lt;/div&gt;
      &lt;div class=&quot;video-gallery&quot;&gt;
        &lt;div class=&quot;featured-video&quot;&gt;
          &lt;div class=&quot;responsive-iframe&quot;&gt;
            &lt;iframe style=&quot;width:100%;height:100%;position:absolute;left:0px;top:0px;overflow:hidden&quot; frameborder=&quot;0&quot; type=&quot;text/html&quot; src=&quot;https://www.dailymotion.com/embed/video/x8ized3&quot; width=&quot;100%&quot; height=&quot;100%&quot; allowfullscreen title=&quot;Dailymotion Video Player&quot; allow=&quot;autoplay; web-share&quot;&gt; &lt;/iframe&gt;
          &lt;/div&gt;

          &lt;h5 class=&quot;video-title&quot;&gt;
            Marathi Series Raanbaazaar Episode 6&lt;/h5&gt;
        &lt;/div&gt;
  &lt;hr&gt;    

&lt;h1&gt;&lt;p&gt;Marathi Series Raanbaazaar 2023 Web Series Download here..&lt;/p&gt;&lt;/h1&gt;

  &lt;div class=&quot;download-button-container&quot;&gt;
      &lt;button class=&quot;download-button&quot;&gt;
        Download
        &lt;span class=&quot;download-icon&quot;&gt;
          &lt;svg class=&quot;h-6 w-6&quot; fill=&quot;none&quot; stroke-width=&quot;2&quot; stroke=&quot;currentColor&quot; viewbox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
            &lt;path d=&quot;M19 14l-7 7m0 0l-7-7m7 7V3&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
          &lt;/path&gt;&lt;/svg&gt;
        &lt;/span&gt;
      &lt;/button&gt;
    

      &lt;div class=&quot;download-info&quot;&gt;
        &lt;h3&gt;Your download link will appear in 5 seconds.&lt;/h3&gt;
      &lt;/div&gt;
    &lt;/div&gt;



&lt;script&gt;
const downloadButton = document.querySelector(
  &quot;.download-button-container .download-button&quot;
);
const downloadHeading = document.querySelector(&quot;.download-info h3&quot;);
const downloadInfo = document.querySelector(&quot;.download-info&quot;);

let downloadTimer;
let remainingTime = 5;
let linkDisplayed = false;

const showDownloadLink = () =&gt; {
  if (!linkDisplayed) {
    const downloadLink = document.createElement(&quot;a&quot;);
    downloadLink.href = &quot;https://5gomovies.in/51353&quot;;
    downloadLink.innerHTML = &quot;Click Here&quot;;
    downloadLink.classList.add(&quot;download-link&quot;);
    downloadInfo.appendChild(downloadLink);
  }
  linkDisplayed = true;
};

downloadButton.addEventListener(&quot;click&quot;, () =&gt; {
  downloadButton.classList.add(&quot;active&quot;);

  downloadTimer = setInterval(() =&gt; {
    remainingTime--;

    if (remainingTime &lt;= 0) {
      clearInterval(downloadTimer);
      showDownloadLink();
      downloadHeading.innerHTML = &quot;Here is the download link.&quot;;
    } else {
      downloadHeading.innerHTML = `Your download link will appear in ${remainingTime} seconds.`;
    }
  }, 1000);
});
&lt;/script&gt;

        
  &lt;p&gt;Or Direct Download From Above link &lt;/p&gt;
  
  

  

  
  &lt;!--/main--&gt;
&lt;center&gt;&lt;!--info line, ad unit name: Footer--&gt;

&lt;script async=&quot;&quot; src=&quot;https://tags.h12-media.com/load2.js&quot;&gt;&lt;/script&gt;&lt;/center&gt;



            &lt;div id=&quot;copyright&quot;&gt;
                &lt;p&gt;&lt;a href=&quot;&quot; id=&quot;logo-footer&quot;&gt;&lt;/a&gt;&lt;/p&gt;
                &lt;p&gt;Copyright © &lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;. All Rights
                    Reserved 2023&lt;/p&gt;
            &lt;/div&gt;
            
       

&lt;b&gt;We do not host any files on it’s servers. All files or contents hosted on third party websites.
We do not accept responsibility for contents hosted on third party websites.
We just index those links which are already available in internet&lt;/b&gt;


&lt;script&gt;
const videoThumbnails = document.querySelectorAll(
  &quot;.video-gallery .all-videos .thumbnail&quot;
);
const videoPlayer = document.querySelector(
  &quot;.video-gallery .featured-video iframe&quot;
);
const videoTitle = document.querySelector(&quot;.video-gallery .video-title&quot;);

const showVideo = (videoId, title) =&gt; {
  let videoUrl = `https://v.okmalayalam.org/video/${videoId}?rel=0`;
  videoPlayer.setAttribute(&quot;src&quot;, videoUrl);
  videoTitle.innerHTML = title;
};

videoThumbnails.forEach((v) =&gt; {
  v.addEventListener(&quot;click&quot;, () =&gt; {
    showVideo(v.dataset.id, v.dataset.title);
  });
});

&lt;/script&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/2410205675290660624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/06/marathi-series-raanbaazaar.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/2410205675290660624'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/2410205675290660624'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/06/marathi-series-raanbaazaar.html' title='Marathi Series Raanbaazaar'/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-eQcfEFxgUtsv5CGXe6Jp_961zi_5xbadY581pg1ren4NlI1WkY8cYsvxc2qD5aCgTVwQTngPzdTah9x0s78gFg-eNp0KapcsZq84WNGq0z5ECDefIXfe4ixotFnACfV7JMHDL7DG_W3QYaQOySV-ef-YefUUXK528RfMh33HbNk2Ac7fSQB6N_0zvB8/s72-c/RaanBaazaar.jpeg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-4761997898766933810</id><published>2024-06-02T06:55:00.000-07:00</published><updated>2024-06-02T06:58:13.296-07:00</updated><title type='text'>Aranmanai 4 (Hindi + Tamil)</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhcID3gD6lfZZDxyVt5NyWWtkZmXnH8-r0jZuyqGy-qp2To3zInq-keM50OaX3YDL4XELSyXmxltkrYyer0Ivs9nVR9bpnbF65BLqipnGG-EymonnnPuTOm7g-cssIZcYKv0QAUEhcLkFNAGzquOQTxObQ3CTuFOkyoaR9mM93IdeS8hAB8dLHjOvwa_U/s220/Aranmanai-4-2024-Hindi-Language.png&quot; style=&quot;clear: left; display: block; float: left; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;220&quot; data-original-width=&quot;165&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhcID3gD6lfZZDxyVt5NyWWtkZmXnH8-r0jZuyqGy-qp2To3zInq-keM50OaX3YDL4XELSyXmxltkrYyer0Ivs9nVR9bpnbF65BLqipnGG-EymonnnPuTOm7g-cssIZcYKv0QAUEhcLkFNAGzquOQTxObQ3CTuFOkyoaR9mM93IdeS8hAB8dLHjOvwa_U/s320/Aranmanai-4-2024-Hindi-Language.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;style&gt;
.video-gallery-container {
  width: 100%;
  font-family: &quot;Roboto&quot;, sans-serif;
  background: #ffd166;
  padding: 8px 0 0 0;
  margin: 0 auto;
}
  
.video-gallery-container,
.video-gallery-container * {
  box-sizing: border-box;
}
 
.video-gallery-container h2.title {
  text-align: center;
  font-weight: 300;
  text-transform: uppercase;
  font-size: 34px;
  margin-bottom: 24px;
}

.video-gallery-container .video-gallery {
  display: 100%;
  background: #02151e;
  justify-content: center;
  padding: 16px;
  padding-top: 24px;
  gap: 24px;
  color: #fff;
}

.video-gallery h3.video-title {
  line-height: 1.6;
  font-weight: 700;
  font-size: 20px;
  width: 100%;
}

.video-gallery .thumbnail {
  height: 120px;
  cursor: pointer;
  width: 240px;
  
}

.video-gallery .video {
  position: relative;
}

.video-gallery .video:hover .play-icon {
  opacity: 1;
}

.video-gallery .play-icon {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  pointer-events: none;
  opacity: 0;
  transition: opacity 400ms ease;
}

.video-gallery .video .play-icon img {
  height: 50px;
  width: 50px;
}

.video-gallery .all-videos {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.video-gallery .responsive-iframe {
  position: relative;
  height: 0;
  overflow: hidden;
  padding-top: 56.25%;
  padding-bottom: 30px;
}

.video-gallery .responsive-iframe iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
  @media (max-width: 900px) {
  .video-gallery-container {
    width: 100%;
  }
}
  
@media (max-width: 700px) {
  .video-gallery-container .video-gallery {
    flex-direction: column;
  }

  .video-gallery .all-videos {
    display: grid;
    grid-template-columns: 1fr 1fr;
  }

  .video-gallery .thumbnail {
    height: unset;
    width: 100%;
  }
}

@media (max-width: 500px) {
  .video-gallery .all-videos {
    grid-template-columns: 1fr;
  }

  .video-gallery-container {
    max-width: 400px;
  }

  .video-gallery-container h2.title {
    font-size: 24px;
    font-weight: bold;
  }
}
 .BorderColorChangeElement {
  	animation: BorderColorChange 1s ease-out 0s infinite alternate none running;
}
@keyframes BorderColorChange{
  	0%  { border: 10px solid #ffc0cb;}
  	100%  { border: 10px solid #ff69b4;}
}
@keyframes rotateAnim {
    0% { transform: rotate(deg);}
    100% { transform:rotate(360deg);}
}
@keyframes scaler {
  0% {
    transform: scale(1);
  }
  100% {    transform: scale(1.5);
  }
}
.imgAnim691 {
  animation: rotateAnim 10s linear 0s infinite forwards running;
}
.btnAnim691 {
  animation: scaler 1s linear 0s infinite alternate none running;
}
.btnAnim691:hover{
  animation-play-state: paused;
}
.download-button-container {
  width: 90%;
  max-width: 600px;
  background: #eee;
  margin: 24px auto;
  padding: 16px;
  text-align: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  border-radius: 10px;
  box-shadow: inset 0 10px 15px -3px rgba(0, 0, 0, 0.1);
  display: flex;
  flex-direction: column;
  align-items: center;
}

.download-button-container .download-button {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 200px;
  justify-content: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  font-size: 16px;
  font-weight: 300;
  text-transform: uppercase;
  letter-spacing: 2px;
  background: #ef233c;
  border: none;
  padding: 8px;
  cursor: pointer;
  color: #fff;
}

.download-button-container .download-button.active .download-icon {
  animation: bounceAnim 700ms infinite alternate;
}

.download-button-container .download-icon {
  width: 16px;
}

.download-info h3 {
  color: #023047;
  margin-bottom: 12px;
}

.download-info {
  height: 0;
  overflow: hidden;
  transition: all 400ms ease;
}

.download-button-container .download-button.active + .download-info {
  height: 90px;
}

.download-info .download-link {
  font-size: 14px;
  text-transform: uppercase;
  font-weight: 300;
  color: #023047;
  letter-spacing: 4px;
  text-decoration: underline;
  text-underline-offset: 5px;
}

@keyframes bounceAnim {
  to {
    transform: translateY(4px);
  }
}
  

&lt;/style&gt;

                             
                              
&lt;div class=&quot;video-gallery-container&quot;&gt;
  
&lt;div class=&quot;detail-mod&quot;&gt;
                                &lt;div class=&quot;dm-thumb&quot;&gt;&lt;img alt=&quot;Aranmanai 4 (Hindi)&quot; src=&quot;https://i.imgur.com/hORr8rw.jpeg&quot; title=&quot;Aranmanai 4 (Hindi)&quot; /&gt;&lt;/div&gt;
                                &lt;h3&gt;Aranmanai 4 (Hindi)&lt;/h3&gt;
                                				
                       

                            &lt;div class=&quot;desc&quot;&gt;  &lt;p&gt;Watch Aranmanai 4 (2024) Hindi full movie online SspectrumLive TV,&lt;br /&gt; Aranmanai 4 (Hindi) movie download 720p HD quality 300MB and 1GB print A unique family and their experience. After his sister’s suspicious death, a man decides to discover the hidden truth, setting off a chasm for chaos and terror.&lt;/p&gt;
														&lt;/div&gt;
                            &lt;div class=&quot;mvic-info&quot;&gt;
                                &lt;div class=&quot;mvici-left&quot;&gt;
                                    &lt;p&gt;&lt;strong&gt;Genres: &lt;/strong&gt;Hindi Dubbed&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Actors: &lt;/strong&gt;Raashi Khanna, Sundar C, Tamannaah Bhatia&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Director: &lt;/strong&gt;Sundar C&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Country: &lt;/strong&gt;India&lt;br /&gt;&lt;/p&gt;
                                 &lt;/div&gt;
                                &lt;div class=&quot;mvici-right&quot;&gt;
									                                    &lt;p&gt;&lt;strong&gt;Duration:&lt;/strong&gt;  min&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; &lt;span class=&quot;quality&quot;&gt;HDTS&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; 2024&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;IMDb:&lt;/strong&gt; 6.4&lt;/p&gt;

                                                              &lt;p id=&quot;imdb&quot;&gt;&lt;strong&gt;IMDb ID:&lt;/strong&gt; &lt;span id=&quot;imdb_id&quot;&gt;&lt;/span&gt;&lt;/p&gt;    
                                                          &lt;/div&gt;
                                &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;/div&gt;
                            &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;!--keywords--&gt;
                            &lt;div id=&quot;mv-keywords&quot;&gt;
                                &lt;strong class=&quot;mr10&quot;&gt;Keywords:&lt;/strong&gt;
									&lt;h5&gt;Aranmanai 4 (2024) Hindi Movie&lt;/h5&gt;&lt;h5&gt;Aranmanai 4&amp;nbsp;&lt;/h5&gt;                            &lt;/div&gt;
                        &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                    &lt;/div&gt;
  
  
  
  
  &lt;div class=&quot;pa-main&quot;&gt;
  &lt;div class=&quot;widget-content&quot;&gt;
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...Subscribe our channel for Upcomiiing New movies notification....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;
&lt;/div&gt;
    
    &lt;center&gt; &lt;h3&gt;Aranmanai 4 (Hindi) Player 1 &lt;/h3&gt;&lt;/center&gt;
    
    &lt;div class=&quot;container2&quot;&gt;
      
        &lt;div class=&quot;box box1&quot;&gt;&lt;/div&gt;
	
          &lt;div class=&quot;box box2&quot;&gt;
          
         &lt;div class=&quot;video-container&quot;&gt;
          
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;https://teamomw5.com/xwwm2qewpegqkov2bs4eamwkuolgmys6lryrze7hgcepjg4q4omrgzs47pdqkepjg4q4omu7mhjg2aq/master.m3u8&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;/div&gt;                
   &lt;hr /&gt; 
 &lt;center&gt; &lt;h3&gt;Aranmanai 4 (Tamil) Player 2 &lt;/h3&gt;&lt;/center&gt;
    
    &lt;div class=&quot;container2&quot;&gt;
      
        &lt;div class=&quot;box box1&quot;&gt;&lt;/div&gt;
	
          &lt;div class=&quot;box box2&quot;&gt;
          
         &lt;div class=&quot;video-container&quot;&gt;
          
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;https://okmalayalam.org/bewab/8.php?url=https://teamomw6.com/hls/xwwm3te7pegqkov2bs4eazuyxjljv6tlwqiv43qfo,wjuqiouq6rgpyk3e52a,6juqiouq6rb5tzcywwq,.urlset/master.m3u8&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;/div&gt;                
    
    &lt;div class=&quot;download-button-container&quot;&gt;
      &lt;button class=&quot;download-button&quot;&gt;Download&lt;span class=&quot;download-icon&quot;&gt;
          &lt;svg class=&quot;h-6 w-6&quot; fill=&quot;none&quot; stroke-width=&quot;2&quot; stroke=&quot;currentColor&quot; viewbox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
            &lt;path d=&quot;M19 14l-7 7m0 0l-7-7m7 7V3&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
          &lt;/path&gt;&lt;/svg&gt;
        &lt;/span&gt;
      &lt;/button&gt;
    

      &lt;div class=&quot;download-info&quot;&gt;
        &lt;h3&gt;Your download link will appear in 5 seconds.&lt;/h3&gt;
      &lt;/div&gt;
    &lt;/div&gt;
 






&lt;script&gt;
const downloadButton = document.querySelector(
  &quot;.download-button-container .download-button&quot;
);
const downloadHeading = document.querySelector(&quot;.download-info h3&quot;);
const downloadInfo = document.querySelector(&quot;.download-info&quot;);

let downloadTimer;
let remainingTime = 5;
let linkDisplayed = false;

const showDownloadLink = () =&gt; {
  if (!linkDisplayed) {
    const downloadLink = document.createElement(&quot;a&quot;);
    downloadLink.href = &quot;https://sspectrumlivetv.blogspot.com/p/your-download-link-will-appear-in-5_87.html&quot;;
    downloadLink.innerHTML = &quot;Click Here&quot;;
    downloadLink.classList.add(&quot;download-link&quot;);
    downloadInfo.appendChild(downloadLink);
  }
  linkDisplayed = true;
};

downloadButton.addEventListener(&quot;click&quot;, () =&gt; {
  downloadButton.classList.add(&quot;active&quot;);

  downloadTimer = setInterval(() =&gt; {
    remainingTime--;

    if (remainingTime &lt;= 0) {
      clearInterval(downloadTimer);
      showDownloadLink();
      downloadHeading.innerHTML = &quot;Here is the download link.&quot;;
    } else {
      downloadHeading.innerHTML = `Your download link will appear in ${remainingTime} seconds.`;
    }
  }, 1000);
});
&lt;/script&gt;

  &lt;p&gt;Or Direct Download From Above link &lt;/p&gt;


      
  


  

  

  
  &lt;!--/main--&gt;
&lt;center&gt;&lt;!--info line, ad unit name: Footer--&gt;

&lt;script async=&quot;&quot; src=&quot;https://tags.h12-media.com/load2.js&quot;&gt;&lt;/script&gt;&lt;/center&gt;



            &lt;div id=&quot;copyright&quot;&gt;
                &lt;p&gt;&lt;a href=&quot;&quot; id=&quot;logo-footer&quot;&gt;&lt;/a&gt;&lt;/p&gt;
                &lt;p&gt;Copyright © &lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;. All Rights
                    Reserved 2023&lt;/p&gt;
            &lt;/div&gt;
  
&lt;b&gt;We do not host any files on it’s servers. All files or contents hosted on third party websites.
We do not accept responsibility for contents hosted on third party websites.
We just index those links which are already available in internet&lt;/b&gt;


&lt;/div&gt;&lt;/div&gt;

&lt;style&gt;

.codehap {
      display: flex;
      flex-wrap: wrap;
    }

    .codehapBox, .codehap_box {
      box-sizing: border-box;
      width: 100%;
      padding: 10px;
      border: 1px solid #ccc;
    }

    @media (min-width: 600px) {
      .codehapBox {
        width: 50%;
      }
    }
    
.video-container {
    position: relative;
    padding-bottom: 56.25%;
    padding-top: 0px;
    height: 0%;
    overflow: hidden;
}

.video-container iframe {
    position: absolute;
    top:0;
    left: 0%;
    width: 100%;
    height: 100%;
}
.codehapContent{
 
margin:auto;


}

&lt;/style&gt;


	

 
&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/4761997898766933810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/06/aranmanai-4-hindi.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/4761997898766933810'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/4761997898766933810'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/06/aranmanai-4-hindi.html' title='Aranmanai 4 (Hindi + Tamil)'/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhcID3gD6lfZZDxyVt5NyWWtkZmXnH8-r0jZuyqGy-qp2To3zInq-keM50OaX3YDL4XELSyXmxltkrYyer0Ivs9nVR9bpnbF65BLqipnGG-EymonnnPuTOm7g-cssIZcYKv0QAUEhcLkFNAGzquOQTxObQ3CTuFOkyoaR9mM93IdeS8hAB8dLHjOvwa_U/s72-c/Aranmanai-4-2024-Hindi-Language.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-8461868756069467572</id><published>2024-06-02T03:04:00.000-07:00</published><updated>2024-06-02T03:07:46.993-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bollywood Movie"/><title type='text'>Savi (Hindi)</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgarSOsuV_E3DJ5Ne4NgxRQhaVOuoUtkQ79RXr1h0Kyc5-rP43GbVTgJghSou9u6L65WhBJue4JKx3X33n87e1c4WsW6_TPTJA-25uZeaYd2c35E5_ch6O44QtZQJ4pr1nJNHe_MLcnQS__9tP2-GISOUMHCKO01mvnkRKJDdxPPlTvAJVA82AQB7GevsE/s220/Savi-2024-Hindi-Language.png&quot; style=&quot;clear: left; display: block; float: left; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;220&quot; data-original-width=&quot;165&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgarSOsuV_E3DJ5Ne4NgxRQhaVOuoUtkQ79RXr1h0Kyc5-rP43GbVTgJghSou9u6L65WhBJue4JKx3X33n87e1c4WsW6_TPTJA-25uZeaYd2c35E5_ch6O44QtZQJ4pr1nJNHe_MLcnQS__9tP2-GISOUMHCKO01mvnkRKJDdxPPlTvAJVA82AQB7GevsE/s320/Savi-2024-Hindi-Language.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;style&gt;
.video-gallery-container {
  width: 100%;
  font-family: &quot;Roboto&quot;, sans-serif;
  background: #ffd166;
  padding: 8px 0 0 0;
  margin: 0 auto;
}
  
.video-gallery-container,
.video-gallery-container * {
  box-sizing: border-box;
}
 
.video-gallery-container h2.title {
  text-align: center;
  font-weight: 300;
  text-transform: uppercase;
  font-size: 34px;
  margin-bottom: 24px;
}

.video-gallery-container .video-gallery {
  display: 100%;
  background: #02151e;
  justify-content: center;
  padding: 16px;
  padding-top: 24px;
  gap: 24px;
  color: #fff;
}

.video-gallery h3.video-title {
  line-height: 1.6;
  font-weight: 700;
  font-size: 20px;
  width: 100%;
}

.video-gallery .thumbnail {
  height: 120px;
  cursor: pointer;
  width: 240px;
  
}

.video-gallery .video {
  position: relative;
}

.video-gallery .video:hover .play-icon {
  opacity: 1;
}

.video-gallery .play-icon {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  pointer-events: none;
  opacity: 0;
  transition: opacity 400ms ease;
}

.video-gallery .video .play-icon img {
  height: 50px;
  width: 50px;
}

.video-gallery .all-videos {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.video-gallery .responsive-iframe {
  position: relative;
  height: 0;
  overflow: hidden;
  padding-top: 56.25%;
  padding-bottom: 30px;
}

.video-gallery .responsive-iframe iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
  @media (max-width: 900px) {
  .video-gallery-container {
    width: 100%;
  }
}
  
@media (max-width: 700px) {
  .video-gallery-container .video-gallery {
    flex-direction: column;
  }

  .video-gallery .all-videos {
    display: grid;
    grid-template-columns: 1fr 1fr;
  }

  .video-gallery .thumbnail {
    height: unset;
    width: 100%;
  }
}

@media (max-width: 500px) {
  .video-gallery .all-videos {
    grid-template-columns: 1fr;
  }

  .video-gallery-container {
    max-width: 400px;
  }

  .video-gallery-container h2.title {
    font-size: 24px;
    font-weight: bold;
  }
}
 .BorderColorChangeElement {
  	animation: BorderColorChange 1s ease-out 0s infinite alternate none running;
}
@keyframes BorderColorChange{
  	0%  { border: 10px solid #ffc0cb;}
  	100%  { border: 10px solid #ff69b4;}
}
@keyframes rotateAnim {
    0% { transform: rotate(deg);}
    100% { transform:rotate(360deg);}
}
@keyframes scaler {
  0% {
    transform: scale(1);
  }
  100% {    transform: scale(1.5);
  }
}
.imgAnim691 {
  animation: rotateAnim 10s linear 0s infinite forwards running;
}
.btnAnim691 {
  animation: scaler 1s linear 0s infinite alternate none running;
}
.btnAnim691:hover{
  animation-play-state: paused;
}
.download-button-container {
  width: 90%;
  max-width: 600px;
  background: #eee;
  margin: 24px auto;
  padding: 16px;
  text-align: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  border-radius: 10px;
  box-shadow: inset 0 10px 15px -3px rgba(0, 0, 0, 0.1);
  display: flex;
  flex-direction: column;
  align-items: center;
}

.download-button-container .download-button {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 200px;
  justify-content: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  font-size: 16px;
  font-weight: 300;
  text-transform: uppercase;
  letter-spacing: 2px;
  background: #ef233c;
  border: none;
  padding: 8px;
  cursor: pointer;
  color: #fff;
}

.download-button-container .download-button.active .download-icon {
  animation: bounceAnim 700ms infinite alternate;
}

.download-button-container .download-icon {
  width: 16px;
}

.download-info h3 {
  color: #023047;
  margin-bottom: 12px;
}

.download-info {
  height: 0;
  overflow: hidden;
  transition: all 400ms ease;
}

.download-button-container .download-button.active + .download-info {
  height: 90px;
}

.download-info .download-link {
  font-size: 14px;
  text-transform: uppercase;
  font-weight: 300;
  color: #023047;
  letter-spacing: 4px;
  text-decoration: underline;
  text-underline-offset: 5px;
}

@keyframes bounceAnim {
  to {
    transform: translateY(4px);
  }
}
  

&lt;/style&gt;

                             
                              
&lt;div class=&quot;video-gallery-container&quot;&gt;
  
&lt;div class=&quot;detail-mod&quot;&gt;
                                &lt;div class=&quot;dm-thumb&quot;&gt;&lt;img alt=&quot;Savi (Hindi)&quot; src=&quot;https://www.nowrunning.com/content/movie/2024/savi-29595/bg_savi.jpg&quot; title=&quot;Savi (Hindi)&quot; /&gt;&lt;/div&gt;
  
                                &lt;h3&gt;Savi (Hindi)&lt;/h3&gt;
                                				

                       

                            &lt;div class=&quot;desc&quot;&gt;  &lt;p&gt;Watch Savi (2024) Hindi full movie online SspectrumLive TV,&lt;br /&gt; Savi (Hindi) movie download 720p HD quality 300MB and 1GB print A unique family and their experience. Savi a simple housewife attempts a daring jailbreak to get her husband out of one of England’s high security prisons With 400 inmates, 75 armed guards, 60 surveillance cameras.&lt;/p&gt;
														&lt;/div&gt;
                            &lt;div class=&quot;mvic-info&quot;&gt;
                                &lt;div class=&quot;mvici-left&quot;&gt;
                                    &lt;p&gt;&lt;strong&gt;Genres: &lt;/strong&gt;Watch Hindi Movies&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Actors: &lt;/strong&gt;Anil Kapoor, Divya Khosla Kumar, Harshvardhan Rane&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Director: &lt;/strong&gt;Abhinay Deo&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Country: &lt;/strong&gt;India&lt;br /&gt;&lt;/p&gt;
                                 &lt;/div&gt;
                                &lt;div class=&quot;mvici-right&quot;&gt;
									                                    &lt;p&gt;&lt;strong&gt;Duration:&lt;/strong&gt;  min&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; &lt;span class=&quot;quality&quot;&gt;CAM&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; 2024&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;IMDb:&lt;/strong&gt; 5.4&lt;/p&gt;

                                                              &lt;p id=&quot;imdb&quot;&gt;&lt;strong&gt;IMDb ID:&lt;/strong&gt; &lt;span id=&quot;imdb_id&quot;&gt;&lt;/span&gt;&lt;/p&gt;    
                                                          &lt;/div&gt;
                                &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;/div&gt;
                            &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;!--keywords--&gt;
                            &lt;div id=&quot;mv-keywords&quot;&gt;
                                &lt;strong class=&quot;mr10&quot;&gt;Keywords:&lt;/strong&gt;
									&lt;h5&gt;Savi (2024) Hindi Movie&lt;/h5&gt;&lt;h5&gt;Savi on SspectumLive TV&lt;/h5&gt;                            &lt;/div&gt;
                        &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                    &lt;/div&gt;  
  
  
  
  
  &lt;div class=&quot;pa-main&quot;&gt;
  &lt;div class=&quot;widget-content&quot;&gt;
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...Subscribe our channel for Upcomiiing New movies notification....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;
&lt;/div&gt;
    
    &lt;center&gt; &lt;h3&gt;Savi (Hindi) Player 1 &lt;/h3&gt;&lt;/center&gt;
    
    &lt;div class=&quot;container2&quot;&gt;
      
        &lt;div class=&quot;box box1&quot;&gt;&lt;/div&gt;
	
          &lt;div class=&quot;box box2&quot;&gt;
          
         &lt;div class=&quot;video-container&quot;&gt;
          
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;https://teamomw5.com/xwwm3p4wpegqkov2bs4eamoxuqx2gsojfmbew65sodwsskadcywuwhtbg6qalwsskadcyw34ire76ma/master.m3u8&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;/div&gt;                
   &lt;hr&gt; 
 &lt;center&gt; &lt;h3&gt;Savi (Hindi) Player 2 &lt;/h3&gt;&lt;/center&gt;
    
    &lt;div class=&quot;container2&quot;&gt;
      
        &lt;div class=&quot;box box1&quot;&gt;&lt;/div&gt;
	
          &lt;div class=&quot;box box2&quot;&gt;
          
         &lt;div class=&quot;video-container&quot;&gt;
          
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;https://okmalayalam.org/bewab/8.php?url=https://teamomw5.com/hls/xwwm3p4wpegqkov2bs4eamoxuqx2gsojfmbew65so,dwsskadcywuwhtbg6qa,lwsskadcyw34ire76ma,.urlset/master.m3u8&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;/div&gt;                
    
    &lt;div class=&quot;download-button-container&quot;&gt;
      &lt;button class=&quot;download-button&quot;&gt;Download&lt;span class=&quot;download-icon&quot;&gt;
          &lt;svg class=&quot;h-6 w-6&quot; fill=&quot;none&quot; stroke-width=&quot;2&quot; stroke=&quot;currentColor&quot; viewbox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
            &lt;path d=&quot;M19 14l-7 7m0 0l-7-7m7 7V3&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
          &lt;/path&gt;&lt;/svg&gt;
        &lt;/span&gt;
      &lt;/button&gt;
    

      &lt;div class=&quot;download-info&quot;&gt;
        &lt;h3&gt;Your download link will appear in 5 seconds.&lt;/h3&gt;
      &lt;/div&gt;
    &lt;/div&gt;
 






&lt;script&gt;
const downloadButton = document.querySelector(
  &quot;.download-button-container .download-button&quot;
);
const downloadHeading = document.querySelector(&quot;.download-info h3&quot;);
const downloadInfo = document.querySelector(&quot;.download-info&quot;);

let downloadTimer;
let remainingTime = 5;
let linkDisplayed = false;

const showDownloadLink = () =&gt; {
  if (!linkDisplayed) {
    const downloadLink = document.createElement(&quot;a&quot;);
    downloadLink.href = &quot;https://sspectrumlivetv.blogspot.com/p/sspectrumlive-tv-mobile-app-download.html&quot;;
    downloadLink.innerHTML = &quot;Click Here&quot;;
    downloadLink.classList.add(&quot;download-link&quot;);
    downloadInfo.appendChild(downloadLink);
  }
  linkDisplayed = true;
};

downloadButton.addEventListener(&quot;click&quot;, () =&gt; {
  downloadButton.classList.add(&quot;active&quot;);

  downloadTimer = setInterval(() =&gt; {
    remainingTime--;

    if (remainingTime &lt;= 0) {
      clearInterval(downloadTimer);
      showDownloadLink();
      downloadHeading.innerHTML = &quot;Here is the download link.&quot;;
    } else {
      downloadHeading.innerHTML = `Your download link will appear in ${remainingTime} seconds.`;
    }
  }, 1000);
});
&lt;/script&gt;

  &lt;p&gt;Or Direct Download From Above link &lt;/p&gt;


      
  


  

  

  
  &lt;!--/main--&gt;
&lt;center&gt;&lt;!--info line, ad unit name: Footer--&gt;

&lt;script async=&quot;&quot; src=&quot;https://tags.h12-media.com/load2.js&quot;&gt;&lt;/script&gt;&lt;/center&gt;



            &lt;div id=&quot;copyright&quot;&gt;
                &lt;p&gt;&lt;a href=&quot;&quot; id=&quot;logo-footer&quot;&gt;&lt;/a&gt;&lt;/p&gt;
                &lt;p&gt;Copyright © &lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;. All Rights
                    Reserved 2023&lt;/p&gt;
            &lt;/div&gt;
  
&lt;b&gt;We do not host any files on it’s servers. All files or contents hosted on third party websites.
We do not accept responsibility for contents hosted on third party websites.
We just index those links which are already available in internet&lt;/b&gt;


&lt;/div&gt;&lt;/div&gt;

&lt;style&gt;

.codehap {
      display: flex;
      flex-wrap: wrap;
    }

    .codehapBox, .codehap_box {
      box-sizing: border-box;
      width: 100%;
      padding: 10px;
      border: 1px solid #ccc;
    }

    @media (min-width: 600px) {
      .codehapBox {
        width: 50%;
      }
    }
    
.video-container {
    position: relative;
    padding-bottom: 56.25%;
    padding-top: 0px;
    height: 0%;
    overflow: hidden;
}

.video-container iframe {
    position: absolute;
    top:0;
    left: 0%;
    width: 100%;
    height: 100%;
}
.codehapContent{
 
margin:auto;


}

&lt;/style&gt;


	

 
&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/8461868756069467572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/06/savi-hindi.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/8461868756069467572'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/8461868756069467572'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/06/savi-hindi.html' title='Savi (Hindi)'/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgarSOsuV_E3DJ5Ne4NgxRQhaVOuoUtkQ79RXr1h0Kyc5-rP43GbVTgJghSou9u6L65WhBJue4JKx3X33n87e1c4WsW6_TPTJA-25uZeaYd2c35E5_ch6O44QtZQJ4pr1nJNHe_MLcnQS__9tP2-GISOUMHCKO01mvnkRKJDdxPPlTvAJVA82AQB7GevsE/s72-c/Savi-2024-Hindi-Language.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-1950405281799955885</id><published>2024-05-31T04:25:00.000-07:00</published><updated>2024-05-31T04:25:49.943-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bollywood Movie"/><title type='text'>Mr &amp; Mrs Mahi (Hindi)</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUlaBSfm5DfHr9m02brKS9RjSvjVIB14DqGmoTrtT_poxMLtBR-gPnKmTjNi0upwxyYA9r1iskukjSzgEGGbXtdTqkGDBuCiFLxg4x9o6A_CELiaUp4rbhN2YVvnEqvkyAdbS3uKLgLYXBC9W7Z3a3aD_UcC1MhQL527jKnTVbGnFJe-salX7sVidPZpU/s220/Mr-Mrs-Mahi-2024-Hindi-Language.png&quot; style=&quot;clear: left; display: block; float: left; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;220&quot; data-original-width=&quot;165&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUlaBSfm5DfHr9m02brKS9RjSvjVIB14DqGmoTrtT_poxMLtBR-gPnKmTjNi0upwxyYA9r1iskukjSzgEGGbXtdTqkGDBuCiFLxg4x9o6A_CELiaUp4rbhN2YVvnEqvkyAdbS3uKLgLYXBC9W7Z3a3aD_UcC1MhQL527jKnTVbGnFJe-salX7sVidPZpU/s320/Mr-Mrs-Mahi-2024-Hindi-Language.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;style&gt;
.video-gallery-container {
  width: 100%;
  font-family: &quot;Roboto&quot;, sans-serif;
  background: #ffd166;
  padding: 8px 0 0 0;
  margin: 0 auto;
}
  
.video-gallery-container,
.video-gallery-container * {
  box-sizing: border-box;
}
 
.video-gallery-container h2.title {
  text-align: center;
  font-weight: 300;
  text-transform: uppercase;
  font-size: 34px;
  margin-bottom: 24px;
}

.video-gallery-container .video-gallery {
  display: 100%;
  background: #02151e;
  justify-content: center;
  padding: 16px;
  padding-top: 24px;
  gap: 24px;
  color: #fff;
}

.video-gallery h3.video-title {
  line-height: 1.6;
  font-weight: 700;
  font-size: 20px;
  width: 100%;
}

.video-gallery .thumbnail {
  height: 120px;
  cursor: pointer;
  width: 240px;
  
}

.video-gallery .video {
  position: relative;
}

.video-gallery .video:hover .play-icon {
  opacity: 1;
}

.video-gallery .play-icon {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  pointer-events: none;
  opacity: 0;
  transition: opacity 400ms ease;
}

.video-gallery .video .play-icon img {
  height: 50px;
  width: 50px;
}

.video-gallery .all-videos {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.video-gallery .responsive-iframe {
  position: relative;
  height: 0;
  overflow: hidden;
  padding-top: 56.25%;
  padding-bottom: 30px;
}

.video-gallery .responsive-iframe iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
  @media (max-width: 900px) {
  .video-gallery-container {
    width: 100%;
  }
}
  
@media (max-width: 700px) {
  .video-gallery-container .video-gallery {
    flex-direction: column;
  }

  .video-gallery .all-videos {
    display: grid;
    grid-template-columns: 1fr 1fr;
  }

  .video-gallery .thumbnail {
    height: unset;
    width: 100%;
  }
}

@media (max-width: 500px) {
  .video-gallery .all-videos {
    grid-template-columns: 1fr;
  }

  .video-gallery-container {
    max-width: 400px;
  }

  .video-gallery-container h2.title {
    font-size: 24px;
    font-weight: bold;
  }
}
 .BorderColorChangeElement {
  	animation: BorderColorChange 1s ease-out 0s infinite alternate none running;
}
@keyframes BorderColorChange{
  	0%  { border: 10px solid #ffc0cb;}
  	100%  { border: 10px solid #ff69b4;}
}
@keyframes rotateAnim {
    0% { transform: rotate(deg);}
    100% { transform:rotate(360deg);}
}
@keyframes scaler {
  0% {
    transform: scale(1);
  }
  100% {    transform: scale(1.5);
  }
}
.imgAnim691 {
  animation: rotateAnim 10s linear 0s infinite forwards running;
}
.btnAnim691 {
  animation: scaler 1s linear 0s infinite alternate none running;
}
.btnAnim691:hover{
  animation-play-state: paused;
}
.download-button-container {
  width: 90%;
  max-width: 600px;
  background: #eee;
  margin: 24px auto;
  padding: 16px;
  text-align: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  border-radius: 10px;
  box-shadow: inset 0 10px 15px -3px rgba(0, 0, 0, 0.1);
  display: flex;
  flex-direction: column;
  align-items: center;
}

.download-button-container .download-button {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 200px;
  justify-content: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  font-size: 16px;
  font-weight: 300;
  text-transform: uppercase;
  letter-spacing: 2px;
  background: #ef233c;
  border: none;
  padding: 8px;
  cursor: pointer;
  color: #fff;
}

.download-button-container .download-button.active .download-icon {
  animation: bounceAnim 700ms infinite alternate;
}

.download-button-container .download-icon {
  width: 16px;
}

.download-info h3 {
  color: #023047;
  margin-bottom: 12px;
}

.download-info {
  height: 0;
  overflow: hidden;
  transition: all 400ms ease;
}

.download-button-container .download-button.active + .download-info {
  height: 90px;
}

.download-info .download-link {
  font-size: 14px;
  text-transform: uppercase;
  font-weight: 300;
  color: #023047;
  letter-spacing: 4px;
  text-decoration: underline;
  text-underline-offset: 5px;
}

@keyframes bounceAnim {
  to {
    transform: translateY(4px);
  }
}
  

&lt;/style&gt;

                             
                                
&lt;div class=&quot;video-gallery-container&quot;&gt;
&lt;div class=&quot;detail-mod&quot;&gt;
                                &lt;div class=&quot;dm-thumb&quot;&gt;&lt;img alt=&quot;Mr &amp;amp; Mrs Mahi (Hindi)&quot; src=&quot;https://images.herzindagi.info/image/2024/May/Mr-and-Mrs-Mahi-Trailer-release-2.jpg&quot; title=&quot;Mr &amp;amp; Mrs Mahi (Hindi)&quot; /&gt;&lt;/div&gt;
                                &lt;h3&gt;Mr &amp;amp; Mrs Mahi (Hindi) &lt;/h3&gt;
                                				
                       

                            &lt;div class=&quot;desc&quot;&gt;  &lt;p&gt;Watch Mr &amp;amp; Mrs Mahi (2024) Hindi full movie online SspectrumLive TV,&lt;br /&gt; Mr &amp;amp; Mrs Mahi (Hindi) movie download 720p HD quality 300MB and 1GB print A unique family and their experience. A married couple who share a love for cricket begin training in the game due to her natural talent.&lt;/p&gt;
														&lt;/div&gt;
                            &lt;div class=&quot;mvic-info&quot;&gt;
                                &lt;div class=&quot;mvici-left&quot;&gt;
                                    &lt;p&gt;&lt;strong&gt;Genres: &lt;/strong&gt;Watch Hindi Movies&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Actors: &lt;/strong&gt;Janhvi Kapoor, Kumud Mishra, Rajkummar Rao&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Director: &lt;/strong&gt;Sharan Sharma&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Country: &lt;/strong&gt;India&lt;br /&gt;&lt;/p&gt;
                                 &lt;/div&gt;
                                &lt;div class=&quot;mvici-right&quot;&gt;
									                                    &lt;p&gt;&lt;strong&gt;Duration:&lt;/strong&gt;  min&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; &lt;span class=&quot;quality&quot;&gt;CAM&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; 2024&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;IMDb:&lt;/strong&gt; 8.1&lt;/p&gt;

                                                              &lt;p id=&quot;imdb&quot;&gt;&lt;strong&gt;IMDb ID:&lt;/strong&gt; &lt;span id=&quot;imdb_id&quot;&gt;&lt;/span&gt;&lt;/p&gt;    
                                                          &lt;/div&gt;
                                &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;/div&gt;
                            &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;!--keywords--&gt;
                            &lt;div id=&quot;mv-keywords&quot;&gt;
                                &lt;strong class=&quot;mr10&quot;&gt;Keywords:&lt;/strong&gt;
									&lt;h5&gt;Mr &amp;amp; Mrs Mahi (2024) Hindi Movie&lt;/h5&gt;&lt;h5&gt;Mr &amp;amp; Mrs Mahi&amp;nbsp;&lt;/h5&gt;                            &lt;/div&gt;
                        &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                    &lt;/div&gt;
  
  
  
  
  
  &lt;div class=&quot;pa-main&quot;&gt;
  &lt;div class=&quot;widget-content&quot;&gt;
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...Subscribe our channel for Upcomiiing New movies notification....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;
&lt;/div&gt;
    
    &lt;center&gt; &lt;h3&gt;Mr &amp;amp; Mrs Mahi (Hindi) Player 1 &lt;/h3&gt;&lt;/center&gt;
    
    &lt;div class=&quot;container2&quot;&gt;
      
        &lt;div class=&quot;box box1&quot;&gt;&lt;/div&gt;
	
          &lt;div class=&quot;box box2&quot;&gt;
          
         &lt;div class=&quot;video-container&quot;&gt;
          
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;https://teamomw6.com/xwwm2wewpegqkov2bs4eaiweve4prdvuwsp53v2sljiehfyvzg4oxadhpr5abiehfyvzg4m6hhtwu6a/master.m3u8&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;/div&gt;                
   &lt;br /&gt; 
 &lt;center&gt; &lt;h3&gt;Mr &amp;amp; Mrs Mahi (Hindi) Player 2 &lt;/h3&gt;&lt;/center&gt;
    
    &lt;div class=&quot;container2&quot;&gt;
      
        &lt;div class=&quot;box box1&quot;&gt;&lt;/div&gt;
	
          &lt;div class=&quot;box box2&quot;&gt;
          
         &lt;div class=&quot;video-container&quot;&gt;
          
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;https://okmalayalam.org/bewab/8.php?url=https://teamomw6.com/hls/xwwm2wewpegqkov2bs4eaiweve4prdvuwsp53v2sl,jiehfyvzg4oxadhpr5a,biehfyvzg4m6hhtwu6a,.urlset/master.m3u8&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;/div&gt;                
    
    &lt;div class=&quot;download-button-container&quot;&gt;
      &lt;button class=&quot;download-button&quot;&gt;Download&lt;span class=&quot;download-icon&quot;&gt;
          &lt;svg class=&quot;h-6 w-6&quot; fill=&quot;none&quot; stroke-width=&quot;2&quot; stroke=&quot;currentColor&quot; viewbox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
            &lt;path d=&quot;M19 14l-7 7m0 0l-7-7m7 7V3&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
          &lt;/path&gt;&lt;/svg&gt;
        &lt;/span&gt;
      &lt;/button&gt;
    

      &lt;div class=&quot;download-info&quot;&gt;
        &lt;h3&gt;Your download link will appear in 5 seconds.&lt;/h3&gt;
      &lt;/div&gt;
    &lt;/div&gt;
 






&lt;script&gt;
const downloadButton = document.querySelector(
  &quot;.download-button-container .download-button&quot;
);
const downloadHeading = document.querySelector(&quot;.download-info h3&quot;);
const downloadInfo = document.querySelector(&quot;.download-info&quot;);

let downloadTimer;
let remainingTime = 5;
let linkDisplayed = false;

const showDownloadLink = () =&gt; {
  if (!linkDisplayed) {
    const downloadLink = document.createElement(&quot;a&quot;);
    downloadLink.href = &quot;https://sspectrumlivetv.blogspot.com/p/your-download-link-will-appear-in-5_36.html&quot;;
    downloadLink.innerHTML = &quot;Click Here&quot;;
    downloadLink.classList.add(&quot;download-link&quot;);
    downloadInfo.appendChild(downloadLink);
  }
  linkDisplayed = true;
};

downloadButton.addEventListener(&quot;click&quot;, () =&gt; {
  downloadButton.classList.add(&quot;active&quot;);

  downloadTimer = setInterval(() =&gt; {
    remainingTime--;

    if (remainingTime &lt;= 0) {
      clearInterval(downloadTimer);
      showDownloadLink();
      downloadHeading.innerHTML = &quot;Here is the download link.&quot;;
    } else {
      downloadHeading.innerHTML = `Your download link will appear in ${remainingTime} seconds.`;
    }
  }, 1000);
});
&lt;/script&gt;

  &lt;p&gt;Or Direct Download From Above link &lt;/p&gt;


      
  


  

  

  
  &lt;!--/main--&gt;
&lt;center&gt;&lt;!--info line, ad unit name: Footer--&gt;

&lt;script async=&quot;&quot; src=&quot;https://tags.h12-media.com/load2.js&quot;&gt;&lt;/script&gt;&lt;/center&gt;



            &lt;div id=&quot;copyright&quot;&gt;
                &lt;p&gt;&lt;a href=&quot;&quot; id=&quot;logo-footer&quot;&gt;&lt;/a&gt;&lt;/p&gt;
                &lt;p&gt;Copyright © &lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;. All Rights
                    Reserved 2023&lt;/p&gt;
            &lt;/div&gt;
  
&lt;b&gt;We do not host any files on it’s servers. All files or contents hosted on third party websites.
We do not accept responsibility for contents hosted on third party websites.
We just index those links which are already available in internet&lt;/b&gt;


&lt;/div&gt;&lt;/div&gt;

&lt;style&gt;

.codehap {
      display: flex;
      flex-wrap: wrap;
    }

    .codehapBox, .codehap_box {
      box-sizing: border-box;
      width: 100%;
      padding: 10px;
      border: 1px solid #ccc;
    }

    @media (min-width: 600px) {
      .codehapBox {
        width: 50%;
      }
    }
    
.video-container {
    position: relative;
    padding-bottom: 56.25%;
    padding-top: 0px;
    height: 0%;
    overflow: hidden;
}

.video-container iframe {
    position: absolute;
    top:0;
    left: 0%;
    width: 100%;
    height: 100%;
}
.codehapContent{
 
margin:auto;


}

&lt;/style&gt;


	

 
&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/1950405281799955885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/05/mr-mrs-mahi-hindi.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/1950405281799955885'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/1950405281799955885'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/05/mr-mrs-mahi-hindi.html' title='Mr &amp; Mrs Mahi (Hindi)'/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUlaBSfm5DfHr9m02brKS9RjSvjVIB14DqGmoTrtT_poxMLtBR-gPnKmTjNi0upwxyYA9r1iskukjSzgEGGbXtdTqkGDBuCiFLxg4x9o6A_CELiaUp4rbhN2YVvnEqvkyAdbS3uKLgLYXBC9W7Z3a3aD_UcC1MhQL527jKnTVbGnFJe-salX7sVidPZpU/s72-c/Mr-Mrs-Mahi-2024-Hindi-Language.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-4668947409587745391</id><published>2024-05-31T00:48:00.000-07:00</published><updated>2024-05-31T00:53:02.038-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bollywood Movie"/><title type='text'>Dedh Bigha Zameen (Hindi)</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3mObfvbKSMsp7LOJQyLTddkxg1flEquTUtr3d8O7qEmC47E7o_B26RXlXmp1YDRMJV2UokA5u7IBjsEa-5T7zyNg-FXSdFlZMo_gOmnbvwk5z_4iqfzo-g4sF3xoxnwiJz0VMreZiddZcxwTJCj6Q4CCc2OqXjgkFKRATqIpt_a4tWebJMbC1TpN8SUE/s220/Dedh-Bigha-Zameen-2024-Hindi-Language.png&quot; style=&quot;clear: left; display: block; float: left; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;220&quot; data-original-width=&quot;165&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3mObfvbKSMsp7LOJQyLTddkxg1flEquTUtr3d8O7qEmC47E7o_B26RXlXmp1YDRMJV2UokA5u7IBjsEa-5T7zyNg-FXSdFlZMo_gOmnbvwk5z_4iqfzo-g4sF3xoxnwiJz0VMreZiddZcxwTJCj6Q4CCc2OqXjgkFKRATqIpt_a4tWebJMbC1TpN8SUE/s320/Dedh-Bigha-Zameen-2024-Hindi-Language.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;style&gt;
.video-gallery-container {
  width: 100%;
  font-family: &quot;Roboto&quot;, sans-serif;
  background: #ffd166;
  padding: 8px 0 0 0;
  margin: 0 auto;
}
  
.video-gallery-container,
.video-gallery-container * {
  box-sizing: border-box;
}
 
.video-gallery-container h2.title {
  text-align: center;
  font-weight: 300;
  text-transform: uppercase;
  font-size: 34px;
  margin-bottom: 24px;
}

.video-gallery-container .video-gallery {
  display: 100%;
  background: #02151e;
  justify-content: center;
  padding: 16px;
  padding-top: 24px;
  gap: 24px;
  color: #fff;
}

.video-gallery h3.video-title {
  line-height: 1.6;
  font-weight: 700;
  font-size: 20px;
  width: 100%;
}

.video-gallery .thumbnail {
  height: 120px;
  cursor: pointer;
  width: 240px;
  
}

.video-gallery .video {
  position: relative;
}

.video-gallery .video:hover .play-icon {
  opacity: 1;
}

.video-gallery .play-icon {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  pointer-events: none;
  opacity: 0;
  transition: opacity 400ms ease;
}

.video-gallery .video .play-icon img {
  height: 50px;
  width: 50px;
}

.video-gallery .all-videos {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.video-gallery .responsive-iframe {
  position: relative;
  height: 0;
  overflow: hidden;
  padding-top: 56.25%;
  padding-bottom: 30px;
}

.video-gallery .responsive-iframe iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
  @media (max-width: 900px) {
  .video-gallery-container {
    width: 100%;
  }
}
  
@media (max-width: 700px) {
  .video-gallery-container .video-gallery {
    flex-direction: column;
  }

  .video-gallery .all-videos {
    display: grid;
    grid-template-columns: 1fr 1fr;
  }

  .video-gallery .thumbnail {
    height: unset;
    width: 100%;
  }
}

@media (max-width: 500px) {
  .video-gallery .all-videos {
    grid-template-columns: 1fr;
  }

  .video-gallery-container {
    max-width: 400px;
  }

  .video-gallery-container h2.title {
    font-size: 24px;
    font-weight: bold;
  }
}
 .BorderColorChangeElement {
  	animation: BorderColorChange 1s ease-out 0s infinite alternate none running;
}
@keyframes BorderColorChange{
  	0%  { border: 10px solid #ffc0cb;}
  	100%  { border: 10px solid #ff69b4;}
}
@keyframes rotateAnim {
    0% { transform: rotate(deg);}
    100% { transform:rotate(360deg);}
}
@keyframes scaler {
  0% {
    transform: scale(1);
  }
  100% {    transform: scale(1.5);
  }
}
.imgAnim691 {
  animation: rotateAnim 10s linear 0s infinite forwards running;
}
.btnAnim691 {
  animation: scaler 1s linear 0s infinite alternate none running;
}
.btnAnim691:hover{
  animation-play-state: paused;
}
.download-button-container {
  width: 90%;
  max-width: 600px;
  background: #eee;
  margin: 24px auto;
  padding: 16px;
  text-align: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  border-radius: 10px;
  box-shadow: inset 0 10px 15px -3px rgba(0, 0, 0, 0.1);
  display: flex;
  flex-direction: column;
  align-items: center;
}

.download-button-container .download-button {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 200px;
  justify-content: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  font-size: 16px;
  font-weight: 300;
  text-transform: uppercase;
  letter-spacing: 2px;
  background: #ef233c;
  border: none;
  padding: 8px;
  cursor: pointer;
  color: #fff;
}

.download-button-container .download-button.active .download-icon {
  animation: bounceAnim 700ms infinite alternate;
}

.download-button-container .download-icon {
  width: 16px;
}

.download-info h3 {
  color: #023047;
  margin-bottom: 12px;
}

.download-info {
  height: 0;
  overflow: hidden;
  transition: all 400ms ease;
}

.download-button-container .download-button.active + .download-info {
  height: 90px;
}

.download-info .download-link {
  font-size: 14px;
  text-transform: uppercase;
  font-weight: 300;
  color: #023047;
  letter-spacing: 4px;
  text-decoration: underline;
  text-underline-offset: 5px;
}

@keyframes bounceAnim {
  to {
    transform: translateY(4px);
  }
}
  

&lt;/style&gt;

                             
                                
&lt;div class=&quot;video-gallery-container&quot;&gt;
&lt;div class=&quot;detail-mod&quot;&gt;
                                &lt;div class=&quot;dm-thumb&quot;&gt;&lt;img alt=&quot;Dedh Bigha Zameen (Hindi)&quot; src=&quot;https://static.toiimg.com/thumb/msid-110494180,width-1280,resizemode-4/110494180.jpg&quot; title=&quot;Dedh Bigha Zameen (Hindi)&quot; /&gt;&lt;/div&gt;
                                &lt;h3&gt;Dedh Bigha Zameen (Hindi)&lt;/h3&gt;
                                				 
                       

                            &lt;div class=&quot;desc&quot;&gt;  &lt;p&gt;Watch Dedh Bigha Zameen (2024) Hindi full movie online SspectrumLive TV,&lt;br /&gt; Dedh Bigha Zameen (Hindi) movie download 720p HD quality 300MB and 1GB print A unique family and their experience. Anil sells his land for his sister’s wedding, but a powerful official steals it. He fights for justice, facing threats and betrayal.&lt;/p&gt;
														&lt;/div&gt;
                            &lt;div class=&quot;mvic-info&quot;&gt;
                                &lt;div class=&quot;mvici-left&quot;&gt;
                                    &lt;p&gt;&lt;strong&gt;Genres: &lt;/strong&gt;Watch Hindi Movies&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Actors: &lt;/strong&gt;Durgesh Kumar, Khushali Kumar, Pratik Gandhi&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Director: &lt;/strong&gt;Pulkit&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Country: &lt;/strong&gt;India&lt;br /&gt;&lt;/p&gt;
                                 &lt;/div&gt;
                                &lt;div class=&quot;mvici-right&quot;&gt;
									                                    &lt;p&gt;&lt;strong&gt;Duration:&lt;/strong&gt;  min&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; &lt;span class=&quot;quality&quot;&gt;HD&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; 2024&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;IMDb:&lt;/strong&gt; 7.2&lt;/p&gt;

                                                              &lt;p id=&quot;imdb&quot;&gt;&lt;strong&gt;IMDb ID:&lt;/strong&gt; &lt;span id=&quot;imdb_id&quot;&gt;&lt;/span&gt;&lt;/p&gt;    
                                                          &lt;/div&gt;
                                &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;/div&gt;
                            &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;!--keywords--&gt;
                            &lt;div id=&quot;mv-keywords&quot;&gt;
                                &lt;strong class=&quot;mr10&quot;&gt;Keywords:&lt;/strong&gt;
									&lt;h5&gt;Dedh Bigha Zameen (2024) Hindi Movie&lt;/h5&gt;&lt;h5&gt;Dedh Bigha Zameen&amp;nbsp;&lt;/h5&gt;                            &lt;/div&gt;
                        &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                    &lt;/div&gt;
  
  
  
  &lt;div class=&quot;pa-main&quot;&gt;
  &lt;div class=&quot;widget-content&quot;&gt;
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...Subscribe our channel for Upcomiiing New movies notification....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;
&lt;/div&gt;
    
    &lt;center&gt; &lt;h3&gt;Dedh Bigha Zameen (Hindi) Player 1 &lt;/h3&gt;&lt;/center&gt;
    
    &lt;div class=&quot;container2&quot;&gt;
      
        &lt;div class=&quot;box box1&quot;&gt;&lt;/div&gt;
	
          &lt;div class=&quot;box box2&quot;&gt;
          
         &lt;div class=&quot;video-container&quot;&gt;
          
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;https://teamomw6.com/xwwm2b4wpegqkov2bs4eajeyxr2w5kxqszkgncxvjlnedgxmfggvzvcsdgyqdnedgxmfggwfcrjjzta3nedgxmfgg2u56hd3xa/master.m3u8&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;/div&gt;                
   &lt;br /&gt; 
 &lt;center&gt; &lt;h3&gt;Dedh Bigha Zameen (Hindi) Player 2 &lt;/h3&gt;&lt;/center&gt;
    
    &lt;div class=&quot;container2&quot;&gt;
      
        &lt;div class=&quot;box box1&quot;&gt;&lt;/div&gt;
	
          &lt;div class=&quot;box box2&quot;&gt;
          
         &lt;div class=&quot;video-container&quot;&gt;
          
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;https://okmalayalam.org/bewab/8.php?url=https://teamomw6.com/hls/xwwm2b4wpegqkov2bs4eajeyxr2w5kxqszkgncxvj,lnedgxmfggvzvcsdgyq,dnedgxmfggwfcrjjzta,3nedgxmfgg2u56hd3xa,.urlset/master.m3u8&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;/div&gt;                
    
    &lt;div class=&quot;download-button-container&quot;&gt;
      &lt;button class=&quot;download-button&quot;&gt;Download&lt;span class=&quot;download-icon&quot;&gt;
          &lt;svg class=&quot;h-6 w-6&quot; fill=&quot;none&quot; stroke-width=&quot;2&quot; stroke=&quot;currentColor&quot; viewbox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
            &lt;path d=&quot;M19 14l-7 7m0 0l-7-7m7 7V3&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
          &lt;/path&gt;&lt;/svg&gt;
        &lt;/span&gt;
      &lt;/button&gt;
    

      &lt;div class=&quot;download-info&quot;&gt;
        &lt;h3&gt;Your download link will appear in 5 seconds.&lt;/h3&gt;
      &lt;/div&gt;
    &lt;/div&gt;
 






&lt;script&gt;
const downloadButton = document.querySelector(
  &quot;.download-button-container .download-button&quot;
);
const downloadHeading = document.querySelector(&quot;.download-info h3&quot;);
const downloadInfo = document.querySelector(&quot;.download-info&quot;);

let downloadTimer;
let remainingTime = 5;
let linkDisplayed = false;

const showDownloadLink = () =&gt; {
  if (!linkDisplayed) {
    const downloadLink = document.createElement(&quot;a&quot;);
    downloadLink.href = &quot;https://sspectrumlivetv.blogspot.com/p/your-download-link-will-appear-in-5_31.html&quot;;
    downloadLink.innerHTML = &quot;Click Here&quot;;
    downloadLink.classList.add(&quot;download-link&quot;);
    downloadInfo.appendChild(downloadLink);
  }
  linkDisplayed = true;
};

downloadButton.addEventListener(&quot;click&quot;, () =&gt; {
  downloadButton.classList.add(&quot;active&quot;);

  downloadTimer = setInterval(() =&gt; {
    remainingTime--;

    if (remainingTime &lt;= 0) {
      clearInterval(downloadTimer);
      showDownloadLink();
      downloadHeading.innerHTML = &quot;Here is the download link.&quot;;
    } else {
      downloadHeading.innerHTML = `Your download link will appear in ${remainingTime} seconds.`;
    }
  }, 1000);
});
&lt;/script&gt;

  &lt;p&gt;Or Direct Download From Above link &lt;/p&gt;


      
  


  

  

  
  &lt;!--/main--&gt;
&lt;center&gt;&lt;!--info line, ad unit name: Footer--&gt;

&lt;script async=&quot;&quot; src=&quot;https://tags.h12-media.com/load2.js&quot;&gt;&lt;/script&gt;&lt;/center&gt;



            &lt;div id=&quot;copyright&quot;&gt;
                &lt;p&gt;&lt;a href=&quot;&quot; id=&quot;logo-footer&quot;&gt;&lt;/a&gt;&lt;/p&gt;
                &lt;p&gt;Copyright © &lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;. All Rights
                    Reserved 2023&lt;/p&gt;
            &lt;/div&gt;
  
&lt;b&gt;We do not host any files on it’s servers. All files or contents hosted on third party websites.
We do not accept responsibility for contents hosted on third party websites.
We just index those links which are already available in internet&lt;/b&gt;


&lt;/div&gt;&lt;/div&gt;

&lt;style&gt;

.codehap {
      display: flex;
      flex-wrap: wrap;
    }

    .codehapBox, .codehap_box {
      box-sizing: border-box;
      width: 100%;
      padding: 10px;
      border: 1px solid #ccc;
    }

    @media (min-width: 600px) {
      .codehapBox {
        width: 50%;
      }
    }
    
.video-container {
    position: relative;
    padding-bottom: 56.25%;
    padding-top: 0px;
    height: 0%;
    overflow: hidden;
}

.video-container iframe {
    position: absolute;
    top:0;
    left: 0%;
    width: 100%;
    height: 100%;
}
.codehapContent{
 
margin:auto;


}

&lt;/style&gt;


	

 
&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/4668947409587745391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/05/dedh-bigha-zameen-hindi.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/4668947409587745391'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/4668947409587745391'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/05/dedh-bigha-zameen-hindi.html' title='Dedh Bigha Zameen (Hindi)'/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3mObfvbKSMsp7LOJQyLTddkxg1flEquTUtr3d8O7qEmC47E7o_B26RXlXmp1YDRMJV2UokA5u7IBjsEa-5T7zyNg-FXSdFlZMo_gOmnbvwk5z_4iqfzo-g4sF3xoxnwiJz0VMreZiddZcxwTJCj6Q4CCc2OqXjgkFKRATqIpt_a4tWebJMbC1TpN8SUE/s72-c/Dedh-Bigha-Zameen-2024-Hindi-Language.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9214173474004328598.post-3456420166266067078</id><published>2024-05-30T23:14:00.000-07:00</published><updated>2024-05-30T23:14:31.096-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Bollywood Movie"/><title type='text'>House of Lies (Hindi)</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixjZQDaBaQvfUxHpGM8kYMnEkg-0XtDEFHzIfhxEQASF-o_pyqTpxiUWkyfNoHeg8ciTEQEXxF-VXKiM-iWF0Cb-6C-zHWx2sZnggAMre8Y9X8UzY7LQCIdhezYo9Hszs6VPA4-7L6M1_oeGmSwiVhffujAnxIaMWzNWjis2lAEIhAzEZ4jYwmpf0N2dU/s220/House-of-Lies-2024-Hindi-Language.png&quot; style=&quot;clear: left; display: block; float: left; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;220&quot; data-original-width=&quot;165&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixjZQDaBaQvfUxHpGM8kYMnEkg-0XtDEFHzIfhxEQASF-o_pyqTpxiUWkyfNoHeg8ciTEQEXxF-VXKiM-iWF0Cb-6C-zHWx2sZnggAMre8Y9X8UzY7LQCIdhezYo9Hszs6VPA4-7L6M1_oeGmSwiVhffujAnxIaMWzNWjis2lAEIhAzEZ4jYwmpf0N2dU/s320/House-of-Lies-2024-Hindi-Language.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;style&gt;
.video-gallery-container {
  width: 100%;
  font-family: &quot;Roboto&quot;, sans-serif;
  background: #ffd166;
  padding: 8px 0 0 0;
  margin: 0 auto;
}
  
.video-gallery-container,
.video-gallery-container * {
  box-sizing: border-box;
}
 
.video-gallery-container h2.title {
  text-align: center;
  font-weight: 300;
  text-transform: uppercase;
  font-size: 34px;
  margin-bottom: 24px;
}

.video-gallery-container .video-gallery {
  display: 100%;
  background: #02151e;
  justify-content: center;
  padding: 16px;
  padding-top: 24px;
  gap: 24px;
  color: #fff;
}

.video-gallery h3.video-title {
  line-height: 1.6;
  font-weight: 700;
  font-size: 20px;
  width: 100%;
}

.video-gallery .thumbnail {
  height: 120px;
  cursor: pointer;
  width: 240px;
  
}

.video-gallery .video {
  position: relative;
}

.video-gallery .video:hover .play-icon {
  opacity: 1;
}

.video-gallery .play-icon {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  pointer-events: none;
  opacity: 0;
  transition: opacity 400ms ease;
}

.video-gallery .video .play-icon img {
  height: 50px;
  width: 50px;
}

.video-gallery .all-videos {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.video-gallery .responsive-iframe {
  position: relative;
  height: 0;
  overflow: hidden;
  padding-top: 56.25%;
  padding-bottom: 30px;
}

.video-gallery .responsive-iframe iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
  @media (max-width: 900px) {
  .video-gallery-container {
    width: 100%;
  }
}
  
@media (max-width: 700px) {
  .video-gallery-container .video-gallery {
    flex-direction: column;
  }

  .video-gallery .all-videos {
    display: grid;
    grid-template-columns: 1fr 1fr;
  }

  .video-gallery .thumbnail {
    height: unset;
    width: 100%;
  }
}

@media (max-width: 500px) {
  .video-gallery .all-videos {
    grid-template-columns: 1fr;
  }

  .video-gallery-container {
    max-width: 400px;
  }

  .video-gallery-container h2.title {
    font-size: 24px;
    font-weight: bold;
  }
}
 .BorderColorChangeElement {
  	animation: BorderColorChange 1s ease-out 0s infinite alternate none running;
}
@keyframes BorderColorChange{
  	0%  { border: 10px solid #ffc0cb;}
  	100%  { border: 10px solid #ff69b4;}
}
@keyframes rotateAnim {
    0% { transform: rotate(deg);}
    100% { transform:rotate(360deg);}
}
@keyframes scaler {
  0% {
    transform: scale(1);
  }
  100% {    transform: scale(1.5);
  }
}
.imgAnim691 {
  animation: rotateAnim 10s linear 0s infinite forwards running;
}
.btnAnim691 {
  animation: scaler 1s linear 0s infinite alternate none running;
}
.btnAnim691:hover{
  animation-play-state: paused;
}
.download-button-container {
  width: 90%;
  max-width: 600px;
  background: #eee;
  margin: 24px auto;
  padding: 16px;
  text-align: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  border-radius: 10px;
  box-shadow: inset 0 10px 15px -3px rgba(0, 0, 0, 0.1);
  display: flex;
  flex-direction: column;
  align-items: center;
}

.download-button-container .download-button {
  display: flex;
  align-items: center;
  gap: 8px;
  width: 200px;
  justify-content: center;
  font-family: &quot;Montserrat&quot;, sans-serif;
  font-size: 16px;
  font-weight: 300;
  text-transform: uppercase;
  letter-spacing: 2px;
  background: #ef233c;
  border: none;
  padding: 8px;
  cursor: pointer;
  color: #fff;
}

.download-button-container .download-button.active .download-icon {
  animation: bounceAnim 700ms infinite alternate;
}

.download-button-container .download-icon {
  width: 16px;
}

.download-info h3 {
  color: #023047;
  margin-bottom: 12px;
}

.download-info {
  height: 0;
  overflow: hidden;
  transition: all 400ms ease;
}

.download-button-container .download-button.active + .download-info {
  height: 90px;
}

.download-info .download-link {
  font-size: 14px;
  text-transform: uppercase;
  font-weight: 300;
  color: #023047;
  letter-spacing: 4px;
  text-decoration: underline;
  text-underline-offset: 5px;
}

@keyframes bounceAnim {
  to {
    transform: translateY(4px);
  }
}
  

&lt;/style&gt;

                             
                                
&lt;div class=&quot;video-gallery-container&quot;&gt;
&lt;div class=&quot;detail-mod&quot;&gt;
                                &lt;div class=&quot;dm-thumb&quot;&gt;&lt;img alt=&quot;House of Lies (Hindi)&quot; src=&quot;https://newsroompost.com/wp-content/uploads/2024/05/house-1.jpg&quot; title=&quot;House of Lies (Hindi)&quot; /&gt;&lt;/div&gt;
                                &lt;h3&gt;House of Lies (Hindi)&lt;/h3&gt;
                                				

                       

                            &lt;div class=&quot;desc&quot;&gt;  &lt;p&gt;Watch House of Lies (2024) Hindi full movie online SspectrumLive TV,&lt;br /&gt; House of Lies (Hindi) movie download 720p HD quality 300MB and 1GB print A unique family and their experience. After Albert’s murder on his birthday, Officer Rajeev investigates numerous suspects, uncovering lies and seeking the mastermind behind the seemingly perfect Pinto House.&lt;/p&gt;
														&lt;/div&gt;
                            &lt;div class=&quot;mvic-info&quot;&gt;
                                &lt;div class=&quot;mvici-left&quot;&gt;
                                    &lt;p&gt;&lt;strong&gt;Genres: &lt;/strong&gt;Watch Hindi Movies&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Actors: &lt;/strong&gt;Ajitesh Gupta, Sanjay Kapoor, Smiley Suri&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Director: &lt;/strong&gt;Saumitra Singh&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Country: &lt;/strong&gt;India&lt;br /&gt;&lt;/p&gt;
                                 &lt;/div&gt;
                                &lt;div class=&quot;mvici-right&quot;&gt;
									                                    &lt;p&gt;&lt;strong&gt;Duration:&lt;/strong&gt;  min&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Quality:&lt;/strong&gt; &lt;span class=&quot;quality&quot;&gt;HD&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;Release:&lt;/strong&gt; 2024&lt;br /&gt;&lt;/p&gt;
                                    &lt;p&gt;&lt;strong&gt;IMDb:&lt;/strong&gt; 7.0&lt;/p&gt;

                                                              &lt;p id=&quot;imdb&quot;&gt;&lt;strong&gt;IMDb ID:&lt;/strong&gt; &lt;span id=&quot;imdb_id&quot;&gt;&lt;/span&gt;&lt;/p&gt;    
                                                          &lt;/div&gt;
                                &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;/div&gt;
                            &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                            &lt;!--keywords--&gt;
                            &lt;div id=&quot;mv-keywords&quot;&gt;
                                &lt;strong class=&quot;mr10&quot;&gt;Keywords:&lt;/strong&gt;
									&lt;h5&gt;House of Lies (2024) Hindi Movie&lt;/h5&gt;&lt;h5&gt;House of Lies&amp;nbsp;&lt;/h5&gt;                            &lt;/div&gt;
                        &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                    &lt;/div&gt;
  
  
  &lt;div class=&quot;pa-main&quot;&gt;
  &lt;div class=&quot;widget-content&quot;&gt;
&lt;marquee&gt;&lt;div&gt;&lt;b&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;YOU ARE WATCHING &lt;/span&gt;&lt;span style=&quot;color: #93c47d; font-size: 38px;&quot;&gt;SSPECTRUMLIVE TV&lt;/span&gt;&lt;span style=&quot;color: red; font-size: 38px;&quot;&gt;...Subscribe our channel for Upcomiiing New movies notification....THANK YOU FOR WATCHING &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/marquee&gt;
&lt;/div&gt;
    
    &lt;center&gt; &lt;h3&gt;House of Lies (Hindi) Player 1 &lt;/h3&gt;&lt;/center&gt;
    
    &lt;div class=&quot;container2&quot;&gt;
      
        &lt;div class=&quot;box box1&quot;&gt;&lt;/div&gt;
	
          &lt;div class=&quot;box box2&quot;&gt;
          
         &lt;div class=&quot;video-container&quot;&gt;
          
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;https://teamomw6.com/xwwm2aewpegqkov2bs4eal6cxaluuqgdyr2mlrdwb4honszq7qbjiwckiwgquhonszq7qbo76mlxbdq/master.m3u8&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;/div&gt;                
   &lt;br /&gt; 
 &lt;center&gt; &lt;h3&gt;House of Lies (Hindi) Player 2 &lt;/h3&gt;&lt;/center&gt;
    
    &lt;div class=&quot;container2&quot;&gt;
      
        &lt;div class=&quot;box box1&quot;&gt;&lt;/div&gt;
	
          &lt;div class=&quot;box box2&quot;&gt;
          
         &lt;div class=&quot;video-container&quot;&gt;
          
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; marginheight=&quot;0&quot; marginwidth=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;https://okmalayalam.org/bewab/8.php?url=https://teamomw6.com/hls/xwwm2aewpegqkov2bs4eal6cxaluuqgdyr2mlrdwb,4honszq7qbjiwckiwgq,uhonszq7qbo76mlxbdq,.urlset/master.m3u8&quot;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;/div&gt;                
    
    &lt;div class=&quot;download-button-container&quot;&gt;
      &lt;button class=&quot;download-button&quot;&gt;Download&lt;span class=&quot;download-icon&quot;&gt;
          &lt;svg class=&quot;h-6 w-6&quot; fill=&quot;none&quot; stroke-width=&quot;2&quot; stroke=&quot;currentColor&quot; viewbox=&quot;0 0 24 24&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
            &lt;path d=&quot;M19 14l-7 7m0 0l-7-7m7 7V3&quot; stroke-linecap=&quot;round&quot; stroke-linejoin=&quot;round&quot;&gt;
          &lt;/path&gt;&lt;/svg&gt;
        &lt;/span&gt;
      &lt;/button&gt;
    

      &lt;div class=&quot;download-info&quot;&gt;
        &lt;h3&gt;Your download link will appear in 5 seconds.&lt;/h3&gt;
      &lt;/div&gt;
    &lt;/div&gt;
 






&lt;script&gt;
const downloadButton = document.querySelector(
  &quot;.download-button-container .download-button&quot;
);
const downloadHeading = document.querySelector(&quot;.download-info h3&quot;);
const downloadInfo = document.querySelector(&quot;.download-info&quot;);

let downloadTimer;
let remainingTime = 5;
let linkDisplayed = false;

const showDownloadLink = () =&gt; {
  if (!linkDisplayed) {
    const downloadLink = document.createElement(&quot;a&quot;);
    downloadLink.href = &quot;https://sspectrumlivetv.blogspot.com/p/your-download-link-will-appear-in-5_42.html&quot;;
    downloadLink.innerHTML = &quot;Click Here&quot;;
    downloadLink.classList.add(&quot;download-link&quot;);
    downloadInfo.appendChild(downloadLink);
  }
  linkDisplayed = true;
};

downloadButton.addEventListener(&quot;click&quot;, () =&gt; {
  downloadButton.classList.add(&quot;active&quot;);

  downloadTimer = setInterval(() =&gt; {
    remainingTime--;

    if (remainingTime &lt;= 0) {
      clearInterval(downloadTimer);
      showDownloadLink();
      downloadHeading.innerHTML = &quot;Here is the download link.&quot;;
    } else {
      downloadHeading.innerHTML = `Your download link will appear in ${remainingTime} seconds.`;
    }
  }, 1000);
});
&lt;/script&gt;

  &lt;p&gt;Or Direct Download From Above link &lt;/p&gt;


      
  


  

  

  
  &lt;!--/main--&gt;
&lt;center&gt;&lt;!--info line, ad unit name: Footer--&gt;

&lt;script async=&quot;&quot; src=&quot;https://tags.h12-media.com/load2.js&quot;&gt;&lt;/script&gt;&lt;/center&gt;



            &lt;div id=&quot;copyright&quot;&gt;
                &lt;p&gt;&lt;a href=&quot;&quot; id=&quot;logo-footer&quot;&gt;&lt;/a&gt;&lt;/p&gt;
                &lt;p&gt;Copyright © &lt;a href=&quot;https://sspectrumlivetv.blogspot.com/&quot; title=&quot;SspectrumLive&quot;&gt;SspectrumLive TV&lt;/a&gt;. All Rights
                    Reserved 2023&lt;/p&gt;
            &lt;/div&gt;
  
&lt;b&gt;We do not host any files on it’s servers. All files or contents hosted on third party websites.
We do not accept responsibility for contents hosted on third party websites.
We just index those links which are already available in internet&lt;/b&gt;


&lt;/div&gt;&lt;/div&gt;

&lt;style&gt;

.codehap {
      display: flex;
      flex-wrap: wrap;
    }

    .codehapBox, .codehap_box {
      box-sizing: border-box;
      width: 100%;
      padding: 10px;
      border: 1px solid #ccc;
    }

    @media (min-width: 600px) {
      .codehapBox {
        width: 50%;
      }
    }
    
.video-container {
    position: relative;
    padding-bottom: 56.25%;
    padding-top: 0px;
    height: 0%;
    overflow: hidden;
}

.video-container iframe {
    position: absolute;
    top:0;
    left: 0%;
    width: 100%;
    height: 100%;
}
.codehapContent{
 
margin:auto;


}

&lt;/style&gt;


	

 
&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://sspectrumlivetv.blogspot.com/feeds/3456420166266067078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/05/house-of-lies-hindi.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/3456420166266067078'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/9214173474004328598/posts/default/3456420166266067078'/><link rel='alternate' type='text/html' href='https://sspectrumlivetv.blogspot.com/2024/05/house-of-lies-hindi.html' title='House of Lies (Hindi)'/><author><name>SspectrumLive TV</name><uri>http://www.blogger.com/profile/10620668927725605028</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAGVMwTTcFDHBSo4vMJHk_cvndbGar4a8pak9UXaeICfzcMxkqzLtuSbPcgeBj2mLaCEpkzCBEEsUFYZLXuC3GiFj4oTvK0n0AMs9N3XuBTKvYBBA7_5yZVynzJMvvi6o/s96/ic_launcher.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixjZQDaBaQvfUxHpGM8kYMnEkg-0XtDEFHzIfhxEQASF-o_pyqTpxiUWkyfNoHeg8ciTEQEXxF-VXKiM-iWF0Cb-6C-zHWx2sZnggAMre8Y9X8UzY7LQCIdhezYo9Hszs6VPA4-7L6M1_oeGmSwiVhffujAnxIaMWzNWjis2lAEIhAzEZ4jYwmpf0N2dU/s72-c/House-of-Lies-2024-Hindi-Language.png" height="72" width="72"/><thr:total>0</thr:total></entry></feed>